大家好,最近在64位机器上使用OpenGL绘图,分别用PFD_SUPPORT_GDI和PFD_DOUBLEBUFFER初始化OpenGL时,绘制的结果有差异。
当我使用PFD_SUPPORT_GDI初始化OpenGL时,绘制完成后继续使用MFC绘图,绘制结果如下:
但使用PFD_DOUBLEBUFFER初始化OpenGL时,绘制的结果如下:
程序的主要代码如下:
void CGraphCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (m_SDI)
{
InitOpenGL1(dc.m_hDC); //使用PDF_SUPPORT_GDI设置并选定像素格式
m_hRC = wglCreateContext(dc.m_hDC);
wglMakeCurrent(dc.m_hDC, m_hRC);
DrawGraph(); //draw a red cube with OpenGL
glFlush(); //刷新绘图命令,此时所有未执行的OpenGL命令被执行
//SwapBuffers(dc.m_hDC); //把RC绘制的结果传给DC,使用SwapBuffers后不再需要glFlush
wglMakeCurrent(NULL, NULL); //释放与m_hDC对应的 RC
wglDeleteContext(m_hRC); //删除渲染描述表RC
}
else
{
InitOpenGL2(dc.m_hDC); // 使用PDF_DOUBLEBUFFER设置并选定像素格式
m_hRC = wglCreateContext(dc.m_hDC);
wglMakeCurrent(dc.m_hDC, m_hRC);
DrawGraph(); //draw a red cube with OpenGL
//glFlush(); //刷新绘图命令,此时所有未执行的OpenGL命令被执行
SwapBuffers(dc.m_hDC); //把RC绘制的结果传给DC,使用SwapBuffers后不再需要glFlush
wglMakeCurrent(NULL, NULL); //释放与m_hDC对应的 RC
wglDeleteContext(m_hRC); //删除渲染描述表RC
}
//Draw a rectangle with MFC
CRect rc;
GetClientRect(&rc);
rc.InflateRect(-rc.Width() / 4, -rc.Height() / 4);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(&rc);
}