几年前我写了一个免费游戏:http://www.walkover.org .对于大厅和菜单,它使用像 win32 这样的普通对话框。当实际游戏开始时,它使用 OpenGL。
现在,在 Windows 7 上,当实际游戏开始时,它会关闭 windows aero glass,并在游戏结束时将其重新打开。
我能做些什么来防止这种情况发生吗?一些特殊的标志可以让玻璃保持开启状态? (对于较新的版本,我一直在使用 DirectX 而这不会在那里发生。)也许我必须在某处指定一些(新的)标志?
我正在使用这个像素格式描述符:
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
32, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
0, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
最佳答案
此问题是由以下所有原因引起的:
- Windows 7
- OpenGL
- 创建一个与您的屏幕矩形完全匹配的窗口(全屏)
- 第二次调用交换缓冲区
- 旧显卡驱动
我有同样的问题,我测试了 2 个使用 OpenGL 的 AAA 游戏引擎,可以确认它们都有同样的问题。 DirectX 似乎不受影响。
这意味着您的窗口创建没有问题,这不是代码问题。
我建议您更新显卡驱动程序以解决问题。
我发现的一个短期解决方法是创建一个比屏幕分辨率大 1 个像素的窗口(宽度或高度)
这会诱使 Windows 检测不到您已进入全屏模式并且不会触发问题。
关于windows - 我的 OpenGL 游戏关闭了 Aero DWM Glass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671424/