簡體   English   中英

如何在窗口失焦或調整大小時停止暫停OpenGL?

[英]How to stop OpenGL from pausing when the window is out of focus or resizing?

我正試圖阻止我的渲染在我的窗口失焦或調整大小時停止。 除了調整大小之外,如果我將窗口調整得更小,那么當它變小時,任何不可見的東西現在都變黑了。 有沒有什么辦法解決這一問題?

這里真的有兩件不同的事情。 移動/調整大小問題是由Windows DefWindowProc函數引起的,應用程序使用它來處理未由應用程序本身顯式處理的消息。 在移動或調整大小的情況下,它會阻塞,創建一個新的消息隊列來處理大多數消息,但是有一些它仍然會分派到應用程序的主事件隊列,如WM_TIMER 您可以在此答案中找到更多信息。

第二個問題是你的程序只“擁有”窗口內的像素,只有那些沒有被其他窗口遮蓋的像素。 當您縮小窗口時,需要覆蓋邊緣處的像素以顯示窗口邊框或窗口后面的任何內容。 當窗口變大時,一些驅動程序會自動將新獲取的像素設置為黑色,而其他驅動程序則將它們留在以前的任何位置(通常是窗口邊框的一部分)。 操作系統不記得那些像素在上次窗口大小時是否具有某種特定顏色,因為大多數時候程序並不關心。 相反,Windows發送WM_PAINT消息以指示應用程序應重繪窗口。 您的程序應該直接處理它,或者使用像GLFW這樣抽象它的庫。 此外,您需要通過使用窗口的新大小調用glViewport來處理resize事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM