glTextureView initializes a texture object as an alias, or view of another texture object, sharing some
or all of the parent texture's data store with the initialized texture. texture specifies a name
previously reserved by a successful call to glGenTextures() but that has not yet been bound or given a
target. target specifies the target for the newly initialized texture and must be compatible with the
target of the parent texture, given in origtexture as specified in the following table:
┌─────────────────────────────────┬─────────────────────────────────────┐
│ OriginalTarget │ CompatibleNewTargets │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_1D │ GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_2D │ GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_3D │ GL_TEXTURE_3D │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_CUBE_MAP │ GL_TEXTURE_CUBE_MAP, GL_TEXTURE_2D, │
│ │ GL_TEXTURE_2D_ARRAY, │
│ │ GL_TEXTUER_CUBE_MAP_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_RECTANGLE │ GL_TEXTURE_RECTANGLE │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_BUFFER │ none │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_1D_ARRAY │ GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_2D_ARRAY │ GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_CUBE_MAP_ARRAY │ GL_TEXTURE_CUBE_MAP, GL_TEXTURE_2D, │
│ │ GL_TEXTURE_2D_ARRAY, │
│ │ GL_TEXTUER_CUBE_MAP_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_2D_MULTISAMPLE │ GL_TEXTURE_2D_MULTISAMPLE, │
│ │ GL_TEXTURE_MULTISAMPLE_ARRAY │
├─────────────────────────────────┼─────────────────────────────────────┤
│ GL_TEXTURE_2D_MULTISAMPLE_ARRAY │ GL_TEXTURE_2D_MULTISAMPLE, │
│ │ GL_TEXTURE_MULTISAMPLE_ARRAY │
└─────────────────────────────────┴─────────────────────────────────────┘
The value of GL_TEXTURE_IMMUTABLE_FORMAT for origtexture must be GL_TRUE. After initialization, texture
inherits the data store of the parent texture, origtexture and is usable as a normal texture object with
target target. Data in the shared store is reinterpreted with the new internal format specified by
internalformat. internalformat must be compatible with the internal format of the parent texture as
specified in the following table:
┌───────────────┬─────────────────────────────────────────────────────────┐
│ Class │ InternalFormats │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 128-bit │ GL_RGBA32F, GL_RGBA32UI, GL_RGBA32I │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 96-bit │ GL_RGB32F, GL_RGB32UI, GL_RGB32I │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 64-bit │ GL_RGBA16F, GL_RG32F, GL_RGBA16UI, │
│ │ GL_RG32UI, │
│ │ GL_RGBA16I, GL_RG32I, GL_RGBA16, │
│ │ GL_RGBA16_SNORM │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 48-bit │ GL_RGB16, GL_RGB16_SNORM, GL_RGB16F, │
│ │ GL_RGB16UI, GL_RGB16I │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 32-bit │ GL_RG16F, GL_R11F_G11F_B10F, GL_R32F, │
│ │ GL_RGB10_A2UI, │
│ │ GL_RGBA8UI, │
│ │ GL_RG16UI, GL_R32UI, GL_RGBA8I, │
│ │ GL_RG16I, │
│ │ GL_R32I, GL_RGB10_A2, GL_RGBA8, │
│ │ GL_RG16, │
│ │ GL_RGBA8_SNORM, GL_RG16_SNORM, │
│ │ GL_SRGB8_ALPHA8, │
│ │ GL_RGB9_E5 │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 24-bit │ GL_RGB8, GL_RGB8_SNORM, GL_SRGB8, │
│ │ GL_RGB8UI, │
│ │ GL_RGB8I │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 16-bit │ GL_R16F, GL_RG8UI, GL_R16UI, GL_RG8I, │
│ │ GL_R16I, │
│ │ GL_RG8, GL_R16, GL_RG8_SNORM, GL_R16_SNORM │
├───────────────┼─────────────────────────────────────────────────────────┤
│ 8-bit │ GL_R8UI, GL_R8I, GL_R8, GL_R8_SNORM │
├───────────────┼─────────────────────────────────────────────────────────┤
│ GL_RGTC1_RED │ GL_COMPRESSED_RED_RGTC1, GL_COMPRESSED_SIGNED_RED_RGTC1 │
├───────────────┼─────────────────────────────────────────────────────────┤
│ GL_RGTC2_RG │ GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_SIGNED_RG_RGTC2 │
├───────────────┼─────────────────────────────────────────────────────────┤
│ GL_BPTC_UNORM │ GL_COMPRESSED_RGBA_BPTC_UNORM, │
│ │ GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM │
├───────────────┼─────────────────────────────────────────────────────────┤
│ GL_BPTC_FLOAT │ GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT, │
│ │ GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT │
└───────────────┴─────────────────────────────────────────────────────────┘
If the original texture is an array or has multiple mipmap levels, the parameters minlayer, numlayers,
minlevel, and numlevels control which of those slices and levels are considered part of the texture. The
minlevel and minlayer parameters are relative to the view of the original texture. If numlayers or
numlevels extend beyond the original texture, they are clamped to the max extent of the original texture.
If the new texture's target is GL_TEXTURE_CUBE_MAP, the clamped numlayers must be equal to 6. If the new
texture's target is GL_TEXTURE_CUBE_MAP_ARRAY, then numlayers counts layer-faces rather than layers, and
the clamped numlayers must be a multiple of 6. If the new texture's target is GL_TEXTURE_CUBE_MAP or
GL_TEXTURE_CUBE_MAP_ARRAY, the width and height of the original texture's levels must be equal.
When the original texture's target is GL_TEXTURE_CUBE_MAP, the layer parameters are interpreted in the
same order as if it were a GL_TEXTURE_CUBE_MAP_ARRAY with 6 layer-faces.
If target is GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_RECTANGLE, or
GL_TEXTURE_2D_MULTISAMPLE, numlayers must equal 1.
The dimensions of the original texture must be less than or equal to the maximum supported dimensions of
the new target. For example, if the original texture has a GL_TEXTURE_2D_ARRAY target and its width is
greater than GL_MAX_CUBE_MAP_TEXTURE_SIZE, an error will be generated if glTextureView is called to
create a GL_TEXTURE_CUBE_MAP view.
Texture commands that take a level or layer parameter, such as glTexSubImage2D(), interpret that
parameter to be relative to the view of the texture. i.e. the mipmap level of the data store that would
be updated via glTexSubImage2D() would be the sum of level and the value of GL_TEXTURE_VIEW_MIN_LEVEL.