Russian Qt Forum
Ноябрь 22, 2024, 07:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Double-buffering?  (Прочитано 7203 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Сентябрь 10, 2012, 15:10 »

Добрый день

Есть ли double-buffering на Вындоуз или хотя бы на MSVC? Улыбающийся Откудв мой интерес - когда отлаживаю рисование, мне трудно спрыгнуть на точку останова - ведь рисование будет вызвано всякий раз когда окно приложения перекрывается окнами самой MSVC. Приходится как-то притыкивать окна, невдобняк. Как бы порешать?

Спасибо

Записан
andrew.k
Гость
« Ответ #1 : Сентябрь 10, 2012, 15:23 »

я обычно в такой ситуации уменьшаю размер IDE, чтобы оно не перекрывало рисуемую область в приложении.
Но этот способ не всегда помогает.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #2 : Сентябрь 10, 2012, 16:37 »

Добавить второй монитор или делать удалённую отладку на другом компе через Remote Debugging Tools.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Сентябрь 10, 2012, 16:40 »

я обычно в такой ситуации уменьшаю размер IDE, чтобы оно не перекрывало рисуемую область в приложении.
Но этот способ не всегда помогает.
Я это и имел ввиду под "притыкиванием окон" Улыбающийся

Добавить второй монитор или делать удалённую отладку на другом компе через Remote Debugging Tools.
Трата ресурсов на паршивую овцу Вындоуз
Записан
Serr500
Гость
« Ответ #4 : Сентябрь 10, 2012, 18:46 »

Есть ли double-buffering на Вындоуз или хотя бы на MSVC?

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.
Если я не ошибаюсь, то действие двойной буферизации следующее. Буфер используется только для ликвидации "мерцаний", т.е. картинка отрисовывается не на экране, а в буфере и затем буфер за один кадр отрисовывается на экране. Затем буфер уничтожается и при "перекрытии" окна вновь вызывается функция отрисовки. Следовательно, требуемого поведения при помощи двойной буферизации не добиться.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Сентябрь 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.
Вопрос не имеет отношения к Qt

Если я не ошибаюсь, то действие двойной буферизации следующее. Буфер используется только для ликвидации "мерцаний", т.е. картинка отрисовывается не на экране, а в буфере и затем буфер за один кадр отрисовывается на экране. Затем буфер уничтожается и при "перекрытии" окна вновь вызывается функция отрисовки. Следовательно, требуемого поведения при помощи двойной буферизации не добиться.
Мои наблюдения этого не подтверждают. Рисую нативными средствами (GetDC() и.т.п.) Win XP64. Заливаю квадрат синим. Затем его же красным. Мерцание прекрасно видно, из чего делаю вывод что буферизация просто отсутствует. Или я неправ? Разумеется на OSX все норм.
Записан
Serr500
Гость
« Ответ #6 : Сентябрь 10, 2012, 21:13 »

Вопрос не имеет отношения к Qt
Извиняюсь.  В замешательстве Заходил в тему с главной страницы и не обратил внимания на название ветки форума.

Рисую нативными средствами (GetDC() и.т.п.) Win XP64. Заливаю квадрат синим. Затем его же красным. Мерцание прекрасно видно, из чего делаю вывод что буферизация просто отсутствует. Или я неправ? Разумеется на OSX все норм.
Собственно, так оно и есть. Double buffering, как я понял, нужно реализовывать самостоятельно. Создаём в WM_CREATE свой DC через CreateCompatibleDC, по WM_PAINT рисуем в нём, если необходимо, и выводим на экран через BitBlt. В WM_DESTROY разрушаем свой DC.
Записан
Serr500
Гость
« Ответ #7 : Сентябрь 10, 2012, 21:20 »

Вот чёрт! Оказывается, я неправ!  Грустный Начиная с Висты появилась встроенная в uxtheme двойная буферизация.  http://www.codeguru.com/cpp/w-p/vista/article.php/c15709/Using-Windows-Vista-BuiltIn-Double-Buffering.htm
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.198 секунд. Запросов: 22.