【问题标题】:OpenGL: Bigger texture surfaces better or worser than many small texture surfaces?OpenGL:更大的纹理表面比许多小的纹理表面更好或更差?
【发布时间】:2011-02-01 02:36:58
【问题描述】:

我一直在思考这个问题,如果我切换巨大的纹理,而不是使用 glBindTexture() 切换许多稍微小一点的纹理,它是否会使渲染变慢?我的想法是每次使用 glBindTexture() 时,GPU 都会将纹理数据复制到更快的内存位置,所以我认为复制大纹理也需要更长的时间。

但是,我记得以前使用过很多小纹理来创建动画,并且在某些 gfx 卡上速度非常慢,但是当我将动画帧放在单个纹理上时,性能就非常高了。尽管如此,在这两种情况下,我在其他一些 gfx 卡上都没有性能问题。

也就是说,我应该始终使用尽可能大的纹理表面尺寸吗? (如果我不浪费太多空白纹理空间的话。)

【问题讨论】:

    标签: opengl textures


    【解决方案1】:

    切换纹理的成本很高。通常的瓶颈是缓存压力,但偶尔也会从 GPU 内存中换出纹理。

    但是,只要所讨论的纹理是常驻的,即位于快速 GPU 内存上,更改纹理绑定是 O(1),即与纹理大小无关。因此,应该始终使用尽可能大的纹理。关键字是纹理图集,通常是提高性能的一种方法。

    【讨论】:

    • 你能提供一些参考吗,我很难相信所有纹理总是需要相同的时间。
    • @rookie。例如,您可以尝试记录自己在 CUDA 中的纹理缓存行为。驱动程序不会(如果不需要)将整个纹理移动到更快的内存中。只有实际使用/采样的部分才会以 N 像素大小的 2d 块进入 GPU“纹理缓存”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多