back  Return to list

GL_EXT_secondary_color
homeprevnext Name
  
    EXT_secondary_color  
  
homeprevnext Name Strings
  
    GL_EXT_secondary_color  
  
homeprevnext Version
  
    NVIDIA Date: February 24, 2000  
    $Date: 1999/06/21 19:57:47 $ $Revision: 1.8 $  
  
homeprevnext Number
  
    145  
  
homeprevnext Dependencies
  
    Either EXT_separate_specular_color or OpenGL 1.2 is required, to specify  
    the "Color Sum" stage and other handling of the secondary color. This is  
    written against the 1.2 specification (available from www.opengl.org).  
  
homeprevnext Overview
  
    This extension allows specifying the RGB components of the secondary  
    color used in the Color Sum stage, instead of using the default  
    (0,0,0,0) color. It applies only in RGBA mode and when LIGHTING is  
    disabled.  
  
homeprevnext Issues
  
  * Can we use the secondary alpha as an explicit fog weighting factor?  
  
        ISVs prefer a separate interface (see GL_EXT_fog_coord). The current  
        interface specifies only the RGB elements, leaving the option of a  
        separate extension for SecondaryColor4() entry points open (thus  
        the apparently useless ARRAY_SIZE state entry).  
  
        There is an unpleasant asymmetry with Color3() - one assumes A =  
        1.0, the other assumes A = 0.0 - but this appears unavoidable given  
        the 1.2 color sum specification language. Alternatively, the color  
        sum language could be rewritten to not sum secondary A.  
  
  * What about multiple "color iterators" for use with aggrandized  
    multitexture implementations?  
  
        We may need this eventually, but the secondary color is well defined  
        and a more generic interface doesn't seem justified now.  
  
  * Interleaved array formats?  
  
        No. The multiplicative explosion of formats is too great.  
  
  * Do we want to be able to query the secondary color value? How does it  
    interact with lighting?  
  
        The secondary color is not part of the GL state in the  
        separate_specular_color extension that went into OpenGL 1.2. There,  
        it can't be queried or obtained via feedback.  
  
        The secondary_color extension is slightly more general-purpose, so  
        the secondary color is explicitly in the GL state and can be queried  
        - but it's still somewhat limited and can't be obtained via  
        feedback, for example.  
  
homeprevnext New Procedures and Functions
  
    void SecondaryColor3[bsifd ubusui]EXT(T components)  
    void SecondaryColor3[bsifd ubusui]vEXT(T components)  
    void SecondaryColorPointerEXT(int size, enum type, sizei stride,  
                                  void *pointer)  
  
homeprevnext New Tokens
  
    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled,  
    and by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv,  
    and GetDoublev:  
  
        COLOR_SUM_EXT                       0x8458  
  
    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,  
    GetFloatv, and GetDoublev:  
  
        CURRENT_SECONDARY_COLOR_EXT         0x8459  
        SECONDARY_COLOR_ARRAY_SIZE_EXT      0x845A  
        SECONDARY_COLOR_ARRAY_TYPE_EXT      0x845B  
        SECONDARY_COLOR_ARRAY_STRIDE_EXT    0x845C  
  
    Accepted by the <pname> parameter of GetPointerv:  
  
        SECONDARY_COLOR_ARRAY_POINTER_EXT   0x845D  
  
    Accepted by the <array> parameter of EnableClientState and  
    DisableClientState:  
  
        SECONDARY_COLOR_ARRAY_EXT           0x845E  
  
