我的OpenGL游戏关闭了Aero DWM Glass

mar*_*000 3 windows opengl aero dwm aero-glass

几年前我写了一个免费游戏:http://www.walkover.org.对于大厅和菜单,它使用常规对话框,如win32.当实际游戏开始时,它使用OpenGL.

现在,在Windows 7上,当实际游戏开始时,它会关闭Windows aero glass并在游戏结束时将其重新打开.

有什么我可以做的,以防止这种情况发生?一些特殊的标志,如果它打开,玻璃打开?(对于更新的,我一直在使用DirectX,这不会发生在那里.)也许某些(新)标志我必须在某处指定?

我正在使用这个pixelformatdescriptor:

    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
    };
Run Code Online (Sandbox Code Playgroud)

Spe*_*ose 5

此问题是由以下所有原因引起的:

  • Windows 7的
  • OpenGL的
  • 创建一个与屏幕rect完全匹配的窗口(全屏)
  • 第二次调用交换缓冲区
  • 旧显卡驱动程序

我有同样的问题,我测试了2个使用OpenGL的AAA游戏引擎,可以确认它们都有同样的问题.DirectX似乎没有受到影响.

这意味着您的窗口创建很好,这不是代码问题.

我建议更新您的显卡驱动程序以解决问题.

我找到的一个短期工作是创建一个比屏幕分辨率大1个像素的窗口(宽度或高度)

这会欺骗窗口,而不是检测到你已进入全屏并且不会触发问题.