64位机器上使用OpenGL绘图时,单缓冲和双缓冲绘图的结果不同?

大家好,最近在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);

}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^