我刚刚读到了不可变纹理存储的优点。虽然我明白,使用可变存储,我可以根据需要调整纹理存储的大小,我不明白为什么我想要。
哪些技术以不可能的方式使用可变纹理存储或在不可变纹理存储中表现不佳?
答案 0 :(得分:3)
请允许我引用ARB在ARB_texture_storage extension中的讨论。请注意,这些是来自实施OpenGL的IHV 的问题和讨论,这些人比我们大多数人更了解他们的GPU:
4:应该使用这些入口点使元数据(格式和维度)不可变吗?
决议:是的。
讨论:知道元数据无法改变的好处可能会超过在每个纹理规范调用上检查TEXTURE_IMMUTABLE_FORMAT标志的额外成本。
5:使用对TexStorage *的新调用完全替换纹理是否合法?
解决。这是不允许的。
讨论:这对于使纹理的所有级别无效非常有用。允许在这里更改元数据似乎比尝试定义更改元数据意味着什么的可移植定义更容易(例如,如果您第一次使用未实现的内部格式,第二次使用相应大小的内部格式,或者反之亦然)?
然而,虽然这很大程度上类似于删除旧纹理对象并将其替换为新纹理对象,但它确实失去了不可变性的一些优点。具体来说,因为这样做不会重置绑定,所以它不允许迁移到API,以便在绑定时验证纹理格式。
6:如果不影响元数据,在TexStorage *之后使用TexImage *是否合法?
决议:否。
讨论:一个潜在的用例是允许使用NULL指针使单个级别的纹理无效。但是,如上所述,确定改变的构成是非常重要的。
请允许我换一种说法:如果ARB认为原位纹理修改是一个好主意,那么他们就不会明确禁止glTexStorage
。
答案 1 :(得分:2)
有几种情况下可变纹理很有用。这里有一些不在我的脑海里。
还有更多我可能会失踪,但我希望你能得到主旨。