我正在Visual Studio 2005中使用C ++编写一些OpenGL。
// SetUpOpenGL sets the pixel format and a rendering
// context then returns the RC
HGLRC COpenGLBaseWnd::SetUpOpenGL(HWND hwnd)
{
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof (PIXELFORMATDESCRIPTOR), // strcut size
1, // Version number
PFD_DRAW_TO_WINDOW | // Flags, draw to a window,
PFD_DOUBLEBUFFER | // enable double buffering
PFD_SUPPORT_OPENGL, // use OpenGL
PFD_TYPE_RGBA, // RGBA pixel values
24, // 24-bit color
0, 0, 0, // RGB bits & shift sizes.
0, 0, 0, // Don't care about them
0, 0, // No alpha buffer info
0, 0, 0, 0, 0, // No accumulation buffer
32, // 32-bit depth buffer
0, // No stencil buffer
0, // No auxiliary buffers
PFD_MAIN_PLANE, // Layer type
0, // Reserved (must be 0)
0, // No layer mask
0, // No visible mask
0 // No damage mask
};
pCDC = pWnd->GetDC();
hDC = pCDC->GetSafeHdc();
PixelFormatID = ChoosePixelFormat(hDC, &pfd);
if (!PixelFormatID)
{
// catch errors here.
// If nMyPixelFormat is zero, then there's
// something wrong... most likely the window's
// style bits are incorrect (in CreateWindow() )
// or OpenGl isn't installed on this machine
//printf("ChoosePixelFormat Failed %d\r\n",GetLastError());
abort();
exit(-1);
}
if (pfd.dwFlags & PFD_NEED_PALETTE)
{
//printf("Choosen Pixel Format requires a palette.\r\n");
abort();
exit(-1);
}
SetPixelFormat(hDC, PixelFormatID, &pfd);
那个SetPixelFormat调用是在运行时发出的声音。令人讨厌的是,它只会在我的机器上崩溃,而不是在我的同事身上崩溃。
我在stackoverflow上找到了相似的this answer,但我不知道如何使用C ++中的这些信息解决问题,或者它不是同一个问题。
我需要有关如何在C ++或其他潜在解决方案中实现该解决方案的建议。
答案 0 :(得分:1)
确保在创建窗口类时未指定CS_PARENTDC
且CS_OWNDC
为。
SetPixelFormat()
是否检测到DC是共享的(混淆上述任何一个标志的效果)我不知道,但OpenGL将无法正常工作,除非窗口具有专用的hDC值。
答案 1 :(得分:0)
检查指针是否为NULL。
您的视频卡可能不支持指定的像素格式。尝试其他设置。 你有什么显卡?与其工作的另一个相比。
pWnd来自哪里?
答案 2 :(得分:0)
您提到了链接器错误和崩溃。你能检查你的目标文件是否有崩溃功能的定义吗?您使用正确的lib
链接OpenGL吗?