2011-07-06 9 views
7

Podczas zmiany rozmiaru okna win32 z kontekstu OpenGL, to tylko pokazuje czarno na nowo odsłoniętym obszarze. Otrzymuję komunikat WM_PAINT podczas zmiany rozmiaru i próbuję renderować nową treść, ale wydaje się, że SwapBuffers nic nie robi, podczas zmiany rozmiaru.Jak narysować zawartość OpenGL podczas zmiany rozmiaru okna win32

Jak zmienia rozmiar okna być obsługiwane prawidłowo, tak że nie ma „złamane” zawartość podczas zmiany rozmiaru?

+0

* * Podczas zmiany rozmiaru lub * po * zmiana rozmiaru? – cHao

+1

_Górne_ zmiana rozmiaru. – scoopr

+0

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

Odpowiedz

6

Zwykle dzieje się, jeśli masz szczotka tło skonfigurowany do klasy okna (patrz na WNDCLASS lub struktury WNDCLASSEX). Jeśli jest pędzel, system wyczyści okno tuż po każdym odrysowaniu, a następnie wyśle ​​WM_PAINT. W przypadku Z-Synchronizowanych SwapBufferów obraz mógł zostać przekroczony do następnego kroku zmiany rozmiaru przed wystąpieniem wymiany bufora lub tuż po nim, ale zanim część ekranu została wysłana do urządzenia wyświetlającego.

Tak czy inaczej, rozwiązaniem jest ustawienie pędzla tła okna null. Także majsterkowanie z obsługą komunikatów WM_ERASEBKGND może dawać wyniki.

EDIT powodu skomentować

Jeżeli zawartość ostatniej klatce pozostaje widoczny, prawdopodobnie po prostu nie reagują na zmiany wielkości z przerysować. Najprostszym rozwiązaniem tego problemu jest wywołanie funkcji rysowania z WM_SIZING (lub WM_SIZE, tylko spróbuj obu).

+0

Dziękuję za odpowiedź. Nie mam zestawu pędzli tła i próbuję obsługiwać WM_ERASEBKGND. Chodzi o to, że okno nie jest wyczyszczone, ale ostatnia narysowana klatka jest pozostawiona w górnym lewym rogu. – scoopr

+0

Próbowałem również renderowania podczas WM_SIZE, który znowu nie wydaje się mieć efektu. Nie powinno mieć znaczenia, czy rysuję WM_SIZE, czy WM_PAINT, ponieważ wydaje mi się, że oba rozmiary, WM_SIZE i WM_PAINT, są zmieniane. – scoopr

+0

Którą wersję systemu Windows używasz? Jeśli Vista lub 7 spróbują, co się stanie, jeśli wyłączysz system kompozycyjny Aero. – datenwolf

Powiązane problemy