## Name

glTexStorage3DMultisample, glTextureStorage3DMultisample — specify storage for a two-dimensional multisample array texture

## C Specification

`void glTexStorage3DMultisample(` | GLenum target,
| GLsizei samples,
| GLenum internalformat,
| GLsizei width,
| GLsizei height,
| GLsizei depth,
| GLboolean fixedsamplelocations`)`;

`void glTextureStorage3DMultisample(` | GLuint texture,
| GLsizei samples,
| GLenum internalformat,
| GLsizei width,
| GLsizei height,
| GLsizei depth,
| GLboolean fixedsamplelocations`)`;

## Parameters

`target`

  Specifies the target to which the texture object is bound for `glTexStorage3DMultisample`. Must be one of `GL_TEXTURE_2D_MULTISAMPLE_ARRAY` or `GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY`.

`texture`

  Specifies the texture object name for `glTextureStorage3DMultisample`. The effective target of `texture` must be one of the valid non-proxy `target` values above.

`samples`

  Specify the number of samples in the texture.

`internalformat`

  Specifies the sized internal format to be used to store texture image data.

`width`

  Specifies the width of the texture, in texels.

`height`

  Specifies the height of the texture, in texels.

`depth`

  Specifies the depth of the texture, in layers.

`fixedsamplelocations`

  Specifies whether the image will use identical sample locations and the same number of samples for all texels in the image, and the sample locations will not depend on the internal format or size of the image.

## Description

`glTexStorage3DMultisample` and `glTextureStorage3DMultisample` specify the storage requirements for a two-dimensional multisample array texture. Once a texture is specified with this command, its format and dimensions become immutable unless it is a proxy texture. The contents of the image may still be modified, however, its storage requirements may not change. Such a texture is referred to as an immutable-format texture.

`samples` specifies the number of samples to be used for the texture and must be greater than zero and less than or equal to the value of `GL_MAX_SAMPLES`. `internalformat` must be a color-renderable, depth-renderable, or stencil-renderable format. `width` and `height` specify the width and height, respectively, of the texture and `depth` specifies the depth (or the number of layers) of the texture. If `fixedsamplelocations` is `GL_TRUE`, the image will use identical sample locations and the same number of samples for all texels in the image, and the sample locations will not depend on the internal format or size of the image.

Table 1. Sized Internal Formats

