我想知道我是否可以在内存中保存当前视口的位图,然后在下一个绘制周期中简单地将该内存绘制到视口中?
我在屏幕的256x256区域绘制了大量数据点作为2D散点图,理论上我可以在每帧中渲染整个图,但在我的情况下,它需要我存储大量数据点(50K) -100K)其中大部分都是冗余的,因为256x256盒子只有~65K像素.
因此,不是重绘和渲染整个场景,t而是想拍摄场景的快照t-1并首先绘制,然后我可以在其上绘制更新.
这可能吗?如果是这样我怎么能这样做,我已经看了很多关于如何做到这一点的线索,但我找不到任何有意义的东西.
您可以做的是将场景渲染为纹理,然后在绘制其他点之前首先绘制此纹理(使用纹理全屏四边形).使用FBO,您可以直接渲染到纹理中,而无需任何数据副本.如果不支持这些,您可以使用当前帧缓冲区(当然,在绘制之后)复制到纹理中glCopyTex(Sub)Image2D.
如果在渲染到纹理时没有清除帧缓冲区,它已经包含前一帧的数据,您只需要渲染其他点.然后你需要做的就是绘制纹理.所以你会做类似的事情:
您甚至可以使用framebuffer_blit扩展(我认为这是OpenGL 3.0的核心)将FBO数据复制到屏幕帧缓冲区,这甚至可能比绘制纹理四边形更快.
如果没有FBO,它将是这样的(需要数据副本):
glCopyTexSubImage2D)中,用于下一个循环