何时使用纹理视图(Texture Views)?

7
我正在阅读版的红皮书,关于纹理视图的内容。在第322页上说到:

OpenGL允许您在多个纹理之间共享单个数据存储区,每个纹理都具有自己的格式和尺寸。

(通过纹理视图)
现在,我的问题是:
这是否意味着多个实例(在此情况下为纹理视图)引用单个纹理源?
与使用相同的纹理对象不同,例如但具有不同的采样器,它有何不同?
此外,这是否意味着通过纹理视图更改纹理像素将更改原始纹理对象中的像素?(我想答案是肯定的,因为文档说它是纹理存储的别名)
1个回答

7

是的,共享数据存储意味着从不同的对象访问相同的存储空间。就像共享指针意味着能够从两个不同的位置访问相同的内存一样。

这与使用采样器对象不同,因为它们之间没有相似之处。采样器对象 存储采样参数。纹理对象具有 非采样参数,例如 mipmap 范围, 颜色通道重映射 等等。这些不是采样状态;它们是纹理状态。

Texture对象也有特定的纹理类型。相同存储的不同视图可以拥有不同的纹理类型(在限制范围内)。你可以拥有一个GL_TEXTURE_2D,它是GL_TEXTURE_2D_ARRAY纹理单层的视图。你可以从6个或更多层的GL_TEXTURE_2D_ARRAY创建一个GL_TEXTURE_CUBE_MAP
采样器对象无法做到这一点。
纹理对象有一个内部格式,定义了如何解释存储。相同存储的不同视图可以拥有不同的格式(在限制范围内)。采样器不会影响格式。
采样器对象也无法做到这一点。

你能使用纹理视图来实现与采样器对象相同的效果吗?不行。使用采样器,您可以将采样参数与纹理对象分离。这使您可以为多个不同对象使用相同的参数集。因此,您可以更改一个采样器对象并将其与多个纹理一起使用,而无需去每个纹理并修改它。

它们是两个不同的功能,用于两个不同的目的。


是的,现在很清楚了。但是你没有回答一个问题:如果在纹理视图中更改数据,是否也会更改所引用的纹理?根据你的句子:“就像共享指针意味着能够从两个不同的位置访问相同的内存。”答案可能是“是”? - Michael IV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接