OpenGL上下文创建失败

时间:2014-09-07 00:35:29

标签: c++ opengl

我正在尝试通过Win32 API创建一个OpenGL上下文,而不使用GLUT等包装器。我以前做了很多次,但这次我得到了两个错误之一;有时当您退出窗口时,应用程序不会结束,但几秒钟后,应用程序在调试窗口中以以下消息结束:

Palette watcher thread id 5100 possible deadlock with DLL unload, killing the palette watcher
Unable to open the palette watcher thread id 5100 for termination!

窗口关闭时有时会显示第二条消息:

PostMessage to hwnd: 00120266 failed with error: 00000578

我已经用Google搜索了这个,并且发现了一个类似问题的人似乎源于 SetupPixelFormat 。我不知道造成这种情况的原因是什么。除了OpenGL渲染上下文设置之外,我已经排除了所有其他代码的问题。

这是我的设置:

BOOL Win32Handler::CreateOpenGLContext(void)
{

int pixelFormat;
this->hdc = GetDC(this->windowHandle);

PIXELFORMATDESCRIPTOR PFD =
{
    sizeof(PIXELFORMATDESCRIPTOR),
    1,
    PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
    PFD_TYPE_RGBA,
    32,
    0,0,0,0,0,0,
    0,
    0,
    0,
    0,0,0,0,
    24,
    8,
    0,
    PFD_MAIN_PLANE,
    0,
    0,0,0
};

pixelFormat = ChoosePixelFormat(this->hdc,&PFD);
if(!SetPixelFormat(this->hdc,pixelFormat,&PFD)) return FALSE;

this->hglrc = wglCreateContext(this->hdc);
if(!this->hglrc) return FALSE;

if(!wglMakeCurrent(this->hdc,this->hglrc)) return FALSE;

glewExperimental = TRUE;
GLenum error = glewInit();

if(error != GLEW_OK) return FALSE;

return TRUE;

}

在创建窗口后,在我的main方法中调用此函数。

我知道不会创建OpenGL上下文,因为 SwapBuffers() glClearColor()似乎无法正常工作。

请注意,当我不打电话给设置代码时,这些错误不会发生。 这两个似乎也是随机发生的,有时当我关闭应用程序时会发生一个而不是另一个。他们从未同时触发过。

1 个答案:

答案 0 :(得分:0)

查看代码我只能猜测设备上下文和/或窗口句柄无效。任何使设备上下文无效的行为都会出现奇怪和未定义的行为,包括程序关闭时的错误。

确保窗口句柄有效且您具有有效的设备上下文。还有一个重要的注意事项:对于每个GetDC,您应该确保有相应的ReleaseDC。