homeprevnext Additions to Chapter 2 of the 1.2 Draft Specification (OpenGL Operation)
  
  These changes describe a new current state type, the secondary color, and  
  the commands to specify it:  
  
  - (2.6, p. 12) Second paragraph changed to:  
  
        "Each vertex is specified with two, three, or four coordinates. In  
        addition, a current normal, current texture coordinates, current  
        color, and current secondary color may be used in processing each  
        vertex."  
  
    Third paragraph, second sentence changed to:  
  
        "These associated colors are either based on the current color and  
        current secondary color, or produced by lighting, depending on  
        whether or not lighting is enabled."  
  
  - 2.6.3, p. 19) First paragraph changed to  
  
        "The only GL commands that are allowed within any Begin/End pairs  
        are the commands for specifying vertex coordinates, vertex colors,  
        normal coordinates, and texture coordinates (Vertex, Color,  
        SecondaryColorEXT, Index, Normal, TexCoord)..."  
  
  - (2.7, p. 20) Starting with the fourth paragraph, change to:  
  
        "Finally, there are several ways to set the current color and  
        secondary color. The GL stores a current single-valued color index  
        as well as a current four-valued RGBA color and secondary color.  
        Either the index or the color and secondary color are significant  
        depending as the GL is in color index mode or RGBA mode. The mode  
        selection is made when the GL is initialized.  
  
        The commands to set RGBA colors and secondary colors are:  
  
            void Color[34][bsifd ubusui](T components)  
            void Color[34][bsifd ubusui]v(T components)  
            void SecondaryColor3[bsifd ubusui]EXT(T components)  
            void SecondaryColor3[bsifd ubusui]vEXT(T components)  
  
        The color command has two major variants: Color3 and Color4. The  
        four value versions set all four values. The three value versions  
        set R, G, and B to the provided values; A is set to 1.0. (The  
        conversion of integer color components (R, G, B, and A) to  
        floating-point values is discussed in section 2.13.)  
  
        The secondary color command has only the three value versions.  
        Secondary A is always set to 0.0.  
  
        Versions of the Color and SecondaryColorEXT commands that take  
        floating-point values accept values nominally between 0.0 and  
        1.0...."  
  
    The last paragraph is changed to read:  
  
        "The state required to support vertex specification consists of four  
        floating-point numbers to store the current texture coordinates s,  
        t, r, and q, four floating-point values to store the current RGBA  
        color, four floating-point values to store the current RGBA  
        secondary color, and one floating-point value to store the current  
        color index. There is no notion of a current vertex, so no state is  
        devoted to vertex coordinates. The initial values of s, t, and r of  
        the current texture coordinates are zero; the initial value of q is  
        one. The initial current normal has coordinates (0,0,1). The initial  
        RGBA color is (R,G,B,A) = (1,1,1,1). The initial RGBA secondary  
        color is (R,G,B,A) = (0,0,0,0). The initial color index is 1."  
  
  - (2.8, p. 21) Added secondary color command for vertex arrays:  
  
    Change first paragraph to read:  
  
        "The vertex specification commands described in section 2.7 accept  
        data in almost any format, but their use requires many command  
        executions to specify even simple geometry. Vertex data may also be  
        placed into arrays that are stored in the client's address space.  
        Blocks of data in these arrays may then be used to specify multiple  
        geometric primitives through the execution of a single GL command.  
        The client may specify up to seven arrays: one each to store edge  
        flags, texture coordinates, colors, secondary colors, color indices,  
        normals, and vertices. The commands"  
  
    Add to functions listed following first paragraph:  
  
        void SecondaryColorPointerEXT(int size, enum type, sizei stride,  
                                      void *pointer)  
  
    Add to table 2.4 (p. 22):  
  
        Command                     Sizes   Types  
        -------                     -----   -----  
        SecondaryColorPointerEXT    3       byte,ubyte,short,ushort,int,uint,  
                                            float,double  
  
    Starting with the second paragraph on p. 23, change to add  
    SECONDARY_COLOR_ARRAY_EXT:  
  
        "An individual array is enabled or disabled by calling one of  
  
            void EnableClientState(enum array)  
            void DisableClientState(enum array)  
  
        with array set to EDGE_FLAG_ARRAY, TEXTURE_COORD_ARRAY, COLOR_ARRAY,  
        SECONDARY_COLOR_ARRAY_EXT, INDEX_ARRAY, NORMAL_ARRAY, or  
        VERTEX_ARRAY, for the edge flag, texture coordinate, color,  
        secondary color, color index, normal, or vertex array, respectively.  
  
        The ith element of every enabled array is transferred to the GL by  
        calling  
  
            void ArrayElement(int i)  
  
        For each enabled array, it is as though the corresponding command  
        from section 2.7 or section 2.6.2 were called with a pointer to  
        element i. For the vertex array, the corresponding command is  
        Vertex<size><type>v, where <size> is one of [2,3,4], and <type> is  
        one of [s,i,f,d], corresponding to array types short, int, float,  
        and double respectively. The corresponding commands for the edge  
        flag, texture coordinate, color, secondary color, color index, and  
        normal arrays are EdgeFlagv, TexCoord<size><type>v,  
        Color<size><type>v, SecondaryColor3<type>vEXT, Index<type>v, and  
        Normal<type>v, respectively..."  
  
    Change pseudocode on p. 27 to disable secondary color array for  
    canned interleaved array formats. After the lines  
  
            DisableClientState(EDGE_FLAG_ARRAY);  
            DisableClientState(INDEX_ARRAY);  
  
        insert the line  
  
            DisableClientState(SECONDARY_COLOR_ARRAY_EXT);  
  
    Substitute "seven" for every occurence of "six" in the final paragraph  
    on p. 27.  
  
  - (2.12, p. 41) Add secondary color to the current rasterpos state.  
  
    Change the last paragraph to read  
  
        "The current raster position requires five single-precision  
        floating-point values for its x_w, y_w, and z_w window coordinates,  
        its w_c clip coordinate, and its eye coordinate distance, a single  
        valid bit, a color (RGBA color, RGBA secondary color, and color  
        index), and texture coordinates for associated data. In the initial  
        state, the coordinates and texture coordinates are both $(0,0,0,1)$,  
        the eye coordinate distance is 0, the valid bit is set, the  
        associated RGBA color is $(1,1,1,1)$, the associated RGBA secondary  
        color is $(0,0,0,0)$, and the associated color index color is 1. In  
        RGBA mode, the associated color index always has its initial value;  
        in color index mode, the RGBA color and and secondary color always  
        maintain their initial values."  
  
  - (2.13, p. 43) Change second paragraph to acknowledge two colors when  
    lighting is disabled:  
  
        "Next, lighting, if enabled, produces either a color index or  
        primary and secondary colors. If lighting is disabled, the current  
        color index or current color (primary color) and current secondary  
        color are used in further processing. After lighting, RGBA colors  
        are clamped..."  
  
  - (Figure 2.8, p. 42) Change to show primary and secondary RGBA colors in  
    both lit and unlit paths.  
  
  - (2.13.1, p. 44) Change so that the second paragraph starts:  
  
    "Lighting may be in one of two states:  
  
     1. Lighting Off. In this state, the current color and current secondary  
        color are assigned to the vertex primary color and vertex secondary  
        color, respectively.  
  
     2. ..."  
  
  - (2.13.1, p. 48) Change the sentence following equation 2.5 (for spot_i)  
    so that color sum is implicitly enabled when SEPARATE_SPECULAR_COLOR is  
    set:  
  
    "All computations are carried out in eye coordinates. When c_es =  
    SEPARATE_SPECULAR_COLOR, it is as if color sum (see section 3.9) were  
    enabled, regardless of the value of COLOR_SUM_EXT."  
  
  
  - (3.9, p. 136) Change the first paragraph to read  
  
    "After texturing, a fragment has two RGBA colors: a primary color c_pri  
    (which texturing, if enabled, may have modified) and a secondary color  
    c_sec.  
  
    If color sum is enabled, the components of these two colors are summed  
    to produce a single post-texturing RGBA color c (the A component of the  
    secondary color is always 0). The components of c are then clamped to  
    the range [0,1]. If color sum is disabled, then c_pri is assigned to the  
    post texturing color. Color sum is enabled or disabled using the generic  
    Enable and Disable commands, respectively, with the symbolic constant  
    COLOR_SUM_EXT.  
  
    The state required is a single bit indicating whether color sum is  
    enabled or disabled. In the initial state, color sum is disabled."  
  
