Конференция "Игры" » как выловить начало кадровой развертки. [D7, WinXP]
 
  • ol'ka (20.06.08 22:32) [40]
    тем не менее фраза ваша

    > @!!ex ©   (20.06.08 13:07) [5]
    > Мерцание никакого отношения к кадровой развертке не имеет.
    >
    > DoubleBuffer в помощь.

    мною была воспринята буквально - как совет использовать DoubleBuffered property.
  • ol'ka (20.06.08 23:01) [41]
    В общем получилось разобраться с DoubleBuffered property.
    Эта "хрень" проявляет себя в обработчике TFTForm.onPaint.

    Для эксперимента рендеринг был переписан для обработчика onPaint и перерисовывался методом TForm.Repaint (что есть криво т.к. всю форму со всеми причиндалами перерисовывает) причем рендерилось не во второй битмап а в канвас формы, и при DoubleBuffered:=true все работало с буферизацией как будто рисовали в битмап а потом на экран, при DoubleBuffered:=false всепроисходило на экране как есть со всеми вытекающими последствиями. Только практической пользы от этого мало т.к. перерисовывать форму каждый раз все же кривизна. Попытаться воспользоваться TPanel? но у нее нет метода Repaint хотя DoubleBuffered property есть, у TPaintBox наоборот Repaint есть, а DoubleBuffered property нет так что полностью согласен с  @!!ex  "Хрень она и есть Хрень"
  • @!!ex © (21.06.08 09:54) [42]
    > мною была воспринята буквально - как совет использовать
    > DoubleBuffered property.

    Понятно. Надо было сразу описать что я имеб ввиду, а не в [12] :)
  • ol'ka (21.06.08 19:50) [43]
    господа, если кто-то решил что тема закрыта могу подкинуть свежий хворост в костер познания истин, может кто-нибудь заглянет сюда еще. Проблема с выводом картинки вроде бы решена, но как оказалось, причем не сразу, это дороговато стоило с точки зрения ресурсов машины, загрузка процессора (не ахти какого правда -Celeron800) скаканула с 3х аж до 53х % !!! Причем налицо противоречие: примененный метод полностью решил проблему с выводом на экран, а значит переброска из памяти в видеопамять происходит значительно быстрее чем процесс рендеринга, который в свою очередь абсолютно не грузит процессор, в итоге получается что на ровном месте процессор сам придумал себе работу? В поисках виновного был проверен каждый находящийся в цепочке:
    1.переброска из битмап1 в битмап2
    2.Рендеринг в битмапе2
    3.переброска из битмап2 в форму
    и как бывает в жизни виновных не нашлось, каждая процедура по отдельности грузит процессор не больше 1%.
    чудеса начинаются только когда команда в сборе, причем методы разные применялись и Draw и BitBlt и даже DoubleBuffer работал в п.3 вышеуказанной цепочки ... Полтергейст блин ...
  • @!!ex © (21.06.08 21:00) [44]
    Как мерили?
    Рекомендую установить AQTime и померить им. А если найдете крэк - поделится. :))
  • ol'ka (21.06.08 21:54) [45]

    > Как мерили?

    что мерили? загрузку проца если, то в TaskManager все процессы кроме Project на нулях.

    если вопрос в том как попроцедурно мерялось то оставлял только 1 из трех в работе и смотрел загрузку.

    Думал может некорректно TBitmap юзается? во всех примерах он в конструкцию Ditmap.Create; try .... finaly ... end;  засунут, а у меня не так, но ведь с DoubleBuffered property тоже самое, там уж наверняка все корректно сделано
  • @!!ex © (21.06.08 22:34) [46]
    GetTickCount в руки - и вперед считать время затраченное на рендер одного кадра.
    Ну и AQTime конечно тоже.
  • ol'ka (21.06.08 22:45) [47]
    нету у меня того что вы написали, у меня только стандартная установка delphi7 без всяких довесков.
  • @!!ex © (21.06.08 23:57) [48]
    GetTIckCount - это функция WinAPI
    AQTime -  сдельфи не идет. Надо отдельно качать.
  • ol'ka (22.06.08 12:59) [49]
    Какую версию AQTime посоветуете?
    А странности продолжаются, был исключен 1-й битмап и рендерилось сразу во 2-й вместе с сеткой, а проблема осталась, и снова если рендерить на форме без буфера все нормально-загрузки нет. Эксперимент с TForm.Repaint c фоном формы отличным от битмапа показывает (зрительно) что проблема действительно в переброске.   Кстати откомпилированный проект запущенный на ноутбуке с Турионом1,8-64x2 не проявил никаких задержек в исполнении кода, врядли он в 50 раз быстрее работает. Это наталкивает на нехорошие подозрения либо в проблемах в работе с памятью или видеопамятью или еще в дровах матери или видяхи трабла ... интересно что в этом случае в помощь?
  • @!!ex © (22.06.08 13:44) [50]
    > [49] ol'ka   (22.06.08 12:59)

    99% проблема в вашем коде. Где нить накосячили просто. AQtime - любой версии.
  • ol'ka (22.06.08 14:26) [51]
    честно говоря для косяков там просто места нет, это весьма примитивный код, скорее допускаю какую нибудь неучтенную особенность используемых методов, потому до сих пор вожусь с кодом вместо обновления дров в системе ... хотя скоро до этого дойдет. Очередная проверка на другой машине примерно равного уровня той на которой все происходит показала отсутствие проблем с загрузкой проца в весьма жестких условиях - 200FPS
  • ol'ka (22.06.08 15:06) [52]
    Отвлеченный вовопрос.

    Почему инициализация битмапа записывается так:

    var myBitMap: TBitmap;
    ...
    ...
    myBitMap:=TBitMap.Create

    вместо

    myBitMap.Create, который вызывает исключение класса (Access Violation) при исполнении?
  • @!!ex © (22.06.08 19:20) [53]
    > [52] ol'ka   (22.06.08 15:06)

    Я могу только поматерится. :)
    Вы в дебаггере поставьте точку останова на myBitMap.Create запустите и посмотрите(для этого надо навести мышку на переменную), какое значение у myBitMap. Оно NIL! Как можно выполнить метод, если переменная указывает в пустоту????
    Читайте пожалуйста, что такое ООП и как оно работает. На форуме "Прочее" вам с удовольствием подскажут что лучше почитать.
  • ol'ka (22.06.08 20:31) [54]
    Да начиталися уже всяческого, тока в голове все перепуталося, я уж примерно так и думал, только с вопросом поспешность получилась.
    В общем тему наверное можно закрывать спасибо всем за подсказки.
  • ol'ka (22.06.08 20:31) [55]
    Да начиталися уже всяческого, тока в голове все перепуталося, я уж примерно так и думал, только с вопросом поспешность получилась.
    В общем тему наверное можно закрывать спасибо всем за подсказки.
  • MultIfleX (04.07.08 13:55) [56]
    загрузка проца скорее всего изза несоответствия форматов пикселей SRC & DST DC
  • quaid (25.12.09 11:19) [57]

    > Возьмите любую игру. Принудительно отключите вертикальную
    > синхронизацию... И вы не увидите мерцания. Хотя кадры и
    > будут не синхронизированы.


    Это не так. Просто будет не мерцание, а эффект, так называемый Tear-drop
 
Конференция "Игры" » как выловить начало кадровой развертки. [D7, WinXP]
Есть новые Нет новых   [119107   +102][b:0][p:0.001]