何时使用纹理视图

Mic*_* IV 7 opengl opengl-4

我正在阅读新红皮书中的纹理视图.在页面322上说:

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

(通过纹理视图)

现在,我的问题是:

是否意味着单个纹理源被多个实例引用(在这种情况下是纹理视图)?

它与使用相同的纹理对象有何不同,例如使用不同的采样器?

此外,是否意味着通过纹理视图更改纹理像素会改变原始纹理对象中的像素?(我认为答案是肯定的,因为doc说它是纹理存储的别名)

Nic*_*las 7

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

它与使用采样器对象的不同之处在于它们之间没有相似之处.采样器对象存储采样参数.纹理对象具有不用于采样的参数,例如mipmap范围,混合掩码等.这些不是采样器状态; 它们是纹理状态.

纹理对象也具有特定的纹理类型.相同存储的不同视图可以具有不同的纹理类型(在限制内).你可以拥有GL_TEXTURE_2D一个GL_TEXTURE_2D_ARRAY纹理单层的视图.您可以使用GL_TEXTURE_2D_ARRAY6个或更多层,并GL_TEXTURE_CUBE_MAP从中创建一个.

采样器对象不能这样做.

纹理对象具有内部格式,用于定义如何解释存储.同一存储的不同视图可以具有不同的格式(在限制范围内)采样器不会影响格式.

采样器对象也不能这样做.

您可以使用纹理视图来实现与采样器对象相同的效果吗?不可以.使用采样器,您可以从纹理对象中分离采样参数.这允许您为多个不同的对象使用相同的参数集.因此,您可以更改一个采样器对象并将其与多个纹理一起使用,而无需转到每个纹理并对其进行修改.

它们有两个不同的功能,用于两个不同的目的.