homeprevnext Additions to Chapter 6 of the 1.2 Specification (State and State Requests)
  
  None  
  
homeprevnext Additions to the GLX Specification
  
  None  
  
homeprevnext GLX Protocol
  
    Eight new GL rendering commands are added. The following commands  
    are sent to the server as part of a glXRender request:  
  
        SecondaryColor3bvEXT  
            2           8               rendering command length  
            2           4126            rendering command opcode  
            1           INT8            v[0]  
            1           INT8            v[1]  
            1           INT8            v[2]  
            1                           unused  
  
        SecondaryColor3svEXT  
            2           12              rendering command length  
            2           4127            rendering command opcode  
            2           INT16           v[0]  
            2           INT16           v[1]  
            2           INT16           v[2]  
            2                           unused  
  
        SecondaryColor3ivEXT  
            2           16              rendering command length  
            2           4128            rendering command opcode  
            4           INT32           v[0]  
            4           INT32           v[1]  
            4           INT32           v[2]  
  
        SecondaryColor3fvEXT  
            2           16              rendering command length  
            2           4129            rendering command opcode  
            4           FLOAT32         v[0]  
            4           FLOAT32         v[1]  
            4           FLOAT32         v[2]  
  
        SecondaryColor3dvEXT  
            2           28              rendering command length  
            2           4130            rendering command opcode  
            8           FLOAT64         v[0]  
            8           FLOAT64         v[1]  
            8           FLOAT64         v[2]  
  
        SecondaryColor3ubvEXT  
            2           8               rendering command length  
            2           4131            rendering command opcode  
            1           CARD8           v[0]  
            1           CARD8           v[1]  
            1           CARD8           v[2]  
            1                           unused  
  
        SecondaryColor3usvEXT  
            2           12               rendering command length  
            2           4132            rendering command opcode  
            2           CARD16          v[0]  
            2           CARD16          v[1]  
            2           CARD16          v[2]  
            2                           unused  
  
        SecondaryColor3uivEXT  
            2           16               rendering command length  
            2           4133            rendering command opcode  
            4           CARD32          v[0]  
            4           CARD32          v[1]  
            4           CARD32          v[2]  
  
