- 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