在RenderToTexture上下文中,涉及多个着色器,我需要CPU访问其中一个最终呈现目标。使用glGetTexImage
很好,不幸的是它将所有纹理数据复制到客户端内存。RTT到TEXTURE_BUFFER
为了避免这个副本,我试图用TEXTURE_BUFFER
到implemnet一个RTT,因此单独的缓冲区对象连接到一个纹理,使用纹理渲染的部分,然后简单地使用glMapBuffer
映射纹理的数据存储并使其可供CPU访问。
除了代码之外,我想问一下这样的策略是否可能是正确的(没有什么比我更好的了)或者违背了任何规范。
我有很多关于TBO的文档作为设置纹理的方法,但没有关于使用TBOs读取RTT的结果。我只是想知道,我想要做什么是不合法的。
为什么需要将内容下载到系统内存?也许你可以在GPU上完成这项工作?映射缓冲区通常也会复制。 https://www.opengl.org/wiki/Buffer_Object#Mapping – fen
Im实际上试图避免复制到系统内存。映射缓冲区对象通常可以解决而不涉及任何复制。不,不能在GPU上工作 – user815129
你也可以看看像素缓冲区对象http://www.songho.ca/opengl/gl_pbo.html,https://www.opengl.org/wiki/Pixel_Buffer_Object – fen