Contents

Function Definition

Specify the target of the operation. target must be one of GL_TEXTURE_2D​, GL_PROXY_TEXTURE_2D​, GL_TEXTURE_1D_ARRAY​, GL_PROXY_TEXTURE_1D_ARRAY​, GL_TEXTURE_RECTANGLE​, GL_PROXY_TEXTURE_RECTANGLE​, or GL_PROXY_TEXTURE_CUBE_MAP​.

levels

Specify the number of texture levels.

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.

Description

glTexStorage2D specifies the storage requirements for all levels of a two-dimensional texture or one-dimensional texture array simultaneously. Once a texture is specified with this command, the format and dimensions of all levels 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.

The behavior of glTexStorage2D depends on the target parameter. When target is GL_TEXTURE_2D​, GL_PROXY_TEXTURE_2D​, GL_TEXTURE_RECTANGLE​, GL_PROXY_TEXTURE_RECTANGLE​ or GL_PROXY_TEXTURE_CUBE_MAP​, calling glTexStorage2D is equivalent, assuming no errors are generated, to executing the following pseudo-code:

Since no texture data is actually provided, the values used in the pseudo-code for format and type are irrelevant and may be considered to be any values that are legal for the chosen internalformat enumerant. internalformat must be one of the sized internal formats given in Table 1 below, one of the sized depth-component formats GL_DEPTH_COMPONENT32F​, GL_DEPTH_COMPONENT24​, or GL_DEPTH_COMPONENT16​, or one of the combined depth-stencil formats, GL_DEPTH32F_STENCIL8​, or GL_DEPTH24_STENCIL8​. Upon success, the value of GL_TEXTURE_IMMUTABLE_FORMAT​ becomes GL_TRUE​. The value of GL_TEXTURE_IMMUTABLE_FORMAT​ may be discovered by calling glGetTexParameter with pname set to GL_TEXTURE_IMMUTABLE_FORMAT​. No further changes to the dimensions or format of the texture object may be made. Using any command that might alter the dimensions or format of the texture object (such as glTexImage2D or another call to glTexStorage2D) will result in the generation of a GL_INVALID_OPERATION​ error, even if it would not, in fact, alter the dimensions or format of the object.

Sized Internal Formats

Component Bitdepth

Sized Internal Format

Base Internal Format

Red

Green

Blue

Alpha

Shared

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_ENUM​ is generated if internalformat is not a valid sized internal format.

GL_INVALID_ENUM​ is generated if target is not one of the accepted target enumerants.

GL_INVALID_VALUE​ is generated if width or levels are less than 1.

GL_INVALID_OPERATION​ is generated if target is GL_TEXTURE_1D_ARRAY​ or GL_PROXY_TEXTURE_1D_ARRAY​ and levels is greater than .

GL_INVALID_OPERATION​ is generated if target is not GL_TEXTURE_1D_ARRAY​ or GL_PROXY_TEXTURE_1D_ARRAY​ and levels is greater than .