[英]OpenGL Context Creation Failure
我试图通过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()似乎不起作用。
请注意,当我不调用安装代码时,不会发生这些错误。 而且这两个似乎是随机发生的,有时当我关闭应用程序时,一个发生而另一个则没有。 它们从未同时触发过。
查看代码,我只能猜测设备上下文和/或窗口句柄无效。 带有无效设备上下文的任何事物都可能表现出异常和未定义的行为,包括程序关闭时的错误。
确保窗口句柄有效,并且您具有有效的设备上下文。 还有一个重要的注意事项:对于每个GetDC
您都应确保有一个对应的ReleaseDC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.