Name

    PGI_vertex_hints

Name Strings

    GL_PGI_vertex_hints

Version

    $Date: 1996/04/22 23:24:19 $ $Revision: 1.1 $

Number

    76

Dependencies

    None

Overview

    The extension allows the app to give hints regarding what kinds of
    OpenGL function calls will happen between Begin/End pairs.

New Procedures and Functions

    None

New Tokens

    Accepted by the <target> parameters of Hint and HintPGI:

        VERTEX_DATA_HINT_PGI               107050
        VERTEX_CONSISTENT_HINT_PGI         107051
        MATERIAL_SIDE_HINT_PGI             107052
        MAX_VERTEX_HINT_PGI                107053

    Accepted by the <mode> parameters of Hint and HintPGI:

        COLOR3_BIT_PGI                  0x00010000
        COLOR4_BIT_PGI                  0x00020000
        EDGEFLAG_BIT_PGI                0x00040000
        INDEX_BIT_PGI                   0x00080000
        MAT_AMBIENT_BIT_PGI             0x00100000
        MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
        MAT_DIFFUSE_BIT_PGI             0x00400000
        MAT_EMISSION_BIT_PGI            0x00800000
        MAT_COLOR_INDEXES_BIT_PGI       0x01000000
        MAT_SHININESS_BIT_PGI           0x02000000
        MAT_SPECULAR_BIT_PGI            0x04000000
        NORMAL_BIT_PGI                  0x08000000
        TEXCOORD1_BIT_PGI               0x10000000
        TEXCOORD2_BIT_PGI               0x20000000
        TEXCOORD3_BIT_PGI               0x40000000
        TEXCOORD4_BIT_PGI               0x80000000
        VERTEX23_BIT_PGI                0x00000004
        VERTEX4_BIT_PGI                 0x00000008

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

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    None

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)

    Functions Hint and HintPGI accept the following targets and modes:

    [All hints are subject to Push/Pop with the HINT_BIT attributes.]

    <target> = VERTEX_DATA_HINT_PGI

    This hint indicates which GL calls might occur between Begin/End pairs.
    If <mode> is any of FALSE, then the hint is "disabled" -- this means
    the application is not making any predictions about which GL calls
    might occur between Begin/End pairs.  Otherwise, <mode> must be a
    bitwise OR of the following bits:

        COLOR3_BIT_PGI                     Color3*
        COLOR4_BIT_PGI                     Color4*
        EDGEFLAG_BIT_PGI                   EdgeFlag*
        INDEX_BIT_PGI                      Index*
        MAT_AMBIENT_BIT_PGI                Material*(pname=AMBIENT)
        MAT_AMBIENT_AND_DIFFUSE_BIT_PGI    Material*(pname=AMBIENT_AND_DIFFUSE)
        MAT_DIFFUSE_BIT_PGI                Material*(pname=DIFFUSE)
        MAT_EMISSION_BIT_PGI               Material*(pname=EMISSION)
        MAT_COLOR_INDEXES_BIT_PGI          Material*(pname=COLOR_INDEXES)
        MAT_SHININESS_BIT_PGI              Material*(pname=SHININESS)
        MAT_SPECULAR_BIT_PGI               Material*(pname=SPECULAR)
        NORMAL_BIT_PGI                     Normal*
        TEXCOORD1_BIT_PGI                  TexCoord1*
        TEXCOORD2_BIT_PGI                  TexCoord2*
        TEXCOORD3_BIT_PGI                  TexCoord3*
        TEXCOORD4_BIT_PGI                  TexCoord4*
        VERTEX23_BIT_PGI                   Vertex[23]*
        VERTEX4_BIT_PGI                    Vertex4

    At least one of the bits VERTEX23_BIT_PGI or VERTEX4_BIT_PGI must be
    set in <mode>.

    Each bit above indicates that one of the associated OpenGL functions
    might occur between Begin/End pairs.  If <mode> does not contain a
    given bit, then GL may assume that associated functions will not occur
    between Begin/End pairs -- in this case, behavior of these functions
    is undefined.  (But the functions will not cause program termination.)  

    <target> = VERTEX_CONSISTENT_HINT_PGI

    This hint indicates that OpenGL function calls will occur
    consistently between Begin/End pairs.  If <mode> is either
    TRUE or FASTEST, then the application effectively is making
    the following assertion:  Between Begin/End pairs, if any of
    the following functions -- Color, EdgeFlag, Index, Material,
    Normal, TexCoord -- occurs before one Vertex call, then it
    will occur before all Vertex calls.  (Where "before" means the
    function will occur between the current Vertex function and the
    previous Vertex of Begin function.)  If <mode> is NICEST, DONT_CARE,
    or FALSE, the application is asserting that any sequence of 
    functions might occur between Begin/End pairs.

    If both VERTEX_CONSISTENT_HINT_PGI and  VERTEX_DATA_HINT_PGI are
    enabled, then GL further assumes that any functions indicated in
    VERTEX_DATA_HINT_PGI will be called before each vertex call.  When
    a single bit in VERTEX_DATA_HINT_PGI indicates a group of possible
    functions, GL assumes that at least one function from the group will
    be called before each Vertex function between Begin/End pairs.

    <target> = MAX_VERTEX_HINT_PGI

    This hint indicates the maximum number of Vertex functions which
    will occur between Begin/End pairs.  If <mode> is FALSE then the
    hint is "disabled" -- any number of Vertex functions might occur
    between Begin/End pairs.  However, if <mode> is any value greater
    than 0, then the application is asserting that at most that number
    of Vertex functions will occur between Begin/End pairs.  In this
    case, if the application exceeds the promised number of Vertex
    calls, program termination may occur.  Negative numbers also
    disable the hint.

    <target> = MATERIAL_SIDE_HINT_PGI

    This hint indicates which <face> paramters will occur for any
    Material functions called between Begin/End pairs.  If <mode>
    is any of FALSE, DONT_CARE, NICEST, then this hint is "disabled" --
    any <face> parameters might occur in Material functions called
    between Begin/End pairs.  If <mode> is FRONT, BACK, or
    FRONT_AND_BACK, then only the given value will be used in
    Material functions called between Begin/End pairs.  If <mode>
    is TRUE or FASTEST, then only a single (unspecified) <face>
    parameter will be used in Material functions called between
    Begin/End pairs.

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

    None

