XXX - Not complete yet!!!

Name

    SGIX_vector_ops

Name Strings

    GL_SGIX_vector_ops

Version

    $Date: 1997/11/24 09:37:13 $ $Revision: 1.1 $

Number

    XXX

Dependencies

    OpenGL 1.1 is required.
    SGIX_fragment_light affects the definition of this extension.

Overview

    With the increased use of multi-pass algorithms depending on using
    more in-the-pipe calculations, it becomes interesting to provide
    additional support for some of the basic vector operations.
    This extension adds two new operations, the vector normalization
    function, and the vector cross-product operation.
    When enabled, vector normalization or cross-product is in lieu
    of the normal lighting.  In other words, the resulting vector replaces
    the lighted fragment color and the X, Y, and Z components comprise
    the red, green, and blue values of the fragment, respectively.  Alpha
    is set to zero.

Issues

    *	Should these two vector operations be separated into two
	independent specifications?


New Procedures and Functions

    void VectorOperationSGIX(enum operation);
    void GetVectorOperationSGIX(enum operation);

New Tokens

    Accepted by the <operation> parameter of VectorOperationSGIX
    and GetVectorOperationSGIX,

    VECTOR_NORMALIZATION_SGIX		0x????
    VECTOR_CROSS_PRODUCT_SGIX		0x????


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

    VECTOR_OPERATIONS_SGIX		0x????


Additions to the chapter on per fragment lighting

    When enabled, the vector operations supercede the usual operation
    of the per-fragment lighting.  Instead of the lighted fragment color,
    the color components produced by the fragment ligher are the three
    components of the vector operation specified by VectorOperationSGIX.

    The vector normal operation computes a new unit vector in the direction
    of the current per-fragment normal vector.	This normal vector is
    the result of interpolating the per-vertex supplied normal.

    The vector cross-product operation computed a new unit vector in
    the direction perpendicular to the per-fragment normal and view vectors
    using the standard cross-product operation.

Additions to Chapter 3 of the 1.1 Specification (Rasterization)

    None

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

    None

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

    None

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

    TBD

Additions to the GLX Specification

    TBD

Dependencies on SGIX_fragment_light

    If SGIX_fragment_light is not implemented, references to fragment
    lighting in this document are invalid and should be ignored.

Errors

    GL_INVALID_VALUE is generated if the requested vector operation is not
    one of VECTOR_NORMALIZATION_SGIX or VECTOR_CROSS_PRODUCT_SGIX.

New State

    Get Value			Get Command		Type	Initial Value	Attribute
    ---------			-----------		----	-------------	---------
    VECTOR_OPERATIONS_SGIX	GetVectorOperationfv	?????	?????		lighting

New Implementation Dependent State

    None
