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
我已经在谷歌上搜索过了,有人发现有人有类似的问题,似乎源于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;
}
这个函数是在窗口创建后在我的主方法中调用的。
我知道OpenGL上下文也没有创建,因为SwapBuffers()和glClearColor似乎不起作用。
请注意,当我不调用设置代码时,这些错误不会发生。此外,这两种情况似乎是随机发生的,有时当我关闭应用程序时,会发生一种情况,但不会发生另一种情况。它们从未同时触发过。
查看代码,我只能猜测设备上下文和/或窗口句柄无效。任何采用无效设备上下文的东西都可能表现出奇怪和未定义的行为,包括程序关闭时的错误。
请确保窗口句柄有效,并且您有一个有效的设备上下文。还有一个重要的注意事项:对于每个GetDC
,你应该确保有一个相应的ReleaseDC。
相关文章:
- 链接到自行创建的dll失败
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 创建服务失败0x6f7存根收到错误数据
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 使用 SQLConfig数据源创建 SQL Server DSN 失败:关键字-值对无效
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- fopen 在创建大量文件后因 EFBIG "File too large" 而失败
- C++从 std::string 创建 CString 失败
- 创建进程失败,意外错误
- lib OSMesa 屏幕外上下文创建在C++中失败,但仅在静态链接时失败
- C++ - 创建进程失败代码 2
- C++ Mingw32 创建进程() 失败,错误代码 2:系统找不到指定的文件
- 创建 ./config.data 在编译 Mozilla Firefox 时失败
- Qt OpenGL帧缓冲在一台PC上创建,但在另一台PC上失败
- 视觉C++窗口创建失败
- 用户创建程序失败
- 使用创建进程函数创建"dir"命令失败,错误代码为 2
- Vulkan-加载扩展时实例创建失败
- OpenGL 创建渲染上下文失败
- 创建对象时调试断言失败