Name

    INGR_color_clamp

Name Strings

    GL_INGR_color_clamp

Version

    Date: 9/28/1998  Version 1.1

Number

    174

Dependencies

    None

Overview

    Various RGBA color space conversions require clamping to values
    in a more constrained range than [0, 1].  This extension allows
    the definition of independent color clamp values for each of the
    four color components as part of the Final Conversion in the pixel
    transfer path for draws, reads, and copies.

New Procedures and Functions

    None

New Tokens

    Accepted by the <pname> parameter of PixelTransferf and
    PixelTransferi:

        RED_MIN_CLAMP_INGR                  0x8560
        GREEN_MIN_CLAMP_INGR                0x8561
        BLUE_MIN_CLAMP_INGR                 0x8562
        ALPHA_MIN_CLAMP_INGR                0x8563
        RED_MAX_CLAMP_INGR                  0x8564
        GREEN_MAX_CLAMP_INGR                0x8565
        BLUE_MAX_CLAMP_INGR                 0x8566
        ALPHA_MAX_CLAMP_INGR                0x8567

    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:

        RED_MIN_CLAMP_INGR                  0x8560
        GREEN_MIN_CLAMP_INGR                0x8561
        BLUE_MIN_CLAMP_INGR                 0x8562
        ALPHA_MIN_CLAMP_INGR                0x8563
        RED_MAX_CLAMP_INGR                  0x8564
        GREEN_MAX_CLAMP_INGR                0x8565
        BLUE_MAX_CLAMP_INGR                 0x8566
        ALPHA_MAX_CLAMP_INGR                0x8567

Additions to Chapter 2 of the 1.2 GL Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.2 GL Specification (Rasterization)

    Pixel Transfer Modes   [Add to Table 3.2]

        Parameter Name         Type   Initial Value   Valid Range
     -------------------------------------------------------------
      RED_MIN_CLAMP_INGR       float       0.0          0.0, 1.0
      GREEN_MIN_CLAMP_INGR     float       0.0          0.0, 1.0
      BLUE_MIN_CLAMP_INGR      float       0.0          0.0, 1.0
      ALPHA_MIN_CLAMP_INGR     float       0.0          0.0, 1.0
      RED_MAX_CLAMP_INGR       float       1.0          0.0, 1.0
      GREEN_MAX_CLAMP_INGR     float       1.0          0.0, 1.0
      BLUE_MAX_CLAMP_INGR      float       1.0          0.0, 1.0
      ALPHA_MAX_CLAMP_INGR     float       1.0          0.0, 1.0


    Final Conversion

    For RGBA components, each element is clamped to the range
    specified by [*_MIN_CLAMP_INGR, *_MAX_CLAMP_INGR].  The results
    are converted to fixed-point according to the rules given in
    section 2.13.9 (Final Color Processing).  If *_MIN_CLAMP_INGR
    is greater than *_MAX_CLAMP_INGR, then the behavior is
    implementation dependent.

Additions to Chapter 4 of the 1.2 GL Specification (Per-Fragment Operations
and the Framebuffer)

    Final Conversion

    For RGBA components, each element is clamped to the range
    specified by [*_MIN_CLAMP_INGR, *_MAX_CLAMP_INGR].  Then the
    appropriate conversion formula from table 4.7 is applied to
    the component.  If *_MIN_CLAMP_INGR is greater than
    *_MAX_CLAMP_INGR, then the behavior is implementation dependent.


Additions to Chapter 5 of the 1.2 GL Specification (Special Functions)

    None

Additions to Chapter 6 of the 1.2 GL Specification (State and State Requests)

    The state required is eight floating-point numbers that are the
    red, green, blue, and alpha minimum and maximum clamp values.
    The initial value for the minimum clamp values is 0.0.  The
    initial state for the maximum clamp values is 1.0.

Additions to the GLX Specification

    None

GLX Protocol

    None

Errors

    None

New State

                                                      Initial
    Get Value                  Get Command    Type     Value   Attribute
    ------------------------   -----------   -------  -------  ----------
    RED_MIN_CLAMP_INGR          GetFloatv     R[0,1]     0.0      pixel
    GREEN_MIN_CLAMP_INGR        GetFloatv     R[0,1]     0.0      pixel
    BLUE_MIN_CLAMP_INGR         GetFloatv     R[0,1]     0.0      pixel
    ALPHA_MIN_CLAMP_INGR        GetFloatv     R[0,1]     0.0      pixel
    RED_MAX_CLAMP_INGR          GetFloatv     R[0,1]     1.0      pixel
    GREEN_MAX_CLAMP_INGR        GetFloatv     R[0,1]     1.0      pixel
    BLUE_MAX_CLAMP_INGR         GetFloatv     R[0,1]     1.0      pixel
    ALPHA_MAX_CLAMP_INGR        GetFloatv     R[0,1]     1.0      pixel

New Implementation Dependent State

    None
