Как нарисовать контент OpenGL при изменении размера окна Win32

При изменении размера окна win32, с контекстом OpenGL, оно только показывает черный на недавно открытой области. Я получаю сообщение WM_PAINT при изменении размера и пытаюсь отобразить новый контент, но кажется, что SwapBuffers ничего не делает при изменении размера.

Как правильно обрабатывать изменения размера окна, чтобы при изменении размера не было "битого" содержимого?

1 ответ

Решение

Обычно это происходит, если у вас настроена кисть фона для класса вашего окна (см. Структуру WNDCLASS или WNDCLASSEX). Если есть кисть, система очистит окно сразу после каждого шага перерисовки, а затем отправит WM_PAINT. В случае V-Synced SwapBuffers ваше изображение могло быть перезаписано на следующем шаге изменения размера до замены буфера или сразу после нее, но до того, как эта часть экрана была отправлена ​​на устройство отображения.

В любом случае, решение состоит в том, чтобы установить кисть фона окна в NULL. Также обработка результатов обработки сообщения WM_ERASEBKGND может дать результаты.

РЕДАКТИРОВАТЬ из-за комментария

Если содержимое последнего кадра остается видимым, вы, вероятно, просто не реагируете на изменение размера с перерисовкой. Самым простым решением этого является вызов функции рисования из обработчика сообщений WM_SIZING (или WM_SIZE, просто попробуйте оба).

Другие вопросы по тегам