8.18 OpenGL纹理和采样器:纹理视图

纹理视图 Texture Views

可以创建一个引用另一个纹理的数据存储并以不同的格式解释数据的纹理,并且/或者选择另一个纹理的子集的级别和/或层。这样的纹理的数据存储与原始纹理的数据存储共享。使用原始纹理更新共享数据存储会影响使用新纹理读取的纹理值,反之亦然。纹理数据存储保持存在状态,直到删除所有引用它的纹理为止。

命令

void glTextureView( uint texture, enum target, uint origtexture, enum internalformat, uint minlevel, uint numlevels, uint minlayer, uint numlayers );

将名为texture的纹理初始化为由target指定的目标。纹理的数据存储从名为origtexture的纹理继承,但数据存储的元素根据internalformat指定的内部格式进行解释。此外,如果origtexture是一个数组或具有多个mipmap级别,则minlayernumlayersminlevelnumlevels参数控制哪些切片和级别被视为纹理的一部分。

minlevelminlayer参数是相对于origtexture的视图的。如果numlayersnumlevels超出origtexture,则它们会被截断为原始纹理的最大范围。

如果命令成功,texture中的纹理参数将更新如下:

  • TEXTURE_IMMUTABLE_FORMAT设置为TRUE
  • TEXTURE_IMMUTABLE_LEVELS设置为origtextureTEXTURE_IMMUTABLE_LEVELS的值。
  • TEXTURE_VIEW_MIN_LEVEL设置为minlevel加上origtextureTEXTURE_VIEW_MIN_LEVEL的值。
  • TEXTURE_VIEW_MIN_LAYER设置为minlayer加上origtextureTEXTURE_VIEW_MIN_LAYER的值。
  • TEXTURE_VIEW_NUM_LEVELS设置为numlevelsorigtextureTEXTURE_VIEW_NUM_LEVELS的值减去minlevel中较小的一个。
  • TEXTURE_VIEW_NUM_LAYERS设置为numlayersorigtextureTEXTURE_VIEW_NUM_LAYERS的值减去minlayer中较小的一个。

新纹理的目标必须与origtexture的目标兼容,如Table 8.21所定义。

numlayers和纹理尺寸的许多约束取决于目标和origtexture的目标。这些约束在错误部分中总结如下。

  • origtexture的目标是TEXTURE_CUBE_MAP时,层参数的解释顺序与它是一个带有6个层面的TEXTURE_CUBE_MAP_ARRAY时相同。
  • 如果内部格式存在于Table 8.22中,则两个纹理的内部格式必须兼容。如果不在表中,则内部格式必须相同。
  • 如果内部格式相同但为基本内部格式,则每个纹理的实现有效内部格式(参见第8.5节末尾)必须相同。
  • 如果内部格式与原始纹理的内部格式不完全匹配,则内存内容将以与第8.26节中描述的图像绑定相同的方式重新解释。
  • 接受levellayer参数的纹理命令(例如TexSubImage2D)将该参数解释为相对于纹理视图的。即,通过TexSubImage2D更新的数据存储的mipmap级别将是levelTEXTURE_VIEW_MIN_LEVEL值的总和。

Original targetValid new targets
TEXTURE_1DTEXTURE_1D, TEXTURE_1D_ARRAY
TEXTURE_2DTEXTURE_2D, TEXTURE_2D_ARRAY
TEXTURE_3DTEXTURE_3D
TEXTURE_CUBE_MAPTEXTURE_CUBE_MAP, TEXTURE_2D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY
TEXTURE_RECTANGLETEXTURE_RECTANGLE
TEXTURE_BUFFERnone
TEXTURE_1D_ARRAYTEXTURE_1D_ARRAY, TEXTURE_1D
TEXTURE_2D_ARRAYTEXTURE_2D_ARRAY, TEXTURE_2D,TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_ARRAY
TEXTURE_CUBE_MAP_ARRAYTEXTURE_CUBE_MAP_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_2D, TEXTURE_CUBE_MAP
TEXTURE_2D_MULTISAMPLETEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY
TEXTURE_2D_MULTISAMPLE_ARRAYTEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY

Table 8.21: Legal texture targets for TextureView


Class Internalformats
VIEW_CLASS_128_BITSRGBA32F, RGBA32UI, RGBA32I
VIEW_CLASS_96_BITSRGB32F, RGB32UI, RGB32I
VIEW_CLASS_64_BITSRGBA16F, RG32F, RGBA16UI, RG32UI, RGBA16I, RG32I, RGBA16, RGBA16_SNORM
VIEW_CLASS_48_BITSRGB16, RGB16_SNORM, RGB16F, RGB16UI, RGB16I
VIEW_CLASS_32_BITSRG16F, R11F_G11F_B10F, R32F, RGB10_A2UI, RGBA8UI, RG16UI, R32UI, RGBA8I, RG16I, R32I, RGB10_A2, RGBA8, RG16, RGBA8_SNORM, RG16_SNORM, SRGB8_ALPHA8, RGB9_E5
VIEW_CLASS_24_BITSRGB8, RGB8_SNORM, SRGB8, RGB8UI, RGB8I
VIEW_CLASS_16_BITSR16F, RG8UI, R16UI, RG8I, R16I, RG8, R16, RG8_SNORM, R16_SNORM
VIEW_CLASS_8_BITSR8UI, R8I, R8, R8_SNORM
VIEW_CLASS_RGTC1_REDCOMPRESSED_RED_RGTC1, COMPRESSED_SIGNED_RED_RGTC1
VIEW_CLASS_RGTC2_RGCOMPRESSED_RG_RGTC2, COMPRESSED_SIGNED_RG_RGTC2
VIEW_CLASS_BPTC_UNORMCOMPRESSED_RGBA_BPTC_UNORM, COMPRESSED_SRGB_ALPHA_BPTC_UNORM
VIEW_CLASS_BPTC_FLOATCOMPRESSED_RGB_BPTC_SIGNED_FLOAT, COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT

Table 8.22: Compatible internal formats for TextureView. Formats in the same row may be cast to each other

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值