Перерисовка контекста Win32 OpenGL не успевает за изменением размера окна

#c #winapi #opengl

#c #winapi #opengl

Вопрос:

Я работал над приложением на основе OpenGL, которое запускается непосредственно в Win32. Я заметил проблему, из-за которой при изменении размера окна рисунок не успевает за краями. Вот видео проблемы в действии.(Обратите внимание на нижний правый и верхний правый углы окна)

Я запускаю функцию перерисовки внутри моего WM_SIZE события, но у нее все еще есть небольшая задержка.

Если есть способ сделать так, чтобы в нем не было этого визуального артефакта — отлично! Если нет, то как я могу предотвратить обновление размера окна до тех пор, пока элементы управления не будут нарисованы?

Комментарии:

1.Используйте WM_WINDOWPOSCHANGED вместо WM_SIZE . Раздел комментариев WM_WINDOWPOSCHANGED на странице MSDN указано, что это более эффективно.

2. Я бы так и сделал, но мне нужно обработать «SIZE_MAXIMIZED» в wparam, который отправляется только в WM_SIZE. Это потому, что мой стиль окна охватывает панель задач, и я хочу этого избежать.

3. @zangent: ничто не мешает вам обрабатывать как WM_SIZE, так и WM_WINDOWPOSCHANGED.

4. Проверьте, что я снова связал: WM_SIZE создается искусственно DefWindowProc() , если вы позволяете ему обрабатывать WM_WINDOWPOSCHANGED . Все, что вы можете сделать, WM_SIZE можно сделать с WM_WINDOWPOSCHANGED помощью, в том числе SIZE_MAXIMIZED . Не уверен, что такое точное преобразование.

5. Теперь я использую оба — я использую WM_WINDOWPOSCHANGED для перерисовки размера и WM_SIZE для проверки на максимизацию. Тем не менее, это все еще медленно. То же самое происходит по краям. Тем не менее, спасибо за предложение.