- write a block of pixels to the frame buffer
C SPECIFICATION
PARAMETERS
_param1, _param2 Specify the dimensions of the pixel rect-
angle to be written into the frame
buffer.
_param3 Specifies the of the pixel data. Sym-
bolic constants GL_COLOR_INDEX,
GL_STENCIL_INDEX, GL_DEPTH_COMPONENT,
GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_RED,
GL_GREEN, GL_BLUE, GL_ALPHA,
GL_LUMINANCE, and GL_LUMINANCE_ALPHA are
accepted.
_param4 Specifies the data type for _param5.
Symbolic constants GL_UNSIGNED_BYTE,
GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT,
GL_SHORT, GL_UNSIGNED_INT, GL_INT,
GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2,
GL_UNSIGNED_BYTE_2_3_3_REV,
GL_UNSIGNED_SHORT_5_6_5,
GL_UNSIGNED_SHORT_5_6_5_REV,
GL_UNSIGNED_SHORT_4_4_4_4,
GL_UNSIGNED_SHORT_4_4_4_4_REV,
GL_UNSIGNED_SHORT_5_5_5_1,
GL_UNSIGNED_SHORT_1_5_5_5_REV,
GL_UNSIGNED_INT_8_8_8_8,
GL_UNSIGNED_INT_8_8_8_8_REV,
GL_UNSIGNED_INT_10_10_10_2, and
GL_UNSIGNED_INT_2_10_10_10_REV are
accepted.
_param5 Specifies a pointer to the pixel data.
DESCRIPTION
glDrawPixels reads pixel data from memory and writes it
into the frame buffer
relative to the current raster position, provided that the
raster position is valid. Use
glRasterPos to set the current raster position; use glGet
with argument GL_CURRENT_RASTER_POSITION_VALID to deter-
mine if the specified raster position is valid, and glGet
with argument GL_CURRENT_RASTER_POSITION to query the
raster position.
Several parameters define the encoding of pixel data in
memory and control the processing of the pixel data before
it is placed in the frame buffer. These parameters are
set with four commands: glPixelStore, glPixelTransfer,
GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1,
GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_10_10_10_2, each
unsigned value is interpreted as containing all the compo-
nents for a single pixel, with the color components
arranged according to _param3. When _param4 is one of
GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5_REV,
GL_UNSIGNED_SHORT_4_4_4_4_REV,
GL_UNSIGNED_SHORT_1_5_5_5_REV,
GL_UNSIGNED_INT_8_8_8_8_REV,
GL_UNSIGNED_INT_2_10_10_10_REV, each unsigned value is
interpreted as containing all color components, specified
by _param3, for a single pixel in a reversed order.
Indices are always treated individually. Color components
are treated as groups of one, two, three, or four values,
again based on _param3. Both individual indices and groups
of components are referred to as pixels. If _param4 is
GL_BITMAP, the data must be unsigned bytes, and _param3
must be either GL_COLOR_INDEX or GL_STENCIL_INDEX. Each
unsigned byte is treated as eight 1-bit pixels, with bit
ordering determined by GL_UNPACK_LSB_FIRST (see
glPixelStore).
_param1x_param2 pixels are read from memory, starting at
location _param5. By default, these pixels are taken from
adjacent memory locations, except that after all _param1
pixels are read, the read pointer is advanced to the next
four-byte boundary. The four-byte row alignment is speci-
fied by glPixelStore with argument GL_UNPACK_ALIGNMENT,
and it can be set to one, two, four, or eight bytes.
Other pixel store parameters specify different read
pointer advancements, both before the first pixel is read
and after all _param1 pixels are read. See the
glPixelStore reference page for details on these options.
The _param1x_param2 pixels that are read from memory are
each operated on in the same way, based on the values of
several parameters specified by glPixelTransfer and
glPixelMap. The details of these operations, as well as
the target buffer into which the pixels are drawn, are
specific to the of the pixels, as specified by _param3.
_param3 can assume one of 13 symbolic values:
GL_COLOR_INDEX
Each pixel is a single value, a color index. It
is converted to fixed-point , with an unspeci-
fied number of bits to the right of the binary
point, regardless of the memory data type.
Floating-point values convert to true fixed-
point values. Signed and unsigned integer data
is converted with all fraction bits set to 0.
Bitmap data convert to either 0 or 1.
table GL_PIXEL_MAP_I_TO_I. Whether the lookup
replacement of the index is done or not, the
integer part of the index is then ANDed with
2b-1, where b is the number of bits in a color
index buffer.
The GL then converts the resulting indices or
RGBA colors to fragments by attaching the cur-
rent raster position z coordinate and texture
coordinates to each pixel, then assigning x and
y window coordinates to the nth fragment such
that
xn=xr+nmod_eqnparam1
yn=yr+|n/_eqnparam1|
where (xr,yr) is the current raster position.
These pixel fragments are then treated just like
the fragments generated by rasterizing points,
lines, or polygons. Texture mapping, fog, and
all the fragment operations are applied before
the fragments are written to the frame buffer.
GL_STENCIL_INDEX
Each pixel is a single value, a stencil index.
It is converted to fixed-point , with an unspec-
ified number of bits to the right of the binary
point, regardless of the memory data type.
Floating-point values convert to true fixed-
point values. Signed and unsigned integer data
is converted with all fraction bits set to 0.
Bitmap data convert to either 0 or 1.
Each fixed-point index is then shifted left by
GL_INDEX_SHIFT bits, and added to
GL_INDEX_OFFSET. If GL_INDEX_SHIFT is negative,
the shift is to the right. In either case, zero
bits fill otherwise unspecified bit locations in
the result. If GL_MAP_STENCIL is true, the
index is replaced with the value that it refer-
ences in lookup table GL_PIXEL_MAP_S_TO_S.
Whether the lookup replacement of the index is
done or not, the integer part of the index is
then ANDed with 2b-1, where b is the number of
bits in the stencil buffer. The resulting sten-
cil indices are then written to the stencil
buffer such that the nth index is written to
location
xn=xr+nmod_eqnparam1
such that the most positive representable integer
value maps to 1.0, and the most negative repre-
sentable value maps to -1.0. Unsigned integer data
is mapped similarly: the largest integer value maps
to 1.0, and 0 maps to 0.0. The resulting floating-
point depth value is then multiplied by
GL_DEPTH_SCALE and added to GL_DEPTH_BIAS. The
result is clamped to the range [0,1].
The GL then converts the resulting depth components
to fragments by attaching the current raster posi-
tion color or color index and texture coordinates
to each pixel, then assigning x and y window coor-
dinates to the nth fragment such that
xn=xr+nmod_eqnparam1
yn=yr+|n/_eqnparam1|
where (xr,yr) is the current raster position.
These pixel fragments are then treated just like
the fragments generated by rasterizing points,
lines, or polygons. Texture mapping, fog, and all
the fragment operations are applied before the
fragments are written to the frame buffer.
GL_RGBA
GL_BGRA
Each pixel is a four-component group: for GL_RGBA,
the red component is first, followed by green, fol-
lowed by blue, followed by alpha; for GL_BGRA the
order is blue, green, red and then alpha. Float-
ing-point values are converted directly to an
internal floating-point
with unspecified precision. Signed integer values
are mapped linearly to the internal floating-point
such that the most positive representable integer
value maps to 1.0, and the most negative repre-
sentable value maps to -1.0. (Note that this map-
ping does not convert 0 precisely to 0.0.)
Unsigned integer data is mapped similarly: the
largest integer value maps to 1.0, and 0 maps to
0.0. The resulting floating-point color values are
then multiplied by GL_c_SCALE and added to
GL_c_BIAS, where c is RED, GREEN, BLUE, and ALPHA
for the respective color components. The results
are clamped to the range [0,1].
If GL_MAP_COLOR is true, each color component is
scaled by the size of lookup table
where (xr,yr) is the current raster position.
These pixel fragments are then treated just like
the fragments generated by rasterizing points,
lines, or polygons. Texture mapping, fog, and all
the fragment operations are applied before the
fragments are written to the frame buffer.
GL_RED Each pixel is a single red component. This compo-
nent is converted to the internal floating-point
in the same way the red component of an RGBA pixel
is. It is then converted to an RGBA pixel with
green and blue set to 0, and alpha set to 1. After
this conversion, the pixel is treated as if it had
been read as an RGBA pixel.
GL_GREEN
Each pixel is a single green component. This com-
ponent is converted to the internal floating-point
in the same way the green component of an RGBA
pixel is. It is then converted to an RGBA pixel
with red and blue set to 0, and alpha set to 1.
After this conversion, the pixel is treated as if
it had been read as an RGBA pixel.
GL_BLUE
Each pixel is a single blue component. This compo-
nent is converted to the internal floating-point
in the same way the blue component of an RGBA pixel
is. It is then converted to an RGBA pixel with red
and green set to 0, and alpha set to 1. After this
conversion, the pixel is treated as if it had been
read as an RGBA pixel.
GL_ALPHA
Each pixel is a single alpha component. This com-
ponent is converted to the internal floating-point
in the same way the alpha component of an RGBA
pixel is. It is then converted to an RGBA pixel
with red, green, and blue set to 0. After this
conversion, the pixel is treated as if it had been
read as an RGBA pixel.
GL_RGB
GL_BGR Each pixel is a three-component group: red first,
followed by green, followed by blue; for GL_BGR,
the first component is blue, followed by green and
then red. Each component is converted to the
internal floating-point in the same way the red,
green, and blue components of an RGBA pixel are.
The color triple is converted to an RGBA pixel with
Each pixel is a two-component group: luminance
first, followed by alpha. The two components are
converted to the internal floating-point in the
same way the red component of an RGBA pixel is.
They are then converted to an RGBA pixel with red,
green, and blue set to the converted luminance
value, and alpha set to the converted alpha value.
After this conversion, the pixel is treated as if
it had been read as an RGBA pixel.
The following table summarizes the meaning of the valid
constants for the type parameter:
------------------------------------------------------------------------------------------
Type Corresponding Type
------------------------------------------------------------------------------------------
GL_UNSIGNED_BYTE unsigned 8-bit integer
GL_BYTE signed 8-bit integer
GL_BITMAP single bits in unsigned 8-bit integers
GL_UNSIGNED_SHORT unsigned 16-bit integer
GL_SHORT signed 16-bit integer
GL_UNSIGNED_INT unsigned 32-bit integer
GL_INT 32-bit integer
GL_FLOAT single-precision floating-point
GL_UNSIGNED_BYTE_3_3_2 unsigned 8-bit integer
GL_UNSIGNED_BYTE_2_3_3_REV unsigned 8-bit integer with reversed component ordering
GL_UNSIGNED_SHORT_5_6_5 unsigned 16-bit integer
GL_UNSIGNED_SHORT_5_6_5_REV unsigned 16-bit integer with reversed component ordering
GL_UNSIGNED_SHORT_4_4_4_4 unsigned 16-bit integer
GL_UNSIGNED_SHORT_4_4_4_4_REV unsigned 16-bit integer with reversed component ordering
GL_UNSIGNED_SHORT_5_5_5_1 unsigned 16-bit integer
GL_UNSIGNED_SHORT_1_5_5_5_REV unsigned 16-bit integer with reversed component ordering
GL_UNSIGNED_INT_8_8_8_8 unsigned 32-bit integer
GL_UNSIGNED_INT_8_8_8_8_REV unsigned 32-bit integer with reversed component ordering
GL_UNSIGNED_INT_10_10_10_2 unsigned 32-bit integer
GL_UNSIGNED_INT_2_10_10_10_REV unsigned 32-bit integer with reversed component ordering
------------------------------------------------------------------------------------------
The rasterization described so far assumes pixel zoom fac-
tors of 1. If
glPixelZoom is used to change the x and y pixel zoom fac-
tors, pixels are converted to fragments as follows. If
(xr, yr) is the current raster position, and a given pixel
is in the nth column and mth row of the pixel rectangle,
then fragments are generated for pixels whose centers are
in the rectangle with corners at
(xr+zoomxn, yr+zoomym)
(xr+zoomx(n+1), yr+zoomy(m+1))
GL_UNSIGNED_INT_10_10_10_2, and
GL_UNSIGNED_INT_2_10_10_10_REV are only valid for _param4
if the GL version is 1.2 or greater.
ERRORS
GL_INVALID_VALUE is generated if either _param1 or _param2
is negative.
GL_INVALID_ENUM is generated if _param3 or _param4 is not
one of the accepted values.
GL_INVALID_OPERATION is generated if _param3 is GL_RED,
GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR,
GL_BGRA, GL_LUMINANCE, or GL_LUMINANCE_ALPHA, and the GL
is in color index mode.
GL_INVALID_ENUM is generated if _param4 is GL_BITMAP and
_param3 is not either GL_COLOR_INDEX or GL_STENCIL_INDEX.
GL_INVALID_OPERATION is generated if _param3 is
GL_STENCIL_INDEX and there is no stencil buffer.
GL_INVALID_OPERATION is generated if glDrawPixels is exe-
cuted between the execution of glBegin and the correspond-
ing execution of glEnd.
GL_INVALID_OPERATION is generated if _param3 is one
GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV,
GL_UNSIGNED_SHORT_5_6_5, of GL_UNSIGNED_SHORT_5_6_5_REV
and _param3 is not GL_RGB.
GL_INVALID_OPERATION is generated if _param3 is one of
GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV,
GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV,
GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV,
GL_UNSIGNED_INT_10_10_10_2, or
GL_UNSIGNED_INT_2_10_10_10_REV and _param3 is neither
GL_RGBA nor GL_BGRA.
ASSOCIATED GETS
glGet with argument GL_CURRENT_RASTER_POSITION
glGet with argument GL_CURRENT_RASTER_POSITION_VALID
SEE ALSO
glAlphaFunc, glBlendFunc, glCopyPixels, glDepthFunc,
glLogicOp, glPixelMap, glPixelStore, glPixelTransfer,
glPixelZoom, glRasterPos, glReadPixels, glScissor,
glStencilFunc
1