何时使用纹理视图

时间:2013-06-17 16:25:58

标签: opengl opengl-4

我正在阅读Texture Views红皮书中的new。 在页面322上说:

  

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

(通过纹理视图)

现在,我的问题是:

是否意味着多个实例引用了单个纹理源(在本例中为纹理视图)?

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

此外,是否意味着通过纹理视图更改纹理像素会改变原始纹理对象中的像素?(我认为答案是正面的,因为doc表示它是纹理存储的别名)< / p>

1 个答案:

答案 0 :(得分:6)

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

与使用采样器对象的不同之处在于它们之间没有相似之处。 Sampler objects存储采样参数。纹理对象具有parameters that are not for sampling,例如the mipmap rangeswizzle mask等。这些不是采样器状态;它们是纹理状态。

纹理对象也有specific texture type。同一存储的不同视图可以different texture types (within limits)。您可以拥有GL_TEXTURE_2D,它是GL_TEXTURE_2D_ARRAY纹理的单个图层的视图。您可以获取6个或更多图层的GL_TEXTURE_2D_ARRAY并从中创建GL_TEXTURE_CUBE_MAP

采样器对象无法做到这一点。

纹理对象具有internal format,用于定义如何解释存储。同一存储的不同视图可以different formats (within limits)采样器不会影响格式。

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

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

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