GLDRAWPIXELS(3G) GLDRAWPIXELS(3G)
NAME
glDrawPixels - write a block of pixels to the frame buffer
C SPECIFICATION
void glDrawPixels( GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
const GLvoid *pixels )
PARAMETERS
width, height Specify the dimensions of the pixel rectangle to be writ-
ten into the frame buffer.
format Specifies the format of the pixel data. Symbolic con-
stants GLCOLORINDEX, GLSTENCILINDEX,
GLDEPTHCOMPONENT, GLRGB, GLBGR, GLRGBA, GLBGRA,
GLRED, GLGREN, GLBLUE, GLALPHA, GLUMINANCE, and
GLUMINANCEALPHA are accepted.
type Specifies the data type for pixels. Symbolic constants
GLUNSIGNEDBYTE, GLBYTE, GLBITMAP, GLUNSIGNEDSHORT,
GLSHORT, GLUNSIGNEDINT, GLINT, GLFLOAT,
GLUNSIGNEDBYTE332, GLUNSIGNEDBYTE233REV,
GLUNSIGNEDSHORT565, GLUNSIGNEDSHORT565REV,
GLUNSIGNEDSHORT4444, GLUNSIGNEDSHORT4444REV,
GLUNSIGNEDSHORT5551, GLUNSIGNEDSHORT1555REV,
GLUNSIGNEDINT8888, GLUNSIGNEDINT8888REV,
GLUNSIGNEDINT1001001002, and
GLUNSIGNEDINT2100100100REV are accepted.
pixels 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 posi-
tion is valid. Use
glRasterPos to set the current raster position; use glGet with argument
GLCURENTRASTERPOSITIONVALID to determine if the specified raster
position is valid, and glGet with argument GLCURENTRASTERPOSITION
to query the raster position.
Several parameters define the encoding of pixel data in memory and con-
trol the processing of the pixel data before it is placed in the frame
buffer. These parameters are set with four commands: glPixelStore,
glPixelTransfer, glPixelap, and glPixelZoom. This reference page
describes the effects on glDrawPixels of many, but not all, of the
parameters specified by these four commands.
Data is read from pixels as a sequence of signed or unsigned bytes,
signed or unsigned shorts, signed or unsigned integers, or single-pre-
cision floating-point values, depending on type. When type is one of
GLUNSIGNEDBYTE, GLBYTE, GLUNSIGNEDSHORT, GLSHORT,
GLUNSIGNEDINT, GLINT, or GLFLOAT each of these bytes, shorts, inte-
gers, or floating-point values is interpreted as one color or depth
component, or one index, depending on format. When type is one of
GLUNSIGNEDBYTE332, GLUNSIGNEDSHORT565,
GLUNSIGNEDSHORT4444, GLUNSIGNEDSHORT5551,
GLUNSIGNEDINT8888, GLUNSIGNEDINT1001001002, each unsigned
value is interpreted as containing all the components for a single
pixel, with the color components arranged according to format. When
type is one of GLUNSIGNEDBYTE233REV, GLUNSIGNEDSHORT565REV,
GLUNSIGNEDSHORT4444REV, GLUNSIGNEDSHORT1555REV,
GLUNSIGNEDINT8888REV, GLUNSIGNEDINT2100100100REV, each
unsigned value is interpreted as containing all color components, spec-
ified by format, 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 format. Both individual
indices and groups of components are referred to as pixels. If type is
GLBITMAP, the data must be unsigned bytes, and format must be either
GLCOLORINDEX or GLSTENCILINDEX. Each unsigned byte is treated as
eight 1-bit pixels, with bit ordering determined by GLUNPACKLSBFIRST
(see glPixelStore).
width * height pixels are read from memory, starting at location pix-
els. By default, these pixels are taken from adjacent memory loca-
tions, 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 glPixelStore with argument GLUNPACKALIGNMENT, and it
can be set to one, two, four, or eight bytes. Other pixel store param-
eters specify different read pointer advancements, both before the
first pixel is read and after all width pixels are read. See the
glPixelStore reference page for details on these options.
The width * height 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 glPixelap. 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 format. format can assume one
of 13 symbolic values:
GLCOLORINDEX
Each pixel is a single value, a color index. It is converted
to fixed-point , with an unspecified number of bits to the
right of the binary point, regardless of the memory data
type. Floating-point values convert to true fixed-point val-
ues. 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 GLINDEXSHIFT
bits and added to GLINDEXOFSET. If GLINDEXSHIFT is neg-
ative, the shift is to the right. In either case, zero bits
fill otherwise unspecified bit locations in the result.
If the GL is in RGBA mode, the resulting index is converted
to an RGBA pixel with the help of the GLPIXELMAPITOR,
GLPIXELMAPITOG, GLPIXELMAPITOB, and
GLPIXELMAPITOA tables. If the GL is in color index
mode, and if GLMAPCOLOR is true, the index is replaced with
the value that it references in lookup table
GLPIXELMAPITOI. Whether the lookup replacement of the
index is done or not, the integer part of the index is then
ANDed with (2^b) -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 current raster position z coordi-
nate and texture coordinates to each pixel, then assigning x
and y window coordinates to the nth fragment such that
xn = xr ] n mod width
yn = yr ] n/width
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.
GLSTENCILINDEX
Each pixel is a single value, a stencil index. It is con-
verted to fixed-point , with an unspecified number of bits to
the right of the binary point, regardless of the memory data
type. Floating-point values convert to true fixed-point val-
ues. 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 GLINDEXSHIFT
bits, and added to GLINDEXOFSET. If GLINDEXSHIFT is
negative, the shift is to the right. In either case, zero
bits fill otherwise unspecified bit locations in the result.
If GLMAPSTENCIL is true, the index is replaced with the
value that it references in lookup table GLPIXELMAPSTOS.
Whether the lookup replacement of the index is done or not,
the integer part of the index is then ANDed with (2^b)-1,
where b is the number of bits in the stencil buffer. The
resulting stencil indices are then written to the stencil
buffer such that the nth index is written to location
xn = xr ] n mod width
yn = yr ] n/width
where (xr , yr) is the current raster position. Only the pixel
ownership test, the scissor test, and the stencil writemask
affect these write operations.
GLDEPTHCOMPONENT
Each pixel is a single-depth component. Floating-point data is
converted directly to an internal floating-point
with unspecified precision. Signed integer data is mapped lin-
early to the internal floating-point
such that the most positive representable integer value maps to
1.0, and the most negative representable 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 GLDEPTHSCALE and added
to GLDEPTHBIAS. The result is clamped to the range [0,1].
The GL then converts the resulting depth components to fragments
by attaching the current raster position color or color index
and texture coordinates to each pixel, then assigning x and y
window coordinates to the nth fragment such that
xn = xr ] n mod width
yn = yr ] n/width
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.
GLRGBA
GLBGRA
Each pixel is a four-component group: for GLRGBA, the red com-
ponent is first, followed by green, followed by blue, followed
by alpha; for GLBGRA the order is blue, green, red and then
alpha. Floating-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 representable value maps to -1.0.
(Note that this mapping 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 GLcSCALE and added
to GLcBIAS, where c is RED, GREN, BLUE, and ALPHA for the
respective color components. The results are clamped to the
range [0,1].
If GLMAPCOLOR is true, each color component is scaled by the
size of lookup table GLPIXELMAPcTOc, then replaced by the
value that it references in that table. c is R, G, B, or A
respectively.
The GL then converts the resulting RGBA colors to fragments by
attaching the current raster position z coordinate and texture
coordinates to each pixel, then assigning x and y window coordi-
nates to the nth fragment such that
xn = xr ] n mod width
yn = yr ] n/width
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.
GLRED Each pixel is a single red component. This component is con-
verted 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.
GLGREN
Each pixel is a single green component. This component is con-
verted 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.
GLBLUE
Each pixel is a single blue component. This component is con-
verted 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.
GLALPHA
Each pixel is a single alpha component. This component is con-
verted 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 conver-
sion, the pixel is treated as if it had been read as an RGBA
pixel.
GLRGB
GLBGR Each pixel is a three-component group: red first, followed by
green, followed by blue; for GLBGR, the first component is
blue, followed by green and then red. Each component is con-
verted 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 alpha set to 1. After
this conversion, the pixel is treated as if it had been read as
an RGBA pixel.
GLUMINANCE
Each pixel is a single luminance component. This component 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 red, green, and blue set to the converted lumi-
nance value, and alpha set to 1. After this conversion, the
pixel is treated as if it had been read as an RGBA pixel.
GLUMINANCEALPHA
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
GLUNSIGNEDBYTE unsigned 8-bit integer
GLBYTE signed 8-bit integer
GLBITMAP single bits in unsigned 8-bit integers
GLUNSIGNEDSHORT unsigned 16-bit integer
GLSHORT signed 16-bit integer
GLUNSIGNEDINT unsigned 32-bit integer
GLINT 32-bit integer
GLFLOAT single-precision floating-point
GLUNSIGNEDBYTE332
unsigned 8-bit integer
GLUNSIGNEDBYTE233REV
unsigned 8-bit integer with
reversed component ordering
GLUNSIGNEDSHORT565
unsigned 16-bit integer
GLUNSIGNEDSHORT565REV
unsigned 16-bit integer with
reversed component ordering
GLUNSIGNEDSHORT4444
unsigned 16-bit integer
GLUNSIGNEDSHORT4444REV
unsigned 16-bit integer with
reversed component ordering
GLUNSIGNEDSHORT5551
unsigned 16-bit integer
GLUNSIGNEDSHORT1555REV
unsigned 16-bit integer with
reversed component ordering
GLUNSIGNEDINT8888
unsigned 32-bit integer
GLUNSIGNEDINT8888REV
unsigned 32-bit integer with
reversed component ordering
GLUNSIGNEDINT1001001002
unsigned 32-bit integer
GLUNSIGNEDINT2100100100REV
unsigned 32-bit integer with
reversed component ordering
The rasterization described so far assumes pixel zoom factors of 1. If
glPixelZoom is used to change the x and y pixel zoom factors, 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 cen-
ters are in the rectangle with corners at
( xr ] zoomx * n, yr ] zoomy *m)
( xr ] zoomx * (n]1), yr ] zoomy *(m]1))
where zoomx is the value of GLZOMX and zoomy is the value of
GLZOMY.
NOTES
GLBGR and GLBGRA are only valid for format if the GL version is 1.2
or greater.
GLUNSIGNEDBYTE332, GLUNSIGNEDBYTE233REV,
GLUNSIGNEDSHORT565, GLUNSIGNEDSHORT565REV,
GLUNSIGNEDSHORT4444, GLUNSIGNEDSHORT4444REV,
GLUNSIGNEDSHORT5551, GLUNSIGNEDSHORT1555REV,
GLUNSIGNEDINT8888, GLUNSIGNEDINT8888REV,
GLUNSIGNEDINT1001001002, and GLUNSIGNEDINT2100100100REV are only
valid for type if the GL version is 1.2 or greater.
ERORS
GLINVALIDVALUE is generated if either width or height is negative.
GLINVALIDENUM is generated if format or type is not one of the
accepted values.
GLINVALIDOPERATION is generated if format is GLRED, GLGREN,
GLBLUE, GLALPHA, GLRGB, GLRGBA, GLBGR, GLBGRA, GLUMINANCE, or
GLUMINANCEALPHA, and the GL is in color index mode.
GLINVALIDENUM is generated if type is GLBITMAP and format is not
either GLCOLORINDEX or GLSTENCILINDEX.
GLINVALIDOPERATION is generated if format is GLSTENCILINDEX and
there is no stencil buffer.
GLINVALIDOPERATION is generated if glDrawPixels is executed between
the execution of glBegin and the corresponding execution of glEnd.
GLINVALIDOPERATION is generated if format is one
GLUNSIGNEDBYTE332, GLUNSIGNEDBYTE233REV,
GLUNSIGNEDSHORT565, of GLUNSIGNEDSHORT565REV and format is
not GLRGB.
GLINVALIDOPERATION is generated if format is one of
GLUNSIGNEDSHORT4444, GLUNSIGNEDSHORT4444REV,
GLUNSIGNEDSHORT5551, GLUNSIGNEDSHORT1555REV,
GLUNSIGNEDINT8888, GLUNSIGNEDINT8888REV,
GLUNSIGNEDINT1001001002, or GLUNSIGNEDINT2100100100REV and for-
mat is neither GLRGBA nor GLBGRA.
ASOCIATED GETS
glGet with argument GLCURENTRASTERPOSITION
glGet with argument GLCURENTRASTERPOSITIONVALID
SEE ALSO
glAlphaFunc, glBlendFunc, glCopyPixels, glDepthFunc, glLogicOp,
glPixelap, glPixelStore, glPixelTransfer, glPixelZoom, glRasterPos,
glReadPixels, glScissor, glStencilFunc
GLDRAWPIXELS(3G)
|