windows - 当窗口失去焦点或调整大小时如何阻止 OpenGL 暂停?

标签 windows opengl focus opengl-3

我试图防止我的渲染在我的窗口失去焦点或调整大小时停止。除了调整大小之外,如果我将窗口的大小调整得更小,然后再次变大,那么在它变小时不可见的任何东西现在都是黑色的。有什么办法可以解决这个问题吗?

最佳答案

这里确实发生了两件截然不同的事情。移动/调整大小问题是由 Windows DefWindowProc 函数引起的,应用程序使用该函数来处理应用程序本身未明确处理的消息。在移动或调整大小的情况下,它会阻塞,创建一个新的消息队列来处理大多数消息,但仍有一些消息仍会分派(dispatch)到应用程序的主事件队列,如 WM_TIMER。您可以在 this answer 中找到更多信息.

第二个问题是你的程序只“拥有”你窗口内的像素,而且只有那些没有被其他窗口覆盖的像素。当您缩小窗口时,需要覆盖边缘的像素以显示窗口边框或窗口后面的任何内容。当窗口变大时,一些驱动程序会自动将新获取的像素设置为黑色,而其他驱动程序则将它们保留在之前的状态(通常是窗口边框的一部分)。操作系统不记得上次窗口大小时这些像素是否具有某种特定颜色,因为大多数时候程序不关心。相反,Windows 发送一个 WM_PAINT 消息来指示应用程序应该重绘窗口。你的程序应该直接处理这个,或者使用像 GLFW 这样的库来抽象它。此外,您需要使用新的窗口大小调用 glViewport 来处理调整大小事件。

关于windows - 当窗口失去焦点或调整大小时如何阻止 OpenGL 暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745788/

相关文章:

c++ - rand_r 不在范围内,gcc mingw 在 Windows 上的 cygwin 下

c++ - 为什么这个系统范围的 CBT Hook 不能正常工作?

python - python新手: pyodconverter with Apache OpenOffice 4 on Windows

c++ - 有效传输平面图像以在 OpenGL 中渲染?

c++ - 从顶点到片段着色器的平滑64位输入- “error C7570: 64 bit input should be flat”

c++ - 纹理不适用于 OpenGL

jQuery 日期选择器输入不会失去对 chrome 的关注

android - 使用 LiveCode 的自动对焦字段

Javascript专注于文件输入的浏览按钮

windows - 程序完成执行后的线程状态