Name

    SGIX_fog_blend_alpha
    SGIX_fog_blend_color

Name Strings

    GL_SGIX_fog_blend

Version

    $Date: 1997/09/15 19:26:36 $ $Revision: 1.3 $

Number

        ????

Dependencies

        XXX

Overview

    This extension affect the way the fog coefficient (f) is used to
    blend the rasterized fragments in non-indexed color mode. 
    When enabled using the GL_FOG_BLEND_ALPHA_SGIX parameter, 
    the alpha component of the fog color is used to change the
    resulting alpha, as well as the RGB components. 
    The color components may stay unchanged by the fog computation
    if the GL_FOG_BLEND_COLOR_SGIX is disabled.
    No change is done to the equation C = f*Cr + (1-f)Cf


New Procedures and Functions

    None

New Tokens

    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled

        GL_FOG_BLEND_ALPHA_SGIX		0x81FE
        GL_FOG_BLEND_COLOR_SGIX		0x81FF

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

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)


    3.9 Fog

    ... (The rasterized fragment's A value is not changed by fog blending.)...
    is removed and replaced by.

    The rasterized fragment alpha value is not changed by the fog blending,
    unless specified otherwise by enabling it with the GL_FOG_BLEND_ALPHA_SGIX
    parameter. Color modifications can be turned off by disabling with
    the GL_FOG_BLEND_COLOR_SGIX paramater.



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

    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)

    Fog alpha blend enable/disable state is checked by calling glIsEnable
    function with GL_FOG_BLEND_ALPHA_SGIX parameter.
    Fog color blend enable/disable state is checked by calling glIsEnable
    function with GL_FOG_BLEND_COLOR_SGIX parameter.

    When PushAttrib is called with FOG_BIT enabled, the state of the
    fog color and alpha blend is pushed. When an attribute set
    that includes enable information is popped, the state of the fog
    color and alpha blend is restored to the pushed value.

Additions to the GLX Specification

    None

Errors

    None

New State

    Get Value                   Get Command             Type            Initial Value   Attribute
    ---------                   -----------             ----            -------------   ---------
    FOG_BLEND_ALPHA_SGIX             IsEnabled           B                 FALSE           fog
    FOG_BLEND_COLOR_SGIX             IsEnabled           B                 TRUE            fog


New Implementation Dependent State

    None

