Opengl 什么技术需要可变纹理存储

Opengl 什么技术需要可变纹理存储,opengl,textures,Opengl,Textures,我刚刚读到了不可变纹理存储的优点。虽然我知道,使用可变存储,我可以根据需要调整纹理存储的大小,但我不明白为什么我想这样做 哪些技术使用可变纹理存储的方式在不可变纹理存储中是不可能的或性能不佳的?有几种情况下可变纹理是有用的。下面是我脑海中的一些想法 在GPGPU应用程序中,输入数据通常不是完全网格化的,而是稀疏的。在这种情况下,我不得不浪费内存——可变纹理允许调整大小以防止出现这种情况 冒名顶替者/广告牌LOD-当一些小的东西可以使用时,不需要分配大的纹理 基于纹理的数据相关数学运算,例如基于计

我刚刚读到了不可变纹理存储的优点。虽然我知道,使用可变存储,我可以根据需要调整纹理存储的大小,但我不明白为什么我想这样做


哪些技术使用可变纹理存储的方式在不可变纹理存储中是不可能的或性能不佳的?

有几种情况下可变纹理是有用的。下面是我脑海中的一些想法

  • 在GPGPU应用程序中,输入数据通常不是完全网格化的,而是稀疏的。在这种情况下,我不得不浪费内存——可变纹理允许调整大小以防止出现这种情况
  • 冒名顶替者/广告牌LOD-当一些小的东西可以使用时,不需要分配大的纹理
  • 基于纹理的数据相关数学运算,例如基于计算出的掩码/大小的卷积
  • 缓存用于合成的“昂贵”渲染输出片段。动态调整这些存储纹理的大小可以节省宝贵的GPU内存

  • 我可能还遗漏了很多,但我希望你能理解要点。

    在一些情况下,可变纹理非常有用。下面是我脑海中的一些想法

  • 在GPGPU应用程序中,输入数据通常不是完全网格化的,而是稀疏的。在这种情况下,我不得不浪费内存——可变纹理允许调整大小以防止出现这种情况
  • 冒名顶替者/广告牌LOD-当一些小的东西可以使用时,不需要分配大的纹理
  • 基于纹理的数据相关数学运算,例如基于计算出的掩码/大小的卷积
  • 缓存用于合成的“昂贵”渲染输出片段。动态调整这些存储纹理的大小可以节省宝贵的GPU内存

  • 我可能还遗漏了很多,但我希望你能理解要点。

    请允许我引用ARB在本节中的讨论。请注意,以下是实施OpenGL的IHV提出的问题和讨论,他们比我们大多数人更了解自己的GPU:

    4:使用这些入口点是否应该使元数据(格式和维度)不可变

    决议:是的

    讨论:知道元数据不能更改的好处可能会超过在每个纹理规范调用上检查纹理\u不可变\u格式标志的额外成本

    5:使用对TexStorage*的新调用完全替换纹理是否合法

    决心。这是不允许的

    讨论:这有助于使纹理的所有级别无效。允许在此处更改元数据似乎比尝试定义更改元数据意味着什么的可移植定义更容易(例如,如果第一次使用未调整大小的内部格式,第二次使用相应的调整大小的内部格式,或者反之亦然)

    然而,虽然这与删除旧纹理对象并用新对象替换它非常相似,但它确实失去了一些不变性的优点。具体地说,因为这样做不会重置绑定,所以它不允许到在绑定时验证纹理格式的API的迁移路径

    6:如果不影响元数据,在TexStorage*之后使用TexImage*是否合法

    决定:不

    讨论:一个潜在的用例是允许使用空指针使纹理的单个级别无效。然而,如上所述,确定什么构成变更并非易事


    请允许我换一种说法:如果ARB认为原位纹理修改是个好主意,他们就不会让
    glTexStorage
    明确禁止它。

    请允许我引用ARB在。请注意,以下是实施OpenGL的IHV提出的问题和讨论,他们比我们大多数人更了解自己的GPU:

    4:使用这些入口点是否应该使元数据(格式和维度)不可变

    决议:是的

    讨论:知道元数据不能更改的好处可能会超过在每个纹理规范调用上检查纹理\u不可变\u格式标志的额外成本

    5:使用对TexStorage*的新调用完全替换纹理是否合法

    决心。这是不允许的

    讨论:这有助于使纹理的所有级别无效。允许在此处更改元数据似乎比尝试定义更改元数据意味着什么的可移植定义更容易(例如,如果第一次使用未调整大小的内部格式,第二次使用相应的调整大小的内部格式,或者反之亦然)

    然而,虽然这与删除旧纹理对象并用新对象替换它非常相似,但它确实失去了一些不变性的优点。具体地说,因为这样做不会重置绑定,所以它不允许到在绑定时验证纹理格式的API的迁移路径

    6:如果不影响元数据,在TexStorage*之后使用TexImage*是否合法

    决定:不

    讨论:一个潜在的用例是允许使用空指针使纹理的单个级别无效。然而,如上所述,确定什么构成变更并非易事


    请允许我换一种说法:如果ARB认为原位纹理修改是一个好主意,他们就不会让
    glTexStorage
    明确禁止它。

    -1:不,只是。。。不需要。如果你需要“调整”纹理大小,你可以破坏它并创建一个合适大小的新纹理。绝对没有理由在一个纹理中原地执行此操作。为你们俩干杯,很高兴知道人们确实使用了这些功能,即使可能有理由不这样做@妮可:是因为调整大小的问题,还是你觉得删除和调整大小的速度足以满足你的所有需要?@nicobol