我一直在考虑这个问题,如果我切换巨大的纹理,而不是使用glBindTexture()切换许多稍微小一些的纹理,它会使渲染速度变慢吗?我有这样的想法,即每次使用glBindTexture()时GPU都会将纹理数据复制到更快的内存位置,所以我认为大纹理也需要更长时间才能复制。
但是,我记得以前使用很多小纹理来创建动画,而且在某些gfx卡上它的速度非常慢,但是当我将动画帧放在单个纹理上时,性能却高得惊人。不过,在这两种情况下,我在其他一些gfx卡上都没有性能问题。
那就是说,我应该总是使用最大可能的纹理表面尺寸吗? (如果我不在那里浪费太多空的纹理空间。)
答案 0 :(得分:6)
切换纹理很贵。通常的瓶颈是缓存压力,但偶尔也会从GPU内存换出纹理。
然而,只要所讨论的纹理是驻留的,即位于快速GPU存储器上,纹理绑定就是O(1),即与纹理大小无关。所以应该总是尽可能使用尽可能大的纹理。关键字是纹理图集,这些通常是一种提高性能的方法。