将数据从Backbuffer复制到Frontbuffer

时间:2012-06-06 14:30:07

标签: c++ opengl buffer

我已经搜索了一下这个主题,每个人似乎都相信其他网页要做的事情就是将内容从Backbuffer复制到Frontbuffer,而不调用SwapBuffers ,这是不可能的。

创建一个辅助的额外缓冲区(如pBuffer),渲染它并将内容复制到纹理然后显示纹理有一些工作环境。

但我想知道是否真的没有机会在Opengl的Backbuffer上渲染,并将内容复制到前缓冲区。我想实现这一点,因为在两次SwapBuffers调用之间,我渲染的场景很多都是一样的,只有一小部分(矩形)被改变了,所以我想避免不必要地渲染另外90%的场景每次。

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

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

2 个答案:

答案 0 :(得分:0)

你打算做的不是为什么设计双缓冲。

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

答案 1 :(得分:0)

您可以使用OpenGL 3.0(或早期版本通过扩展,如果可用),如下所示:

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