Additions to the GLX Specification

    None

GLX Protocol

    None

Interactions with PGI_misc_hints

    If the PGI_misc_hints extension is available, then the hints
    described above can be used through the HintPGI client function.

    If PGI_misc_hints is not avialable, then the hints above must
    be used through the usual Hint function.

Errors

    INVALID_VALUE is generated if <target> for Hint or HintPGI is
    VERTEX_DATA_HINT_PGI and <mode> is not FALSE or some combination
    of the bits xxx_BIT_PGI.  Also, if <mode> does not contain
    VERTEX23_BIT_PGI or VERTEX4_BIT_PGI (or both), then INVALID_VALUE
    is generated.

    INVALID_ENUM is generated if <target> for Hint or HintPGI is
    VERTEX_CONSISTENT_HINT_PGI and <mode> is not FASTEST, NICEST,
    DONT_CARE, TRUE, or FALSE

    INVALID_VALUE is generated if <target> for Hint or HintPGI is
    MAX_VERTEX_HINT_PGI and <mode> is a negative number.

    INVALID_ENUM is generated if <target> for Hint or HintPGI is
    MATERIAL_SIDE_HINT_PGI and <mode> is not FASTEST, NICEST,
    DONT_CARE, TRUE, FALSE, FRONT, BACK, or FRONT_AND_BACK.

New State
								Initial
    Get Value				Get Command	Type	Value	Attrib
    ---------				-----------	----	-------	------

    VERTEX_DATA_HINT_PGI                GetIntegerv      Z       FALSE    

    VERTEX_CONSISTENT_HINT_PGI          GetIntegerv      Z       FALSE    

    MAX_VERTEX_HINT_PGI                 GetIntegerv      Z       FALSE    

    MATERIAL_SIDE_HINT_PGI              GetIntegerv      Z       FALSE    

New Implementation Dependent State

    None
