Название: Double-buffering? Отправлено: Igors от Сентябрь 10, 2012, 15:10 Добрый день
Есть ли double-buffering на Вындоуз или хотя бы на MSVC? :) Откудв мой интерес - когда отлаживаю рисование, мне трудно спрыгнуть на точку останова - ведь рисование будет вызвано всякий раз когда окно приложения перекрывается окнами самой MSVC. Приходится как-то притыкивать окна, невдобняк. Как бы порешать? Спасибо Название: Re: Double-buffering? Отправлено: andrew.k от Сентябрь 10, 2012, 15:23 я обычно в такой ситуации уменьшаю размер IDE, чтобы оно не перекрывало рисуемую область в приложении.
Но этот способ не всегда помогает. Название: Re: Double-buffering? Отправлено: xokc от Сентябрь 10, 2012, 16:37 Добавить второй монитор или делать удалённую отладку на другом компе через Remote Debugging Tools.
Название: Re: Double-buffering? Отправлено: Igors от Сентябрь 10, 2012, 16:40 я обычно в такой ситуации уменьшаю размер IDE, чтобы оно не перекрывало рисуемую область в приложении. Я это и имел ввиду под "притыкиванием окон" :)Но этот способ не всегда помогает. Добавить второй монитор или делать удалённую отладку на другом компе через Remote Debugging Tools. Трата ресурсов на паршивую овцу ВындоузНазвание: Re: Double-buffering? Отправлено: Serr500 от Сентябрь 10, 2012, 18:46 Есть ли double-buffering на Вындоуз или хотя бы на MSVC? http://qt-project.org/doc/qt-4.8/qwidget.html#transparency-and-double-buffering (http://qt-project.org/doc/qt-4.8/qwidget.html#transparency-and-double-buffering) Цитировать Since Qt 4.0, QWidget automatically double-buffers its painting, so there is no need to write double-buffering code in paintEvent() to avoid flicker. когда отлаживаю рисование, мне трудно спрыгнуть на точку останова - ведь рисование будет вызвано всякий раз когда окно приложения перекрывается окнами самой MSVC. Если я не ошибаюсь, то действие двойной буферизации следующее. Буфер используется только для ликвидации "мерцаний", т.е. картинка отрисовывается не на экране, а в буфере и затем буфер за один кадр отрисовывается на экране. Затем буфер уничтожается и при "перекрытии" окна вновь вызывается функция отрисовки. Следовательно, требуемого поведения при помощи двойной буферизации не добиться.Название: Re: Double-buffering? Отправлено: Igors от Сентябрь 10, 2012, 19:28 Цитировать Since Qt 4.0, QWidget automatically double-buffers its painting, so there is no need to write double-buffering code in paintEvent() to avoid flicker. Если я не ошибаюсь, то действие двойной буферизации следующее. Буфер используется только для ликвидации "мерцаний", т.е. картинка отрисовывается не на экране, а в буфере и затем буфер за один кадр отрисовывается на экране. Затем буфер уничтожается и при "перекрытии" окна вновь вызывается функция отрисовки. Следовательно, требуемого поведения при помощи двойной буферизации не добиться. Мои наблюдения этого не подтверждают. Рисую нативными средствами (GetDC() и.т.п.) Win XP64. Заливаю квадрат синим. Затем его же красным. Мерцание прекрасно видно, из чего делаю вывод что буферизация просто отсутствует. Или я неправ? Разумеется на OSX все норм.Название: Re: Double-buffering? Отправлено: Serr500 от Сентябрь 10, 2012, 21:13 Вопрос не имеет отношения к Qt Извиняюсь. :-\ Заходил в тему с главной страницы и не обратил внимания на название ветки форума.Рисую нативными средствами (GetDC() и.т.п.) Win XP64. Заливаю квадрат синим. Затем его же красным. Мерцание прекрасно видно, из чего делаю вывод что буферизация просто отсутствует. Или я неправ? Разумеется на OSX все норм. Собственно, так оно и есть. Double buffering, как я понял, нужно реализовывать самостоятельно. Создаём в WM_CREATE свой DC через CreateCompatibleDC, по WM_PAINT рисуем в нём, если необходимо, и выводим на экран через BitBlt. В WM_DESTROY разрушаем свой DC.Название: Re: Double-buffering? Отправлено: Serr500 от Сентябрь 10, 2012, 21:20 Вот чёрт! Оказывается, я неправ! :( Начиная с Висты появилась встроенная в uxtheme двойная буферизация. http://www.codeguru.com/cpp/w-p/vista/article.php/c15709/Using-Windows-Vista-BuiltIn-Double-Buffering.htm (http://www.codeguru.com/cpp/w-p/vista/article.php/c15709/Using-Windows-Vista-BuiltIn-Double-Buffering.htm)
|