GLFW无边框全屏窗口光标意外隐藏问题求助
问题排查与解决方案
一、光标不可见问题的核心原因与修复
当前代码通过**无边框窗口+手动定位至(0,0)**模拟全屏,而非GLFW原生的全屏独占模式,这种方式易与窗口管理器的光标渲染逻辑冲突,导致窗口聚焦时光标被隐藏;同时光标模式设置的时机可能被窗口创建后的系统事件覆盖。
修复方案1:使用GLFW原生全屏独占模式(推荐)
将窗口创建时的monitor参数从nullptr改为获取到的主显示器,让GLFW直接接管显示器,避免窗口管理器干扰:
// 原代码 // window = glfwCreateWindow(WIDTH, HEIGHT, "MV_Game", nullptr, nullptr); // 修改后 window = glfwCreateWindow(WIDTH, HEIGHT, "MV_Game", monitor, nullptr);
同时可删除glfwSetWindowPos(window, 0, 0);,原生全屏模式会自动占满整个显示器。
修复方案2:针对无边框窗口的光标强制设置
若坚持使用无边框模拟全屏,添加窗口聚焦回调,每次窗口获得焦点时强制重置光标可见性:
在glfwMakeContextCurrent(window);之后添加:
glfwSetWindowFocusCallback(window, [](GLFWwindow* win, int focused) { if (focused) { glfwSetInputMode(win, GLFW_CURSOR, GLFW_CURSOR_NORMAL); } });
该回调会覆盖窗口管理器对光标状态的潜在修改。
二、Discord共享显示第一帧的问题修复
此问题多由帧交换不稳定导致,开启垂直同步可让帧渲染与显示器刷新率同步,解决捕获异常:
在gladLoadGLLoader之后添加:
glfwSwapInterval(1); // 开启垂直同步
同时建议添加视口初始化,确保渲染区域正确:
glViewport(0, 0, WIDTH, HEIGHT);
三、额外检查点
- 确保使用GLFW最新稳定版,旧版本可能存在无边框窗口的光标bug
- 测试时关闭录屏、桌面增强工具等可能干扰窗口渲染的软件
内容的提问来源于stack exchange,提问作者LarsingDash
相关产品推荐
相关产品推荐

