2

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

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

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

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

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

4

2 回答 2

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);
于 2018-01-12T03:25:23.380 回答
-1

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

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

于 2012-06-06T14:47:49.233 回答