Sized Internal Format | Base Internal Format | Red Bits | Green Bits | Blue Bits | Alpha Bits | Shared Bits
--- | --- | --- | --- | --- | --- | ---
`GL_R8` | `GL_RED` | 8 |  |  |  |
`GL_R8_SNORM` | `GL_RED` | s8 |  |  |  |
`GL_R16` | `GL_RED` | 16 |  |  |  |
`GL_R16_SNORM` | `GL_RED` | s16 |  |  |  |
`GL_RG8` | `GL_RG` | 8 | 8 |  |  |
`GL_RG8_SNORM` | `GL_RG` | s8 | s8 |  |  |
`GL_RG16` | `GL_RG` | 16 | 16 |  |  |
`GL_RG16_SNORM` | `GL_RG` | s16 | s16 |  |  |
`GL_R3_G3_B2` | `GL_RGB` | 3 | 3 | 2 |  |
`GL_RGB4` | `GL_RGB` | 4 | 4 | 4 |  |
`GL_RGB5` | `GL_RGB` | 5 | 5 | 5 |  |
`GL_RGB8` | `GL_RGB` | 8 | 8 | 8 |  |
`GL_RGB8_SNORM` | `GL_RGB` | s8 | s8 | s8 |  |
`GL_RGB10` | `GL_RGB` | 10 | 10 | 10 |  |
`GL_RGB12` | `GL_RGB` | 12 | 12 | 12 |  |
`GL_RGB16_SNORM` | `GL_RGB` | 16 | 16 | 16 |  |
`GL_RGBA2` | `GL_RGB` | 2 | 2 | 2 | 2 |
`GL_RGBA4` | `GL_RGB` | 4 | 4 | 4 | 4 |
`GL_RGB5_A1` | `GL_RGBA` | 5 | 5 | 5 | 1 |
`GL_RGBA8` | `GL_RGBA` | 8 | 8 | 8 | 8 |
`GL_RGBA8_SNORM` | `GL_RGBA` | s8 | s8 | s8 | s8 |
`GL_RGB10_A2` | `GL_RGBA` | 10 | 10 | 10 | 2 |
`GL_RGB10_A2UI` | `GL_RGBA` | ui10 | ui10 | ui10 | ui2 |
`GL_RGBA12` | `GL_RGBA` | 12 | 12 | 12 | 12 |
`GL_RGBA16` | `GL_RGBA` | 16 | 16 | 16 | 16 |
`GL_SRGB8` | `GL_RGB` | 8 | 8 | 8 |  |
`GL_SRGB8_ALPHA8` | `GL_RGBA` | 8 | 8 | 8 | 8 |
`GL_R16F` | `GL_RED` | f16 |  |  |  |
`GL_RG16F` | `GL_RG` | f16 | f16 |  |  |
`GL_RGB16F` | `GL_RGB` | f16 | f16 | f16 |  |
`GL_RGBA16F` | `GL_RGBA` | f16 | f16 | f16 | f16 |
`GL_R32F` | `GL_RED` | f32 |  |  |  |
`GL_RG32F` | `GL_RG` | f32 | f32 |  |  |
`GL_RGB32F` | `GL_RGB` | f32 | f32 | f32 |  |
`GL_RGBA32F` | `GL_RGBA` | f32 | f32 | f32 | f32 |
`GL_R11F_G11F_B10F` | `GL_RGB` | f11 | f11 | f10 |  |
`GL_RGB9_E5` | `GL_RGB` | 9 | 9 | 9 |  | 5
`GL_R8I` | `GL_RED` | i8 |  |  |  |
`GL_R8UI` | `GL_RED` | ui8 |  |  |  |
`GL_R16I` | `GL_RED` | i16 |  |  |  |
`GL_R16UI` | `GL_RED` | ui16 |  |  |  |
`GL_R32I` | `GL_RED` | i32 |  |  |  |
`GL_R32UI` | `GL_RED` | ui32 |  |  |  |
`GL_RG8I` | `GL_RG` | i8 | i8 |  |  |
`GL_RG8UI` | `GL_RG` | ui8 | ui8 |  |  |
`GL_RG16I` | `GL_RG` | i16 | i16 |  |  |
`GL_RG16UI` | `GL_RG` | ui16 | ui16 |  |  |
`GL_RG32I` | `GL_RG` | i32 | i32 |  |  |
`GL_RG32UI` | `GL_RG` | ui32 | ui32 |  |  |
`GL_RGB8I` | `GL_RGB` | i8 | i8 | i8 |  |
`GL_RGB8UI` | `GL_RGB` | ui8 | ui8 | ui8 |  |
`GL_RGB16I` | `GL_RGB` | i16 | i16 | i16 |  |
`GL_RGB16UI` | `GL_RGB` | ui16 | ui16 | ui16 |  |
`GL_RGB32I` | `GL_RGB` | i32 | i32 | i32 |  |
`GL_RGB32UI` | `GL_RGB` | ui32 | ui32 | ui32 |  |
`GL_RGBA8I` | `GL_RGBA` | i8 | i8 | i8 | i8 |
`GL_RGBA8UI` | `GL_RGBA` | ui8 | ui8 | ui8 | ui8 |
`GL_RGBA16I` | `GL_RGBA` | i16 | i16 | i16 | i16 |
`GL_RGBA16UI` | `GL_RGBA` | ui16 | ui16 | ui16 | ui16 |
`GL_RGBA32I` | `GL_RGBA` | i32 | i32 | i32 | i32 |
`GL_RGBA32UI` | `GL_RGBA` | ui32 | ui32 | ui32 | ui32 |

## Errors

`GL_INVALID_OPERATION` is generated by `glTexStorage3DMultisample` if zero is bound to `target`.

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

`GL_INVALID_ENUM` is generated if `internalformat` is not a valid color-renderable, depth-renderable or stencil-renderable format.

`GL_INVALID_ENUM` is generated if `target` or the effective target of `texture` is not one of the accepted targets described above.

`GL_INVALID_VALUE` is generated if `width` or `height` are less than 1 or greater than the value of `GL_MAX_TEXTURE_SIZE`.

`GL_INVALID_VALUE` is generated if `depth` is less than 1 or greater than the value of `GL_MAX_ARRAY_TEXTURE_LAYERS`.

`GL_INVALID_VALUE` is generated if `levels` is less than 1.

`GL_INVALID_VALUE` is generated if `samples` is greater than the value of `GL_MAX_SAMPLES`.

`GL_INVALID_OPERATION` is generated if the value of `GL_TEXTURE_IMMUTABLE_FORMAT` for the texture bound to `target` is not `GL_FALSE`.

## Associated Gets

glGetInteger with arguments `GL_MAX_TEXTURE_SIZE`, `GL_MAX_ARRAY_TEXTURE_LEVELS`, `GL_TEXTURE_VIEW_MIN_LAYER`, `GL_TEXTURE_VIEW_NUM_LAYERS`, or `GL_TEXTURE_IMMUTABLE_LEVELS`.

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glTexStorage3DMultisample` | - | - | - | - | - | - | - | - | - | ✔ | ✔ | ✔
`glTextureStorage3DMultisample` | - | - | - | - | - | - | - | - | - | - | - | ✔

## See Also

glTexImage3D, glTexImage3DMultisample, glTexStorage1D, glTexStorage2DMultisample, glTexStorage3D.

## Copyright

Copyright © 2013-2014 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/.