XXX - Not complete yet!!!  But pretty close.

Name

    SGIX_blend_alpha_minmax

Name Strings

    GL_SGIX_blend_alpha_minmax

Version

    $Date: 1998/03/31 00:55:21 $ $Revision: 1.3 $

Number

    119

Dependencies

    EXT_blend_minmax is required
    EXT_blend_subtract affects the number of values of BLEND_EQUATION_EXT

Overview

    Two additional blending equations are specified using the interface
    defined by EXT_blend_minmax.  These equations are similar to the
    MIN_EXT and MAX_EXT blending equations, but the outcome for all four
    color components is determined by a comparison of just the alpha
    component's source and destination values.  These equations are useful
    in image processing and advanced shading algorithms.
    
New Procedures and Functions

    None

New Tokens

    Accepted by the <mode> parameter of BlendEquationEXT:

	ALPHA_MIN_SGIX			 0x8320
	ALPHA_MAX_SGIX			 0x8321

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

    None

Additions to Chapter 3 of the GL Specification (Rasterization)

    None

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

    Two additional blending equations are defined.  If BlendEquationEXT is
    called with <mode> set to ALPHA_MIN_EXT, the blending equation becomes

	      /  Cs	As <  Ad
	C' = (
	      \  Cd     As >= Ad

    where C' is the color resulting from the blending operation,
    Cs and Cd are the source and destination colors, and As and Ad
    are the source and destination alpha in particular.

    If BlendEquationEXT is called with <mode> set to ALPHA_MAX_SGIX, the
    blending equation becomes

	      /  Cs	As >  Ad
	C' = (
	      \  Cd     As <= Ad

    In both cases the blending equation is evaluated separately for each
    color component in a quadruplet.

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

    None

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

    None

Additions to the GLX Specification

    None

GLX Protocol

    None

Dependencies on EXT_blend_minmax

    EXT_blend_minmax is required.

Errors

    INVALID_ENUM is generated by BlendEquationEXT if its single parameter
    is not FUNC_ADD_EXT, MIN_EXT, MAX_EXT, FUNC_SUBTRACT_EXT,
    FUNC_REVERSE_SUBTRACT_EXT, ALPHA_MIN_SGIX, or ALPHA_MAX_SGIX.

    INVALID_OPERATION is generated if BlendEquationEXT is executed between
    the execution of Begin and the corresponding execution to End.

New State

    Two new values of BLEND_EQUATION_EXT:

    Get Value		Get Command	Type	Initial Value	Attribute
    ---------		-----------	----	-------------	---------
    BLEND_EQUATION_EXT	GetIntegerv	Z7	FUNC_ADD_EXT	color-buffer

New Implementation Dependent State

    None
