我正在阅读新的红皮书中的纹理视图。在第322页说:
OpenGL允许您在多个数据存储之间共享单个数据存储纹理,每个纹理都有自己的格式和尺寸。
(通过纹理视图)
我的问题是:
这是否意味着单个纹理源被多个实例(在这种情况下是纹理视图)引用?
它与使用相同的纹理对象有什么不同,例如,但使用不同的采样器?
另外,这是否意味着通过纹理视图改变纹理像素会改变原始纹理对象中的像素?(我想答案是肯定的,因为文件说它是别名的纹理存储)
是的,共享数据存储意味着从不同的对象访问相同的存储。就像共享指针意味着可以从两个不同的位置访问相同的内存。
它与使用采样对象的不同之处在于它们之间没有相似性。采样器对象存储采样参数。纹理对象具有用于采样的而不是参数,例如mipmap范围,swizzle mask等。这些不是采样状态;它们是纹理状态
纹理对象也有一个特定的纹理类型。相同存储的不同视图可以有不同的纹理类型(在限制内)。你可以有一个GL_TEXTURE_2D
,它是GL_TEXTURE_2D_ARRAY
纹理的单层视图。你可以取一个有6层或更多层的GL_TEXTURE_2D_ARRAY
,并从它创建一个GL_TEXTURE_CUBE_MAP
。
采样对象不能这样做。
纹理对象有一个内部格式,该格式定义了如何解释存储。相同存储的不同视图可以有不同的格式(在一定范围内)采样器不影响格式。
采样对象也不能这样做。
你可以使用纹理视图来实现与采样对象相同的效果吗?不。使用采样器,你可以从纹理对象中分离采样参数。这允许您对多个不同的对象使用同一组参数。因此,你可以改变一个采样对象,并使用多个纹理,而不必去到每个纹理和修改它。