XXX - Not complete yet!!!

Name

        SGIX_shadow

Name Strings

        GL_SGIX_shadow

Version

        $Date: 1997/08/27 19:54:45 $ $Revision: 1.15 $

Number

        34

Dependencies

        None.

Overview

        This extension defines two new operations to be performed on texture
        values before they are passed on to the filtering subsystem.  These
        operations perform either a <= or >= test on the value from texture
        memory and the iterated R value, and return 1.0 or 0.0 if the test
        passes or fails, respectively.
        
New Procedures and Functions

        None

New Tokens

        Accepted by the <pname> parameter of TexParameterf, TexParameteri,
        TexParameterfv, TexParameteriv, GetTexParameterfv, and
        GetTexParameteriv, with the <pname> parameter of TRUE or FALSE:

        TEXTURE_COMPARE_SGIX

        Accepted by the <pname> parameter of TexParameterf, TexParameteri,
        TexParameterfv, TexParameteriv, GetTexParameterfv, and
        GetTexParameteriv:

        TEXTURE_COMPARE_OPERATOR_SGIX

        Accepted by the <param> parameter of TexParameterf and TexParameteri,
        and by the <params> parameter of TexParameterfv and TexParameteriv,
        when their <pname> parameter is TEXTURE_COMPARE_OPERATOR_SGIX:

        TEXTURE_LEQUAL_R_SGIX
        TEXTURE_GEQUAL_R_SGIX

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)

        None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

        XXX - lots

        GL Specification Table 3.8 is updated as follows:

        Name                            Type            Legal Values
        ----                            ----            ------------
        TEXTURE_WRAP_S                  integer         CLAMP, REPEAT
        TEXTURE_WRAP_T                  integer         CLAMP, REPEAT
        TEXTURE_WRAP_R_EXT              integer         CLAMP, REPEAT
        TEXTURE_MIN_FILTER              integer         NEAREST, LINEAR,
                                                        NEAREST_MIPMAP_NEAREST,
                                                        NEAREST_MIPMAP_LINEAR,
                                                        LINEAR_MIPMAP_NEAREST,
                                                        LINEAR_MIPMAP_LINEAR,
                                                        FILTER4_SGIS,
                                                        LINEAR_CLIPMAP_LINEAR_SGIX
        TEXTURE_MAG_FILTER              integer         NEAREST, LINEAR,
                                                        FILTER4_SGIS,
                                                        LINEAR_DETAIL_SGIS,
                                                        LINEAR_DETAIL_ALPHA_SGIS,
                                                        LINEAR_DETAIL_COLOR_SGIS,
                                                        LINEAR_SHARPEN_SGIS,
                                                        LINEAR_SHARPEN_ALPHA_SGIS,
                                                        LINEAR_SHARPEN_COLOR_SGIS,
        TEXTURE_BORDER_COLOR            4 floats        any 4 values in [0,1]
        DETAIL_TEXTURE_LEVEL_SGIS       integer         any non-negative integer
        DETAIL_TEXTURE_MODE_SGIS        integer         ADD, MODULATE
        TEXTURE_MIN_LOD_SGIS            float           any value
        TEXTURE_MAX_LOD_SGIS            float           any value
        TEXTURE_BASE_LEVEL_SGIS         integer         any non-negative integer
        TEXTURE_MAX_LEVEL_SGIS          integer         any non-negative integer
        GENERATE_MIPMAP_SGIS            boolean         TRUE or FALSE
        TEXTURE_CLIPMAP_OFFSET_SGIX     2 floats        any 2 values
        TEXTURE_COMPARE_SGIX            boolean         TRUE or FALSE
        TEXTURE_COMPARE_OPERATOR_SGIX   integer         TEXTURE_LEQUAL_R_SGIX,
                                                        TEXTURE_GEQUAL_R_SGIX

        Table 3.8: Texture parameters and their values.

        Notes:

        * Two new texture operators are defined which alter the sampled texture
        values before they are filtered.  These operators are defined only for
        textures with internal format DEPTH_COMPONENT or DEPTH_COMPONENTS*_SGI.

        * The new operators compare the sample texel value to the value of the
        third texture coordinate, R.  The texture components are treated as though
        they range from 0.0 through 1.0.  The value of the test is zero if the
        test fails, and one if it passes.

        * The test for operator TEXTURE_LEQUAL_R_SGIX passes if the texel value
        is less than or equal to R.      The test for operator TEXTURE_GEQUAL_R_SGIX
        passes if the texel value is greater than or equal to R.

        * The modified texels (with value 0.0 or 1.0 depending on
        the test result) are treated as if the texture internal format
        were LUMINANCE.

Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Frame Buffer)

        None

Additions to Chapter 5 of the 1.0 Specification (Special Functions)

        None

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

        The texture compare operator is queried by calling GetTexParameteriv
        and GetTexParameterfv with <pname> set to
        TEXTURE_COMPARE_OPERATOR_SGIX.  Texture compare enable/disable state
        is queried by calling GetTexParameteriv or GetTexParameterif with
        <pname> TEXTURE_COMPARE_SGIX.
        
Additions to the GLX Specification

        None

Errors

        INVALID_OPERATION is generated if TexParameter[if] parameter <pname>
        is TEXTURE_COMPARE_OPERATOR_SGIX and parameter <param> is not
        TEXTURE_LEQUAL_R_SGIX,or TEXTURE_GEQUAL_R_SGIX.

New State

Get Value                       Get Command             Type    Initial Value           Attribute
---------                       -----------             ----    -------------           ---------
TEXTURE_COMPARE_SGIX            GetTexParameter[if]v    B       False                   texture
TEXTURE_COMPARE_OPERATOR_SGIX   GetTexParameter[if]v    Z_2     TEXTURE_LEQUAL_R_SGIX   texture
        

New Implementation Dependent State

        None

NVIDIA Implementation Details

        The specification is unclear if the R texture coordinate is
        clamped to the range [0,1].  NVIDIA hardware supporting this
        extension does clamp the R texture coordinate to the range [0,1]
        on a per-fragment basis.

        The behavior of the NV_register_combiners SIGNED_NEGATE_NV mapping
        mode is undefined when used to map the initial value of a texture
        register corresponding to an enabled texture with a base internal
        format of GL_DEPTH_COMPONENT and a true TEXTURE_COMPARE_SGIX
        mode when multiple enabled textures have different values for
        TEXTURE_COMPARE_OPERATOR_SGIX.  Values subsequently assigned to
        such registers and then mapped with SIGNED_NEGATIE_NV operate
        as expected.