homeprevnext Errors
  
    INVALID_VALUE is generated if SecondaryColorPointerEXT parameter <size>  
    is not 3.  
  
    INVALID_ENUM is generated if SecondaryColorPointerEXT parameter <type>  
    is not BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, INT, UNSIGNED_INT,  
    FLOAT, or DOUBLE.  
  
    INVALID_VALUE is generated if SecondaryColorPointerEXT parameter  
    <stride> is negative.  
  
homeprevnext New State
  
(table 6.5, p. 195)  
    Get Value                   Type    Get Command     Initial Value   Description     Sec Attribute  
    ---------                   ----    -----------     -------------   -----------     --- ---------  
    CURRENT_SECONDARY_COLOR_EXT C       GetIntegerv,    (0,0,0,0)       Current         2.7 current  
                                        GetFloatv                       secondary color  
  
(table 6.6, p. 197)  
    Get Value                           Type    Get Command     Initial Value   Description                     Sec Attribute  
    ---------                           ----    -----------     -------------   -----------                     --- ---------  
    SECONDARY_COLOR_ARRAY_EXT           B       IsEnabled       False           Sec. color array enable         2.8 vertex-array  
    SECONDARY_COLOR_ARRAY_SIZE_EXT      Z+      GetIntegerv     3               Sec. colors per vertex          2.8 vertex-array  
    SECONDARY_COLOR_ARRAY_TYPE_EXT      Z8      GetIntegerv     FLOAT           Type of sec. color components   2.8 vertex-array  
    SECONDARY_COLOR_ARRAY_STRIDE_EXT    Z+      GetIntegerv     0               Stride between sec. colors      2.8 vertex-array  
    SECONDARY_COLOR_ARRAY_POINTER_EXT   Y       GetPointerv     0               Pointer to the sec. color array 2.8 vertex-array  
  
(table 6.8, p. 198)  
    Get Value                   Type    Get Command     Initial Value   Description     Sec Attribute  
    ---------                   ----    -----------     -------------   -----------     --- ---------  
    COLOR_SUM_EXT               B       IsEnabled       False           True if color   3.9 fog/enable  
                                                                        sum enabled  
                                                                        sum enabled  
Valid XHTML 1.1! Valid CSS! Last update: November 14, 2006.
Cette page doit être lue avec un navigateur récent respectant le standard XHTML 1.1.