c++ - 窗口聚焦时 Opengl 程序不循环

标签 c++ windows opengl glfw

我在运行 opengl 4 程序时遇到问题。当窗口处于焦点时,似乎什么也没有发生(即使是 alt+f4 也不会注册,直到窗口失去焦点)。

如果包含我的程序的窗口处于焦点状态,那么我的程序的主循环将停止执行(我在我的 while(true) 循环中使用 printf 语句进行了检查,并且当焦点位于该窗口时输出完全停止)。当窗口未聚焦时,程序按预期运行(包括窗口内的鼠标移动改变相机方向)。

我已将范围缩小到这行代码,它在我的鼠标回调方法中执行

glfwSetCursorPos (窗口, middleX, middleY);

如果将其注释掉,程序在聚焦时运行良好,但鼠标不再居中,因此相机逻辑不再起作用。

我使用的是 32 位版本的 glfw3 和 glew。

该程序过去曾在其他机器上运行过。有什么方法可以在不重组代码以轮询鼠标输入的情况下解决这个问题吗?

最佳答案

如果您在鼠标回调中执行 glfwSetCursorPos(),您会遇到这样的情况:这会创建一个新的鼠标事件,并且在您的回调退出后,glfwPollEvents() 将遍历剩余的事件,因此您可以在此处有效地进入无限循环。您应该在处理完输入回调后才延迟此类操作。

但是,即使采用这种方法,您也会为每一帧生成一个新事件,因此我建议完全放弃回调开销,而只是在每一帧直接使用 glfwGetCursorPos() 查询鼠标位置。

关于c++ - 窗口聚焦时 Opengl 程序不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015987/

相关文章:

c++ - 是否有任何工具可以调查堆内容?

C++简单的线程问题

C++ 多人 UDP 套接字 API

c++ - 内存屏障作用域

c++ - 如何使用 UTF-8 编码将 LPWSTR 转换为 char *

opengl - OpenGL 中顶点数据的插值

c++ - Windows SDK 8 : Confusion Regarding Install Location, 文件夹命名法和 WindowsSdkDir_old env 变量

windows - 由于额外读取,通过网络读取文件速度慢

c - 如何使用 GLUT 进入指定分辨率的全屏模式?

java - 使用延迟渲染,获得空白输出