![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
igoootm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 18.3.2010 Репутация: нет Всего: нет |
это можно назвать вертикальной синхронизацией... но пока даже не понятно где инфу нарыть...
на ixbt в одной теме обмолвились, что это такая особенная технология у майкрософтов теперь - общий видео буфер для десктопа, который формируется по особенной стратегии. для аэро это да, это понятно, но почему-то и классический интерфейс стал гораздо менее ровным для отрисовки с заданой частотой. терпимо, но тож не приятно, оно ж было в порядке... проблема возникает с контролем fps, с плавностью отрисовки. при использовании обычного bitblit - инга. он теперь происходит неровно, начиная примерно с 30-ти кадров в секунду. это конечно затрагивает только софтварные рендеры и т.п. OpenGL и DirectX - там все нормально. это естественно. вот тест: http://www.nemehanika.ru/cg/download/test.exe на XP идет сверх плавно, внутри программы никаких неучтенных потерей времени нет. слева отрисовывается время расчетов, справа время простоя. ну это не важно... главное: что-то испортилось с новой версией винды и пока не понятно, что с этим делать? эффект видимо такой для аэро: - через определенный промежуток времени необходимость вывода(блитинг) натыкается на какую-то операцицию семерки и происходит задержка вывода. т.е. формально блитинг происходит, а фактически задерживается и на солидный промежуток времени. словно у десктопа есть своя частота обновления. но как это сратстается с тем, что у окон тоже свои могут быть частоты обновления? может надо это как-то в событиях более грамотно заявить, чтоб винде было понятно когда окно программы обновляется, раз битблитинг этого не достигает. хрен его знает пока... какие у кого есть соображения, может кто-то знает где об это почитать?. фактически изменились достаточно ключевые спецификации и только распространненость опенжл и деректикса маскируют пока какой-то толи ляп майкрософта толи интересную фичу... но пока больше на ляп похоже... |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Насколько я помню, чтобы правильно рисовать GDI графику нужно это делать только при получении сообщения WM_PAINT, а простимулировать появление этого сообщения можно вызовом InvalidateRect (например по таймеру) с указанием области, которую нужно перерисовать. Если рисовать в любое другое время, то можно столкнуться с тем, что свое рисование пересечется с виндовым и в некоторый момент времени будет частично отрисована своя картинка, частично фон. Кроме того, если окно не владеет контектстом, то он может стать невалидным и рисование прервется. По идее, если вы будете рисовать в WM_PAINT, то поведение будет одинаковым на всех системах при условии, что окно создается везде с одинаковыми стилями.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
igoootm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 18.3.2010 Репутация: нет Всего: нет |
это проверил уже, да. эффект тот же самый, увы...
в XP разницы нет, она видимо никак не контролирует когда приложения себя отрисовывают и никак этому не мешает. а в семерке толи сделана попытка вертикальную синхронизацию соблюсти, толи еще что... ну вертикальная вроде получилась, и известно вроде, что ее кроме как через драйвера OpenGL и DirectX не достигнуть. По таким косвенным домаслам можно построить всякие предположения о том как работает аэро, но вот например привентивное откючение вертикальной синхронизации везде-повезде тоже не помогает. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Ну при включенном Аеро, насколько я понимаю, каждое окно имеет свой буфер, поскольку окна накладываются с прозрачностью, то винда должна отрисовывать окна слоями. Теперь нельзя отрисовать свой только свое окно, чтобы не перерисовывались другие окна. В случае если аеро выключен, то необходимость в полной перерисовке также может возникнуть. Например в ситуации, когда есть несколько стоящих друг поверх друга слоистых окон (окна с прозрачностью) . Вероятно такая ситуация плохо работала на ХР и ее поправили. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
igoootm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 18.3.2010 Репутация: нет Всего: нет |
ага, это называется поправили)))...
в случае с XP никаких противоречий и сложностей нет... и в 7-ке классический интерфейс (аля XP) работает достаточно хорошо, хоть и заметно дерганней, но не настолько, чтоб переживать... и с прозрачностью и без нее, там все понятно и визуально работает так же как представляется в логике. и вроде хорошо продумано с самого начала виндов и не создает препятствий к отрисовки содержимого окна в достаточно точные моменты времени. с аэро, с ее фитчами, все запутанней. вроде там и не должно быть частоты обновления десктопа какой-то фиксированной, а вроде и должна быть иногда. т.е. там определенно есть хитрая стратегия. может пока просто не описаны некие новые элементы win-api, которые надо использовать. Может дело и не в аэро, а некой промежуточной надстройке над классическим режимом. нифига инфы пока не нашлось... Это сообщение отредактировал(а) igoootm - 1.11.2013, 19:05 |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |