Back to the OpenGL extension cross reference
WGL_ATI_pixel_format_float
    WGL_ATI_pixel_format_float
Name Strings
    WGL_ATI_pixel_format_float
Contact
    Rob Mace, ATI Research (mace 'at' ati.com)
Status
    Complete.
Version
    Last Modified Date: December 4, 2002
    Revision: 5
Number
    278
Dependencies
    WGL_ARB_pixel_format is required.
    This extension is written against the OpenGL 1.3 Specification.
Overview
    This extension adds pixel formats with floating-point RGBA color
    components.
    The size of each float components is specified using the same
    WGL_RED_BITS_ARB, WGL_GREEN_BITS_ARB, WGL_BLUE_BITS_ARB and
    WGL_ALPHA_BITS_ARB pixel format attributes that are used for
    defining the size of fixed-point components.  32 bit floating-
    point components are in the standard IEEE float format.  16 bit
    floating-point components have 1 sign bit, 5 exponent bits,
    and 10 mantissa bits. 
    In standard OpenGL RGBA color components are normally clamped to
    the range [0,1].  The color components of a float buffer are
    clamped to the limits of the range representable by their format.
Issues
    1. Should we expose a GL_FLOAT16_ATI pixel type?
       RESOLUTION:  This will be exposed in a separate extension.
   None
    Accepted by the <pname> parameters of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:
        RGBA_FLOAT_MODE_ATI                     0x8820
        COLOR_CLEAR_UNCLAMPED_VALUE_ATI         0x8835
    Accepted as a value in the <piAttribIList> and <pfAttribFList>
    parameter arrays of wglChoosePixelFormatARB, and returned in the
    <piValues> parameter array of wglGetPixelFormatAttribivARB, and the
    <pfValues> parameter array of wglGetPixelFormatAttribfvARB:
        WGL_TYPE_RGBA_FLOAT_ATI                 0x21A0
Additions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL
Operation)
    Add a new Section 2.1.2, (p. 6):
      2.1.2  16 Bit Floating-Point
      A 16 bit floating-point number has 1 sign bit (s), 5 exponent
      bits (e), and 10 mantissa bits (m).  The value (v) of a 16 bit
      floating-point number is determined by the following pseudo code:
        if (e != 0)
            v = (-1)^s * 2^(e-15) * 1.m  # normalized
        else if (f == 0)
            v = (-1)^s * 0               # zero
        else
            v = (-1)^s * 2^(e-14) * 0.m  # denormalized
      It is acceptable for an implementation to treat denormalized 16 bit
      floating-point numbers as zero.
      There are no NAN or infinity values for 16 bit floating-point.
Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization)
    Section 3.6.4, (p. 92), Add to figure 3.7 a block to "final
    conversion" for "RGBA float pixel data out" that says "clamp
    to float format range".
    Section 3.6.4, (p. 102), change the first paragraph of the "Final
    Conversion" to:
      For a color index, final conversion consists of masking the bits
      of the index to the left of the binary point by 2^n - 1, where n
      is the number of bits in an index buffer.  For RGBA components the
      conversion is based on whether the components in the destination
      color buffer are fixed-point or floating-point. For fixed-point
      destination buffers components are clamped to [0,1]. The resulting
      values are converted to fixed-point according to the rules given in
      section 2.13.9 (Final Color Processing).  For floating-point
      destination buffers components are clamped to the limits of the
      range representable by the destination format.
Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment
Operations and the Frame Buffer)
    Chapter 4 Introduction, (p. 156), change the first line of the third
    paragraph to:
      Color buffers consist of either unsigned integer color indices,
      RGB and optionally A unsigned integer values, of RGBA floating-
      point values.
    Section 4.1.7, (p. 162), change the third paragraph of the page to:
      Fixed-point destination (framebuffer) components and source
      (fragment) components are taken to be values represented according
      to the scheme given in section 2.13.9 (Final Color Processing).
      Floating-point destination and source components are taken as is.
      Constant color components are taken to be floating-point values.
    Section 4.1.7, (p. 163), change the forth line of the second paragraph
    of "Using BlendFunc" to:
      If destination color components are fixed-point, each floating-
      point value in this quadruplet is clamped to [0,1] and converted
      back to a fixed-point value in the manner described in section
      2.13.9.
    Section 4.1.8, (p. 165), insert after the first sentence:
      Dithering has no effect if the destination color buffer components
      are floating-point.
    Section 4.1.9, (p. 165), insert after the first sentence:
      Logical operation has no effect if the destination color buffer
      components are floating-point.
    Section 4.2.3, (p. 170), change the third paragraph to:
          void ClearColor(float r, float g, float b, float a);
 
      sets the clear value for the color buffers in RGBA mode.  When
      clearing a fixed-point color buffer each of the specified
      components is clamped to [0; 1] and converted to fixed-point
      according to the rules of section 2.13.9.  When clearing a
      floating-point color buffer the specified components are not
      clamped.
    Section 4.3.2, (p. 176), change the "Conversion of RGBA values" to:
      This step applies only if the GL is in RGBA mode, and then only
      if format is neither STENCIL INDEX nor DEPTH COMPONENT.  The R,
      G, B, and A values form a group of elements.  When reading from a
      fixed-point color buffer each element is taken to be a fixed-point
      value in [0; 1] with m bits, where m is the number of bits in the
      corresponding color component of the selected buffer (see
      section 2.13.9).
    Section 4.3.2, (p. 177), change the second paragraph of the "Final
    Conversion" to:
      For a fixed-point RGBA color buffer, each component is first
      clamped to [0,1].  For floating-point RGBA color buffer, components
      are not clamped if the <type> is FLOAT, clamped to [0,1] if the
      <type> is unsigned, and clamped to [-1,1] if the <type> is signed.
      After clamping the appropriate conversion formula from table 4.7
      is applied to the component.
Additions to Chapter 5 of the OpenGL 1.3 Specification (Special 
Functions)
    None
Additions to Chapter 6 of the OpenGL 1.3 Specification (State and
State Requests)
    None
Additions to the GLX Specification
    This specification is written for WGL.
GLX Protocol
    This specification is written for WGL.
Additions to the WGL Specification
    Modify the values accepted by WGL_PIXEL_TYPE_ARB to:
        WGL_PIXEL_TYPE_ARB
        The type of pixel data. This can be set to WGL_TYPE_RGBA_ARB,
        WGL_TYPE_RGBA_FLAOT_ARB, or WGL_TYPE_COLORINDEX_ARB.
Dependencies on WGL_ARB_pixel_format
    The WGL_ARB_pixel_format extension must be used to determine a
    pixel format with float components.
Dependencies on WGL_ARB_extensions_string
    Because this extension is a WGL extension, it is not included in
    the GL_EXTENSIONS string.  Its existence can be determined with
    the WGL_ARB_extensions_string extension.
Errors
  
    None
New State
    (table 6.19, p227) modify COLOR_CLEAR_VALUE and add
    COLOR_CLEAR_UNCLAMPED_VALUE:
    Get Value                        Type   Get Command  Initial Value  Description         Section  Attribute
    -------------------------------  -----  -----------  -------------  ------------------  -------  ------------
    COLOR_CLEAR_VALUE                C      GetFloatv    0,0,0,0        Color buffer clear  4.2.3    color-buffer
                                                                        value (RGBA mode)
                                                                        clamped to [0,1]
    COLOR_CLEAR_UNCLAMPED_VALUE_ATI  4 x R  GetFloatv    0,0,0,0        Color buffer clear  4.2.3    color-buffer
                                                                        value (RGBA mode)
                                                                        unclamped
    (table 6.28, p236) add the following entry:
    Get Value             Type   Get Command   Minimum Value  Description      Section   Attribute
    --------------------  -----  ------------  -------------  ---------------  --------  ----------
    RGBA_FLOAT_MODE_ATI   B      GetBooleanv   -              True if RGBA     2.7       -
                                                              components are
                                                              floats
New Implementation Dependent State
    None
Revision History
   Date: 12/4/2002
   Revision: 5
      - Added Section 2.1.2 16 Bit Floating-Point.
   Date: 9/12/2002
   Revision: 4
      - Fixed typo, CLEAR_COLOR_VALUE is really COLOR_CLEAR_VALUE.
   Date: 9/11/2002
   Revision: 3
      - Added enum numbers to New Tokens.
      - Added CLEAR_COLOR_UNCLAMPED_VALUE_ATI and defined behavior of
        CLEAR_COLOR_VALUE.
      - Added description of change to figure 3.7.
      - Clarified float clamping in section 3.6.4.
   Date: 9/9/2002
   Revision: 2
      - Changed wording of how float clamping is described in Overview.
   Date: 9/6/2002
   Revision: 1
      - First draft for circulation.
Implementation Support
   List of OpenGL implementations supporting the WGL_ATI_pixel_format_float extension
Original File
   Original text file for the WGL_ATI_pixel_format_float extension
Page generated on Sun Nov 20 18:40:34 2005