2011-07-06 51 views
7

使用OpenGL上下文調整win32窗口大小時,只會在新顯示的區域顯示黑色。 我確實在調整大小的同時收到WM_PAINT消息,並且嘗試渲染新內容,但看起來好像SwapBuffers在調整大小時不做任何事情。如何在調整win32窗口大小的同時繪製OpenGL內容

應該如何正確處理窗口大小調整,以便在調整大小時沒有「損壞」的內容?

+0

*調整大小或調整大小後* – cHao

+1

_While_調整大小。 – 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

相關問題