ARB_texture_view
概述(#124)
ARB_texture_view的主要目的是通过创建已有纹理对象的视图(view), 来产生新的纹理对象,以达到共享同一纹理存储(data store)的目的。它可以从以下3个方面创建纹理视图:
- texture type 它可以指定一个新的纹理类型(在约束范围内)来创建新的纹理对象
- internal format 它可以定义一个新的纹理格式(在约束范围内)来解释已有的data store
- sub mipmap/array range 它可以从已有纹理的mipmap levels或array slices中截取一个子集作为新的纹理对象
NOTE: 上述最后一种方式只指定新的范围(level/index),而不进行data store拷贝。
没有增加新的纹理类型,原来的纹理对象被划分为以下几个部分:
- 数据存储(Data Store)
- 状态信息,用来描述Data Store的哪一部分被使用,如何解释所用的数据元素
- 嵌入的采样器对象(Sampler)
- 各种其它纹理参数,像Filter, Mipmap等
原则
ARB_texture_view规定的关于创建Texture View的几个原则(限制)主要有以下3个:
- 只能给Immutable纹理创建View,也就是那些由TexStorage创建的纹理
- 原纹理和新纹理的格式要兼容
- 原纹理和新纹理的类型要兼容
为什么只给Immutable纹理类型创建Texture View
Texture View本质上并没有上传纹理data store, 而是像指针一样,增加了对已有纹理对象的引用。如果是Mutable纹理,那么它的格式,大小等都是可以修改的,这样就无法保证纹理的consistency和completeness. 而Immutable纹理不会存在这样的问题。