Как нарисовать контент OpenGL при изменении размера окна Win32
При изменении размера окна win32, с контекстом OpenGL, оно только показывает черный на недавно открытой области. Я получаю сообщение WM_PAINT при изменении размера и пытаюсь отобразить новый контент, но кажется, что SwapBuffers ничего не делает при изменении размера.
Как правильно обрабатывать изменения размера окна, чтобы при изменении размера не было "битого" содержимого?
1 ответ
Обычно это происходит, если у вас настроена кисть фона для класса вашего окна (см. Структуру WNDCLASS или WNDCLASSEX). Если есть кисть, система очистит окно сразу после каждого шага перерисовки, а затем отправит WM_PAINT. В случае V-Synced SwapBuffers ваше изображение могло быть перезаписано на следующем шаге изменения размера до замены буфера или сразу после нее, но до того, как эта часть экрана была отправлена на устройство отображения.
В любом случае, решение состоит в том, чтобы установить кисть фона окна в NULL. Также обработка результатов обработки сообщения WM_ERASEBKGND может дать результаты.
РЕДАКТИРОВАТЬ из-за комментария
Если содержимое последнего кадра остается видимым, вы, вероятно, просто не реагируете на изменение размера с перерисовкой. Самым простым решением этого является вызов функции рисования из обработчика сообщений WM_SIZING (или WM_SIZE, просто попробуйте оба).