2011-07-06 3 views
7

OpenGL 컨텍스트를 사용하여 win32 창 크기를 조정하는 동안 새로 노출 된 영역에 검은 색으로 표시됩니다. 크기를 조정할 때 WM_PAINT 메시지가 나타나고 새로운 내용을 렌더링하려고 시도하지만 크기를 조정하는 동안 SwapBuffers가 아무 것도하지 않는 것처럼 보입니다.win32 창 크기를 조정할 때 OpenGL 콘텐트를 그리는 방법

크기를 조정할 때 "깨진"내용이 없도록 창 크기 조정이 올바르게 처리되어야합니까?

+0

* * 크기 조정 또는 * 이후 * 크기 조정 중입니까? – cHao

+1

_While_ resizing. – scoopr

+0

관련 : http://stackoverflow.com/questions/3267243/in-opengl-how-can-i-adjust-for-the-window-being-resized – zwcloud

답변

6

이는 대개 창의 클래스에 대해 구성된 배경 브러시가있는 경우에 발생합니다 (WNDCLASS 또는 WNDCLASSEX 구조 참조). 브러시가 있으면 시스템은 각 다시 그리기 단계가 끝난 직후 창을 지운 다음 WM_PAINT를 보냅니다. V-Synced SwapBuffers의 경우 버퍼 스왑이 발생하기 전 또는 화면 바로 다음에 화면의 일부가 디스플레이 장치로 전송되기 전에 다음 크기 조정 단계로 인해 사진이 축소 될 수 있습니다.

어느 쪽이든 해결 방법은 창의 배경 브러시를 NULL로 설정하는 것입니다. 또한 WM_ERASEBKGND 메시지 핸들링을 사용하면 결과를 얻을 수 있습니다. 마지막 프레임의 내용이 표시 유지하는 경우 때문에

편집이

을 언급, 당신은 아마 그냥 다시 그리기와 크기 조정에 반응하지 않습니다. 가장 쉬운 해결책은 WM_SIZING (또는 WM_SIZE, 둘 다 시도해보십시오) 메시지 핸들러에서 드로잉 기능을 호출하는 것입니다.

+0

답변 해 주셔서 감사합니다. 배경 브러쉬 세트가 없으며 WM_ERASEBKGND를 처리하려고합니다. 문제는, 창은 지워지지 않지만 마지막으로 그려진 프레임은 왼쪽 위 모서리에 남습니다. – scoopr

+0

WM_SIZE 도중 렌더링을 시도했지만, 다시 그 효과가없는 것 같습니다. 크기 조정 중에 WM_SIZE 및 WM_PAINT 이벤트를 모두 얻는 것처럼 WM_SIZE 또는 WM_PAINT에서 그리는 것이 중요하지 않습니다. – scoopr

+0

어떤 Windows 버전을 사용하십니까? Vista 또는 7이 Aero 창 합성 시스템을 사용하지 않도록 설정하면 어떻게됩니까? – datenwolf

관련 문제