我可以将2000x2000纹理绑定到FBO中的颜色附件,并告诉OpenGL的行为就像纹理更小一样,假设为1000x1000?
关键是,在我的渲染周期中,我需要渲染很多(大多数是小的)中间纹理,但我一次只需要1个。我在想,不是创建许多较小的纹理,而是只有1个适当大的纹理,我会将它绑定到手边的FBO,告诉OpenGL只渲染其中的一部分,并节省内存。
或许我应该每帧多次破坏/重建这些纹理?这肯定会节省更多的内存,但这不会导致明显的放缓吗?
答案 0 :(得分:1)
我可以将2000x2000纹理绑定到FBO中的颜色附件,和 告诉OpenGL的行为就像纹理更小一样,让我们说吧 1000×1000?
是的,只需将glViewport()
设置为您要渲染的区域,如果您正在启用剪刀测试,请记得调整glScissor()
边界区域。
或许我应该多次摧毁/重建这些纹理 每帧?这肯定会节省更多的内存,但不会 导致明显放缓的原因?
每帧完全破坏和重新创建一个新的纹理对象会很慢,因为它会导致不断的内存重新分配开销,所以绝对不要这样做。
拥有一个预先分配的纹理池,你可以循环使用它很好 - 这是一种非常常见的技术。在存储2K * 2K纹理的内存方面,与存储4个独立的1K * 1K纹理相比,你不会真正节省太多 - 总存储要求相同,相比之下额外的元数据开销很小 - 所以如果将它们分开则更容易在应用程序逻辑方面,我建议这样做。