| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > в Windows 7 изменилась стратегия отрисовки окон |
| Автор: igoootm 31.10.2013, 11:51 |
| это можно назвать вертикальной синхронизацией... но пока даже не понятно где инфу нарыть... на ixbt в одной теме обмолвились, что это такая особенная технология у майкрософтов теперь - общий видео буфер для десктопа, который формируется по особенной стратегии. для аэро это да, это понятно, но почему-то и классический интерфейс стал гораздо менее ровным для отрисовки с заданой частотой. терпимо, но тож не приятно, оно ж было в порядке... проблема возникает с контролем fps, с плавностью отрисовки. при использовании обычного bitblit - инга. он теперь происходит неровно, начиная примерно с 30-ти кадров в секунду. это конечно затрагивает только софтварные рендеры и т.п. OpenGL и DirectX - там все нормально. это естественно. вот тест: http://www.nemehanika.ru/cg/download/test.exe на XP идет сверх плавно, внутри программы никаких неучтенных потерей времени нет. слева отрисовывается время расчетов, справа время простоя. ну это не важно... главное: что-то испортилось с новой версией винды и пока не понятно, что с этим делать? эффект видимо такой для аэро: - через определенный промежуток времени необходимость вывода(блитинг) натыкается на какую-то операцицию семерки и происходит задержка вывода. т.е. формально блитинг происходит, а фактически задерживается и на солидный промежуток времени. словно у десктопа есть своя частота обновления. но как это сратстается с тем, что у окон тоже свои могут быть частоты обновления? может надо это как-то в событиях более грамотно заявить, чтоб винде было понятно когда окно программы обновляется, раз битблитинг этого не достигает. хрен его знает пока... какие у кого есть соображения, может кто-то знает где об это почитать?. фактически изменились достаточно ключевые спецификации и только распространненость опенжл и деректикса маскируют пока какой-то толи ляп майкрософта толи интересную фичу... но пока больше на ляп похоже... |
| Автор: Alexeis 1.11.2013, 10:06 |
| Насколько я помню, чтобы правильно рисовать GDI графику нужно это делать только при получении сообщения WM_PAINT, а простимулировать появление этого сообщения можно вызовом InvalidateRect (например по таймеру) с указанием области, которую нужно перерисовать. Если рисовать в любое другое время, то можно столкнуться с тем, что свое рисование пересечется с виндовым и в некоторый момент времени будет частично отрисована своя картинка, частично фон. Кроме того, если окно не владеет контектстом, то он может стать невалидным и рисование прервется. По идее, если вы будете рисовать в WM_PAINT, то поведение будет одинаковым на всех системах при условии, что окно создается везде с одинаковыми стилями. |
| Автор: igoootm 1.11.2013, 11:51 |
| это проверил уже, да. эффект тот же самый, увы... в XP разницы нет, она видимо никак не контролирует когда приложения себя отрисовывают и никак этому не мешает. а в семерке толи сделана попытка вертикальную синхронизацию соблюсти, толи еще что... ну вертикальная вроде получилась, и известно вроде, что ее кроме как через драйвера OpenGL и DirectX не достигнуть. По таким косвенным домаслам можно построить всякие предположения о том как работает аэро, но вот например привентивное откючение вертикальной синхронизации везде-повезде тоже не помогает. |
| Автор: igoootm 1.11.2013, 18:52 |
| ага, это называется поправили)))... в случае с XP никаких противоречий и сложностей нет... и в 7-ке классический интерфейс (аля XP) работает достаточно хорошо, хоть и заметно дерганней, но не настолько, чтоб переживать... и с прозрачностью и без нее, там все понятно и визуально работает так же как представляется в логике. и вроде хорошо продумано с самого начала виндов и не создает препятствий к отрисовки содержимого окна в достаточно точные моменты времени. с аэро, с ее фитчами, все запутанней. вроде там и не должно быть частоты обновления десктопа какой-то фиксированной, а вроде и должна быть иногда. т.е. там определенно есть хитрая стратегия. может пока просто не описаны некие новые элементы win-api, которые надо использовать. Может дело и не в аэро, а некой промежуточной надстройке над классическим режимом. нифига инфы пока не нашлось... |