繁体   English   中英

OpenGL上下文创建失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM