2012 Khronos Group
glTextureView 3G
glTextureView initialize a texture as a data alias of another texture's data store

## C Specification

void `glTextureView` GLuint texture GLenum target GLuint origtexture GLenum internalformat GLuint minlevel GLuint numlevels GLuint minlayer GLuint numlayers

## Parameters

texture

  Specifies the texture object to be initialized as a view.

target

  Specifies the target to be used for the newly initialized texture.

origtexture

  Specifies the name of a texture object of which to make a view.

internalFormat

  Specifies the internal format for the newly created view.

minlevel

  Specifies lowest level of detail of the view.

numlevels

  Specifies the number of levels of detail to include in the view.

minlayer

  Specifies the index of the first layer to include in the view.

numlayers

  Specifies the number of layers to include in the view.

## Description

`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:

Original Target | Compatible New Targets
--- | ---
`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 | Internal Formats
--- | ---
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 TexSubImage2D would be the sum of level and the value of `GL_TEXTURE_VIEW_MIN_LEVEL`.

## Errors

`GL_INVALID_VALUE` is generated if minlayer or minlevel are larger than the greatest layer or level of origtexture.

`GL_INVALID_OPERATION` is generated if target is not compatible with the target of origtexture.

`GL_INVALID_OPERATION` is generated if the dimensions of origtexture are greater than the maximum supported dimensions for target.

`GL_INVALID_OPERATION` is generated if internalformat is not compatible with the internal format of origtexture.

`GL_INVALID_OPERATION` is generated if texture has already been bound or otherwise given a target.

`GL_INVALID_OPERATION` is generated if the value of `GL_TEXTURE_IMMUTABLE_FORMAT` for origtexture is not `GL_TRUE`.

`GL_INVALID_OPERATION` is generated if origtexture is not the name of an existing texture object.

`GL_INVALID_VALUE` is generaged if target is `GL_TEXTURE_CUBE_MAP` and numlayers is not 6, or if target is `GL_TEXTURE_CUBE_MAP_ARRAY` and numlayers is not an integer multiple of 6.

`GL_INVALID_VALUE` is generated if target is `GL_TEXTURE_1D`, `GL_TEXTURE_2D`, `GL_TEXTURE_3D`, `GL_TEXTURE_RECTANGLE`, or `GL_TEXTURE_2D_MULTISAMPLE` and numlayers does not equal 1.

`GL_INVALID_VALUE` is generated if texture zero or is not the name of a texture previously returned from a successful call to glGenTextures.

## Associated Gets

glTexParameter with arguments `GL_TEXTURE_VIEW_MIN_LEVEL`, `GL_TEXTURE_VIEW_NUM_LEVELS`, `GL_TEXTURE_VIEW_MIN_LAYER`, `GL_TEXTURE_VIEW_NUM_LAYERS`, or `GL_TEXTURE_IMMUTABLE_LEVELS`.

## See Also

glTexStorage1D, glTexStorage2D, glTexStorage3D, glGetTexParameter.

## Copyright

Copyright 2012 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.