-
тем не менее фраза ваша
> @!!ex © (20.06.08 13:07) [5]
> Мерцание никакого отношения к кадровой развертке не имеет.
>
> DoubleBuffer в помощь.
мною была воспринята буквально - как совет использовать DoubleBuffered property.
-
В общем получилось разобраться с DoubleBuffered property.
Эта "хрень" проявляет себя в обработчике TFTForm.onPaint.
Для эксперимента рендеринг был переписан для обработчика onPaint и перерисовывался методом TForm.Repaint (что есть криво т.к. всю форму со всеми причиндалами перерисовывает) причем рендерилось не во второй битмап а в канвас формы, и при DoubleBuffered:=true все работало с буферизацией как будто рисовали в битмап а потом на экран, при DoubleBuffered:=false всепроисходило на экране как есть со всеми вытекающими последствиями. Только практической пользы от этого мало т.к. перерисовывать форму каждый раз все же кривизна. Попытаться воспользоваться TPanel? но у нее нет метода Repaint хотя DoubleBuffered property есть, у TPaintBox наоборот Repaint есть, а DoubleBuffered property нет так что полностью согласен с @!!ex "Хрень она и есть Хрень"
-
> мною была воспринята буквально - как совет использовать
> DoubleBuffered property.
Понятно. Надо было сразу описать что я имеб ввиду, а не в [12] :)
-
господа, если кто-то решил что тема закрыта могу подкинуть свежий хворост в костер познания истин, может кто-нибудь заглянет сюда еще. Проблема с выводом картинки вроде бы решена, но как оказалось, причем не сразу, это дороговато стоило с точки зрения ресурсов машины, загрузка процессора (не ахти какого правда -Celeron800) скаканула с 3х аж до 53х % !!! Причем налицо противоречие: примененный метод полностью решил проблему с выводом на экран, а значит переброска из памяти в видеопамять происходит значительно быстрее чем процесс рендеринга, который в свою очередь абсолютно не грузит процессор, в итоге получается что на ровном месте процессор сам придумал себе работу? В поисках виновного был проверен каждый находящийся в цепочке:
1.переброска из битмап1 в битмап2
2.Рендеринг в битмапе2
3.переброска из битмап2 в форму
и как бывает в жизни виновных не нашлось, каждая процедура по отдельности грузит процессор не больше 1%.
чудеса начинаются только когда команда в сборе, причем методы разные применялись и Draw и BitBlt и даже DoubleBuffer работал в п.3 вышеуказанной цепочки ... Полтергейст блин ...
-
Как мерили?
Рекомендую установить AQTime и померить им. А если найдете крэк - поделится. :))
-
> Как мерили?
что мерили? загрузку проца если, то в TaskManager все процессы кроме Project на нулях.
если вопрос в том как попроцедурно мерялось то оставлял только 1 из трех в работе и смотрел загрузку.
Думал может некорректно TBitmap юзается? во всех примерах он в конструкцию Ditmap.Create; try .... finaly ... end; засунут, а у меня не так, но ведь с DoubleBuffered property тоже самое, там уж наверняка все корректно сделано
-
GetTickCount в руки - и вперед считать время затраченное на рендер одного кадра.
Ну и AQTime конечно тоже.
-
нету у меня того что вы написали, у меня только стандартная установка delphi7 без всяких довесков.
-
GetTIckCount - это функция WinAPI
AQTime - сдельфи не идет. Надо отдельно качать.
-
Какую версию AQTime посоветуете?
А странности продолжаются, был исключен 1-й битмап и рендерилось сразу во 2-й вместе с сеткой, а проблема осталась, и снова если рендерить на форме без буфера все нормально-загрузки нет. Эксперимент с TForm.Repaint c фоном формы отличным от битмапа показывает (зрительно) что проблема действительно в переброске. Кстати откомпилированный проект запущенный на ноутбуке с Турионом1,8-64x2 не проявил никаких задержек в исполнении кода, врядли он в 50 раз быстрее работает. Это наталкивает на нехорошие подозрения либо в проблемах в работе с памятью или видеопамятью или еще в дровах матери или видяхи трабла ... интересно что в этом случае в помощь?
-
> [49] ol'ka (22.06.08 12:59)
99% проблема в вашем коде. Где нить накосячили просто. AQtime - любой версии.
-
честно говоря для косяков там просто места нет, это весьма примитивный код, скорее допускаю какую нибудь неучтенную особенность используемых методов, потому до сих пор вожусь с кодом вместо обновления дров в системе ... хотя скоро до этого дойдет. Очередная проверка на другой машине примерно равного уровня той на которой все происходит показала отсутствие проблем с загрузкой проца в весьма жестких условиях - 200FPS
-
Отвлеченный вовопрос.
Почему инициализация битмапа записывается так:
var myBitMap: TBitmap;
...
...
myBitMap:=TBitMap.Create
вместо
myBitMap.Create, который вызывает исключение класса (Access Violation) при исполнении?
-
> [52] ol'ka (22.06.08 15:06)
Я могу только поматерится. :)
Вы в дебаггере поставьте точку останова на myBitMap.Create запустите и посмотрите(для этого надо навести мышку на переменную), какое значение у myBitMap. Оно NIL! Как можно выполнить метод, если переменная указывает в пустоту????
Читайте пожалуйста, что такое ООП и как оно работает. На форуме "Прочее" вам с удовольствием подскажут что лучше почитать.
-
Да начиталися уже всяческого, тока в голове все перепуталося, я уж примерно так и думал, только с вопросом поспешность получилась.
В общем тему наверное можно закрывать спасибо всем за подсказки.
-
Да начиталися уже всяческого, тока в голове все перепуталося, я уж примерно так и думал, только с вопросом поспешность получилась.
В общем тему наверное можно закрывать спасибо всем за подсказки.
-
загрузка проца скорее всего изза несоответствия форматов пикселей SRC & DST DC
-
> Возьмите любую игру. Принудительно отключите вертикальную
> синхронизацию... И вы не увидите мерцания. Хотя кадры и
> будут не синхронизированы.
Это не так. Просто будет не мерцание, а эффект, так называемый Tear-drop