Name

glTexImage2D — specify a two-dimensional texture image

C Specification

void glTexImage2D(GLenum target,
 GLint level,
 GLint internalformat,
 GLsizei width,
 GLsizei height,
 GLint border,
 GLenum format,
 GLenum type,
 const GLvoid * pixels);
 

Parameters

target

Specifies the target texture. Must be GL_TEXTURE_2D.

level

Specifies the level-of-detail number. Level 0 is the base image level. Level n is the nth mipmap reduction image. Must be greater or equal 0.

internalformat

Specifies the color components in the texture. Must be same as format. The following symbolic values are accepted: GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, or GL_LUMINANCE_ALPHA.

width

Specifies the width of the texture image. Must be 2n for some integer n. All implementations support texture images that are at least 64 texels wide.

height

Specifies the height of the texture image. Must be 2m for some integer m. All implementations support texture images that are at least 64 texels high.

border

Specifies the width of the border. Must be 0.

format

Specifies the format of the pixel data. Must be same as internalformat. The following symbolic values are accepted: GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA.

type

Specifies the data type of the pixel data. The following symbolic values are accepted: GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4, and GL_UNSIGNED_SHORT_5_5_5_1.

pixels

Specifies a pointer to the image data in memory.

Description

Texturing maps a portion of a specified texture image onto each graphical primitive for which texturing is enabled. To enable and disable two-dimensional texturing, call glEnable and glDisable with argument GL_TEXTURE_2D. Two-dimensional texturing is initially disabled.

To define texture images, call glTexImage2D. The arguments describe the parameters of the texture image, such as height, width, width of the border, level-of-detail number (see glTexParameter), and number of color components provided. The last three arguments describe how the image is represented in memory.

Data is read from pixels as a sequence of unsigned bytes or shorts, depending on type. These values are grouped into sets of one, two, three, or four values, depending on format, to form elements.

When type is GL_UNSIGNED_BYTE, each of these bytes is interpreted as one color component, depending on format. When type is one of GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, each unsigned value is interpreted as containing all the components for a single pixel, with the color components arranged according to format.

The first element corresponds to the lower left corner of the texture image. Subsequent elements progress left-to-right through the remaining texels in the lowest row of the texture image, and then in successively higher rows of the texture image. The final element corresponds to the upper right corner of the texture image.

By default, adjacent pixels are taken from adjacent memory locations, except that after all width pixels are read, the read pointer is advanced to the next four-byte boundary. The four-byte row alignment is specified by glPixelStorei with argument GL_UNPACK_ALIGNMENT, and it can be set to one, two, four, or eight bytes.

format determines the composition of each element in pixels. It can assume one of the following symbolic values:

GL_ALPHA

Each element is a single alpha component. The GL converts it to floating point and assembles it into an RGBA element by attaching 0 for red, green, and blue.

GL_RGB

Each element is an RGB triple. The GL converts it to fixed-point or floating-point and assembles it into an RGBA element by attaching 1 for alpha.

GL_RGBA

Each element contains all four components. The GL converts it to fixed-point or floating-point.

GL_LUMINANCE

Each element is a single luminance value. The GL converts it to fixed-point or floating-point, then assembles it into an RGBA element by replicating the luminance value three times for red, green, and blue and attaching 1 for alpha.

GL_LUMINANCE_ALPHA

Each element is a luminance/alpha pair. The GL converts it to fixed-point or floating point, then assembles it into an RGBA element by replicating the luminance value three times for red, green, and blue.

Notes

pixels may be NULL. In this case texture memory is allocated to accommodate a texture of width width and height height. You can then download subtextures to initialize this texture memory. The image is undefined if the user tries to apply an uninitialized portion of the texture image to a primitive.

glTexImage2D specifies the two-dimensional texture for the currently bound texture specified with glBindTexture, and the current texture unit, specified with glActiveTexture.

Errors

GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D.

GL_INVALID_ENUM is generated if format is not an accepted constant.

GL_INVALID_ENUM is generated if type is not an accepted constant.

GL_INVALID_VALUE is generated if level is less than 0.

GL_INVALID_VALUE may be generated if level is greater than log2max , where max is the returned value of GL_MAX_TEXTURE_SIZE.

GL_INVALID_VALUE is generated if internalformat is not an accepted constant.

GL_INVALID_VALUE is generated if width or height is less than 0 or greater than GL_MAX_TEXTURE_SIZE, or if either cannot be represented as 2k for some integer k.

GL_INVALID_VALUE is generated if border is not 0.

GL_INVALID_OPERATION is generated if internalformat and format are not the same.

GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_5_6_5 and format is not GL_RGB.

GL_INVALID_OPERATION is generated if type is one of GL_UNSIGNED_SHORT_4_4_4_4, or GL_UNSIGNED_SHORT_5_5_5_1 and format is not GL_RGBA.

Associated Gets

glGet with argument GL_MAX_TEXTURE_SIZE

See Also

glActiveTexture, glBindTexture, glCopyTexImage2D, glCopyTexSubImage2D, glGet, glMatrixMode, glPixelStorei, glTexEnv, glTexSubImage2D, glTexParameter

Copyright

Copyright © 2003-2004 Silicon Graphics, Inc. This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.