在我的Windows MFC应用程序中,在其View类中,我使用View的DC创建了一个OpenGL上下文:
HANDLE * hdc = GetDC()->m_hdc;
int nPixelFormat;
static PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // Size of this structure
1, // Version of this structure
PFD_DRAW_TO_WINDOW | // Draw to window (not bitmap)
PFD_SUPPORT_OPENGL | // Support OpenGL calls
PFD_DOUBLEBUFFER, // Double -buffered mode
PFD_TYPE_RGBA, // RGBA Color mode
24, // Want 24bit color
0,0,0,0,0,0, // Not used to select mode
0,0, // Not used to select mode
0,0,0,0,0, // Not used to select mode
32, // Size of depth buffer
0, // Not used to select mode
0, // Not used to select mode
PFD_MAIN_PLANE, // Draw in main plane
0, // Not used to select mode
0,0,0 }; // Not used to select mode
// Choose a pixel format that best matches that described in pfd
nPixelFormat = ChoosePixelFormat(hdC, &pfd);
// Set the pixel format for the device context
assert(SetPixelFormat(hdC, nPixelFormat, &pfd));
HGLRC m_hrc = wglCreateContext(hdc);
assert(m_hrc);
wglMakeCurrent(m_hdc,m_hrc);
上面的所有代码都可以正常工作,我可以按预期进行OpenGL绘图。
但是,我现在需要的是将DC更改为内存直流而不是窗口DC。确切地说,我如何使用' hmemDC'下面就像我上面用窗口DC做的那样创建一个OpenGL上下文:
CRect rct;
GetClientRect(&rct);
HDC hmemDC = CreateCompatibleDC(pDC->m_hDC);
HBITMAP hBmp = CreateCompatibleBitmap(pDC->m_hDC,rct.Width(),rct.Height());
使用上面构造的相同像素格式,我遇到了"无效的像素格式"调用wglCreateContext()时出错,无法成功获取正确的OpenGL上下文。
我google了很多,并试图改变像素格式的一些值,结果是一样的。
是否可以使用Windows Memory DC创建OpenGL上下文?如果是我应该怎么做?
编辑: 这就是我需要位图(或内存DC)的原因:我创建了一个使用OpenGL的2D地图渲染库。客户端希望使用此库来渲染背景图,并在其上绘制自己的符号。但是,他们更喜欢使用OpenGL以外的Windows GDI来绘制符号。所以我想如果我能为他们提供位图或Mmeory DC,他们可以满足他们的需求。更好的解决方案?我是朝着正确的方向吗?或者在OpenGL后端提供这样的2d库是一个完全不好的主意。