【问题标题】:Copy Data from Backbuffer to Frontbuffer将数据从后缓冲区复制到前缓冲区
【发布时间】:2012-06-06 14:30:07
【问题描述】:

我在 Google 上搜索了一些关于这个主题的信息,似乎每个人都相信在其他网页上,将内容从 Backbuffer 复制到 Frontbuffer,不调用 SwapBuffers 是不可能的.

有一种解决方法是创建一个辅助的额外缓冲区(如 pBuffer),对其进行渲染并将内容复制到纹理中,然后显示纹理。

但我想知道是否真的没有机会在 Opengl 的 Backbuffer 上渲染,并将内容复制到 frontbuffer。我想实现这一点,因为在两次调用 SwapBuffers 之间,我渲染的许多场景保持不变,并且只有一小部分(矩形)被更改,所以我想避免不必要地渲染其他 90% 的场景每次。

像素缓冲区对象似乎可以帮助我们使用直接内存访问将像素从帧缓冲区复制到像素缓冲区对象。我的机器不支持它,但即使支持,我们还是要再次分配一个额外的缓冲区。

那么真的没有办法在我的窗口的 Back 和 Front 缓冲区之间复制内容或部分内容吗?

【问题讨论】:

    标签: c++ opengl buffer


    【解决方案1】:

    您可以从 OpenGL 3.0(或更早的版本通过可用的扩展)开始执行此操作,如下所示:

    glReadBuffer(GL_BACK);
    glDrawBuffer(GL_FRONT);
    glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1,
        dstX0, dstY0, dstX1, dstY1, GL_COLOR_BUFFER_BIT, GL_NEAREST);
    

    【讨论】:

      【解决方案2】:

      您打算做的不是双缓冲的设计目的。

      但是,如果每次更新只需要更新图像的一个子集,则不要清除缓冲区,而是在矩形上绘制。

      【讨论】:

      • 但在这种情况下,我会有不同步的图片,因为如果我第一次绘制,当我调用 SwapBuffers 时,我的绘制将不再存在于第二个缓冲区(现在将变为前缓冲区)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      相关资源
      最近更新 更多