Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> в Windows 7 изменилась стратегия отрисовки окон, есть проблема пока с непонятным решением 
:(
    Опции темы
igoootm
Дата 31.10.2013, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.3.2010

Репутация: нет
Всего: нет



это можно назвать вертикальной синхронизацией... но пока даже не понятно где инфу нарыть...
на ixbt в одной теме обмолвились, что это такая особенная технология у майкрософтов теперь - общий видео буфер для десктопа, который формируется по особенной стратегии.
для аэро это да, это понятно, но почему-то и классический интерфейс стал гораздо менее ровным для отрисовки с заданой частотой. терпимо, но тож не приятно, оно ж было в порядке...

проблема возникает с контролем fps, с плавностью отрисовки. при использовании обычного bitblit - инга.
он теперь происходит неровно, начиная примерно с 30-ти кадров в секунду. 
это конечно затрагивает только софтварные рендеры и т.п. 

OpenGL и DirectX - там все нормально. это естественно.

вот тест: http://www.nemehanika.ru/cg/download/test.exe
на XP идет сверх плавно, внутри программы никаких неучтенных потерей времени нет. слева отрисовывается время расчетов, справа время простоя. ну это не важно... главное: что-то испортилось с новой версией винды и пока не понятно, что с этим делать?

эффект видимо такой для аэро: - через определенный промежуток времени необходимость вывода(блитинг) натыкается на какую-то операцицию семерки и происходит задержка вывода. т.е. формально блитинг происходит, а фактически задерживается и на солидный промежуток времени. словно у десктопа есть своя частота обновления.  но как это сратстается с тем, что у окон тоже свои могут быть частоты обновления?
может надо это как-то в событиях более грамотно заявить, чтоб винде было понятно когда окно программы обновляется, раз битблитинг этого не достигает. хрен его знает пока...

какие у кого есть соображения, может кто-то знает где об это почитать?.  фактически изменились достаточно ключевые спецификации и только распространненость опенжл и деректикса маскируют пока какой-то толи ляп майкрософта толи интересную фичу... но пока больше на ляп похоже...
PM MAIL   Вверх
Alexeis
Дата 1.11.2013, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Насколько я помню, чтобы правильно рисовать GDI графику нужно это делать только при получении сообщения WM_PAINT, а простимулировать появление этого сообщения можно вызовом InvalidateRect (например по таймеру) с указанием области, которую нужно перерисовать. Если рисовать в любое другое время, то можно столкнуться с тем, что свое рисование пересечется с виндовым и в некоторый момент времени будет частично отрисована своя картинка, частично фон. Кроме того, если окно не владеет контектстом, то он может стать невалидным и рисование прервется. По идее, если вы будете рисовать в WM_PAINT, то поведение будет одинаковым на всех системах при условии, что окно создается везде с одинаковыми стилями. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
igoootm
Дата 1.11.2013, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.3.2010

Репутация: нет
Всего: нет



это проверил уже, да. эффект тот же самый, увы...

в XP разницы нет, она видимо никак не контролирует когда приложения себя отрисовывают и никак этому не мешает.

а в семерке толи сделана попытка вертикальную синхронизацию соблюсти, толи еще что...
ну вертикальная вроде получилась, и известно вроде, что ее кроме как через драйвера OpenGL и DirectX не достигнуть. По таким косвенным домаслам можно построить всякие предположения о том как работает аэро, но вот например привентивное откючение вертикальной синхронизации везде-повезде тоже не помогает.   
PM MAIL   Вверх
Alexeis
Дата 1.11.2013, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Цитата(igoootm @  31.10.2013,  12:51 Найти цитируемый пост)
т.е. формально блитинг происходит, а фактически задерживается и на солидный промежуток времени. словно у десктопа есть своя частота обновления.  но как это сратстается с тем, что у окон тоже свои могут быть частоты обновления?

  Ну при включенном Аеро, насколько я понимаю, каждое окно имеет свой буфер, поскольку окна накладываются с прозрачностью, то винда должна отрисовывать окна слоями. Теперь нельзя отрисовать свой только свое окно, чтобы не перерисовывались другие окна.
  В случае если аеро выключен, то необходимость в полной перерисовке также может возникнуть. Например в ситуации, когда есть несколько стоящих друг поверх друга слоистых окон (окна с прозрачностью) . Вероятно такая ситуация плохо работала на ХР и ее поправили.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
igoootm
Дата 1.11.2013, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.3.2010

Репутация: нет
Всего: нет



ага, это называется поправили)))...

в случае с XP никаких противоречий и сложностей нет...
и в 7-ке классический интерфейс (аля XP) работает достаточно хорошо, хоть и заметно дерганней, но не настолько, чтоб переживать... и с прозрачностью и без нее, там все понятно и визуально работает так же как представляется в логике. и вроде хорошо продумано с самого начала виндов и не создает препятствий к отрисовки содержимого окна в достаточно точные моменты времени.

с аэро, с ее фитчами, все запутанней. вроде там и не должно быть частоты обновления десктопа какой-то фиксированной, а вроде и должна быть иногда. т.е. там определенно есть хитрая стратегия. может пока просто не описаны некие новые элементы win-api, которые надо использовать.

Может дело и не в аэро, а некой промежуточной надстройке над классическим режимом. нифига инфы пока не нашлось...  

Это сообщение отредактировал(а) igoootm - 1.11.2013, 19:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0980 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.