我正在尝试防止在窗口失焦或调整大小时停止渲染。除了调整大小之外,如果我将窗口调整得更小,那么当它变小时,任何不可见的东西现在都变黑了。有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
这里真的有两件不同的事情。移动/调整大小问题是由windows DefWindowProc
函数引起的,应用程序用它来处理应用程序本身未明确处理的消息。在移动或调整大小的情况下,它会阻塞,创建一个新的消息队列来处理大多数消息,但是有一些它仍将分派到应用程序的主事件队列,如WM_TIMER
。您可以在this answer中找到更多信息。
第二个问题是你的程序只“拥有”窗口内的像素,只有那些没有被其他窗口遮盖的像素。当您缩小窗口时,需要覆盖边缘处的像素以显示窗口边框或窗口后面的任何内容。当窗口变大时,一些驱动程序会自动将新获取的像素设置为黑色,而其他驱动程序则将它们留在以前的任何位置(通常是窗口边框的一部分)。操作系统不记得那些像素在上次窗口大小时是否具有某种特定颜色,因为大多数时候程序并不关心。相反,Windows发送WM_PAINT
消息以指示应用程序应重绘窗口。您的程序应该直接处理它,或者使用像GLFW这样抽象它的库。此外,您需要通过使用新窗口大小调用glViewport
来处理调整大小事件。