我已经搜索了一下这个主题,每个人似乎都相信其他网页要做的事情就是将内容从Backbuffer复制到Frontbuffer,而不调用SwapBuffers ,这是不可能的。
创建一个辅助的额外缓冲区(如pBuffer),渲染它并将内容复制到纹理然后显示纹理有一些工作环境。
但我想知道是否真的没有机会在Opengl的Backbuffer上渲染,并将内容复制到前缓冲区。我想实现这一点,因为在两次SwapBuffers调用之间,我渲染的场景很多都是一样的,只有一小部分(矩形)被改变了,所以我想避免不必要地渲染另外90%的场景每次。
像素缓冲区对象似乎可以帮助我们使用直接内存访问将像素从FrameBuffer复制到像素缓冲区对象。我的机器不支持它,但即使这样,我们也会再次分配一个额外的缓冲区。
那么真的绝对没有办法在窗口的Back和Front缓冲区之间复制内容或部分内容吗?
答案 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);