rocket_liushaodong 2016-06-02 08:50 采纳率: 0%
浏览 972

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);

}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-12-31 17:58
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

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

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题