15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    ARB_vertex_blend
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_ARB_vertex_blend
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Evan Hart, NVIDIA (ehart 'at' nvidia.com)
125bd8deadSopenharmony_ci    Tom Frisinger, AMD (tom.frisinger 'at' amd.com)
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciNotice
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Copyright (c) 2000-2013 The Khronos Group Inc. Copyright terms at
175bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciSpecification Update Policy
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
225bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL Working Group. For
235bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
245bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
255bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
265bd8deadSopenharmony_ci    described in more detail at
275bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ciStatus
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ci    Complete. Approved by ARB on September 19, 2000.
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ciVersion
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ci    Last Modified Date: November 4, 2006
365bd8deadSopenharmony_ci    Revision: 1.3
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ciNumber
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ci    ARB Extension #15
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ciDependencies
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ci    OpenGL 1.0 is required.
455bd8deadSopenharmony_ci    This extension is written against the OpenGL 1.2.1 Specification.
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ciOverview
485bd8deadSopenharmony_ci
495bd8deadSopenharmony_ci    This extension provides the ability to replace the single
505bd8deadSopenharmony_ci    modelview transformation with a set of n vertex units. (Where
515bd8deadSopenharmony_ci    n is constrained to an implementation defined maximum.) Each
525bd8deadSopenharmony_ci    unit has its own modelview transform matrix. For each unit,
535bd8deadSopenharmony_ci    there is a current weight associated with the vertex. When
545bd8deadSopenharmony_ci    this extension is enabled the vertices are transformed by
555bd8deadSopenharmony_ci    the modelview matrices of all of the enabled units. Afterward,
565bd8deadSopenharmony_ci    these results are scaled by the weights for the respective
575bd8deadSopenharmony_ci    units and then summed to create the eye-space vertex. A
585bd8deadSopenharmony_ci    similar procedure is followed for the normals, except they
595bd8deadSopenharmony_ci    are transformed by the inverse transpose of the modelview
605bd8deadSopenharmony_ci    matrices.
615bd8deadSopenharmony_ci
625bd8deadSopenharmony_ci    This extension is an orthoganalized version of functionality
635bd8deadSopenharmony_ci    already provided by other 3D graphics API's.
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    
665bd8deadSopenharmony_ciIP Status
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ci    Unknown, but believed to be none. 
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ciIssues
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ci    Should an indexed form of matrix addressing be used?
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci        No, this should be added as an additional extension.
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ci    Should integer blending weights be allowed?
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci        Yes, this was an over-sight in the original spec. Integer
805bd8deadSopenharmony_ci        formats allow for the potential to provide smaller data
815bd8deadSopenharmony_ci        types to the API. Integer data types are always mapped
825bd8deadSopenharmony_ci        to floats in the same manner as colors.
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci    Should the blending weights be forced to sum to 1?
855bd8deadSopenharmony_ci
865bd8deadSopenharmony_ci        No, it should be provided as a convenience to developers,
875bd8deadSopenharmony_ci        since it is the most common case. Additionally, it should
885bd8deadSopenharmony_ci        be noted that even if the weights do not sum to one,
895bd8deadSopenharmony_ci        the result of the modelview transformation provides an
905bd8deadSopenharmony_ci        eye coordinate whose homogenous coordinate is equivalent
915bd8deadSopenharmony_ci        to the homogeneous coordinate after the transformation
925bd8deadSopenharmony_ci        had the weights been scaled to sum to one.
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci        Additionally, NORMALIZE should in general be left on to
955bd8deadSopenharmony_ci        prevent non-unit normals.
965bd8deadSopenharmony_ci    
975bd8deadSopenharmony_ci    What about projective modelview matrices?  
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci        Projective modelview matrices can cause problems with many
1005bd8deadSopenharmony_ci        other features in GL, so this should not be a problem in
1015bd8deadSopenharmony_ci        practice. This extension makes no attempts to handle
1025bd8deadSopenharmony_ci        projective modelview matrices.
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci    Should the set of modelview matrices affect parts of GL other
1055bd8deadSopenharmony_ci      than vertices?
1065bd8deadSopenharmony_ci
1075bd8deadSopenharmony_ci        No, this seems to confuse the operation, and it forces
1085bd8deadSopenharmony_ci        vertex components to affect setting of GL state.
1095bd8deadSopenharmony_ci      
1105bd8deadSopenharmony_ci    Some transformations may cause the normals to be transformed in
1115bd8deadSopenharmony_ci      such a way that they no longer represent the tangent plane to
1125bd8deadSopenharmony_ci      the surface.
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci        This is a basic property of the math of the technique. In
1155bd8deadSopenharmony_ci        general with these varying transformations, it is impossible
1165bd8deadSopenharmony_ci        to maintain the normal as the tangent plane to the surface
1175bd8deadSopenharmony_ci        without topological information. 
1185bd8deadSopenharmony_ci
1195bd8deadSopenharmony_ci        Lacking the topological data, the best approximation is to
1205bd8deadSopenharmony_ci        transform the normals by the inverse transpose of the
1215bd8deadSopenharmony_ci        blend of the modelview matrices. As the inverse per-vertex
1225bd8deadSopenharmony_ci        may be computationally impractical, a slightly less accurate
1235bd8deadSopenharmony_ci        blend of inverse transpose matrices is allowed as the
1245bd8deadSopenharmony_ci        transformation.
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ci        When the less accurate blend is used, the normals will only
1275bd8deadSopenharmony_ci        be identical to the normals formed by the more correct math
1285bd8deadSopenharmony_ci        when the blending matrices are pair-wise orthogonal and
1295bd8deadSopenharmony_ci        the sum of the square of the weights is equal to one.
1305bd8deadSopenharmony_ci        
1315bd8deadSopenharmony_ci    Should weights be specified as vectors rather than independent
1325bd8deadSopenharmony_ci      scalars?
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci        Yes, this removes little flexibility and significantly
1355bd8deadSopenharmony_ci        reduces the call overhead.
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ciNew Procedures and Functions
1395bd8deadSopenharmony_ci
1405bd8deadSopenharmony_ci    void Weight{bsifd ubusui}vARB(int size, T* weights)
1415bd8deadSopenharmony_ci
1425bd8deadSopenharmony_ci    void WeightPointerARB(int size, enum type, sizei stride,
1435bd8deadSopenharmony_ci                          void *pointer)
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci    void VertexBlendARB(int count)
1465bd8deadSopenharmony_ci
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ciNew Tokens
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ci    Accepted by the <value> parameters of GetBooleanv, GetIntegerv,
1515bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
1525bd8deadSopenharmony_ci
1535bd8deadSopenharmony_ci      MAX_VERTEX_UNITS_ARB            0x86A4
1545bd8deadSopenharmony_ci      ACTIVE_VERTEX_UNITS_ARB         0x86A5
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci    Accepted by the <cap> parameters of Enable and Disable, by the
1575bd8deadSopenharmony_ci    <value> parameter of IsEnabled, GetBooleanv, GetIntegerv,
1585bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ci      WEIGHT_SUM_UNITY_ARB            0x86A6
1615bd8deadSopenharmony_ci      VERTEX_BLEND_ARB                0x86A7
1625bd8deadSopenharmony_ci
1635bd8deadSopenharmony_ci    Accepted by the <mode> parameter of MatrixMode and by the
1645bd8deadSopenharmony_ci    <value> parameter of GetBooleanv, GetIntegerv, GetFloatv, and
1655bd8deadSopenharmony_ci    GetDoublev.
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci      MODELVIEW0_ARB:                 0x1700 (alias to MODELVIEW)
1685bd8deadSopenharmony_ci      MODELVIEW1_ARB:                 0x850a
1695bd8deadSopenharmony_ci      MODELVIEW2_ARB:                 0x8722
1705bd8deadSopenharmony_ci      MODELVIEW3_ARB:                 0x8723
1715bd8deadSopenharmony_ci      MODELVIEW4_ARB:                 0x8724
1725bd8deadSopenharmony_ci      MODELVIEW5_ARB:                 0x8725
1735bd8deadSopenharmony_ci      MODELVIEW6_ARB:                 0x8726
1745bd8deadSopenharmony_ci      MODELVIEW7_ARB:                 0x8727
1755bd8deadSopenharmony_ci      MODELVIEW8_ARB:                 0x8728
1765bd8deadSopenharmony_ci      MODELVIEW9_ARB:                 0x8729
1775bd8deadSopenharmony_ci      MODELVIEW10_ARB:                0x872A
1785bd8deadSopenharmony_ci      MODELVIEW11_ARB:                0x872B
1795bd8deadSopenharmony_ci      MODELVIEW12_ARB:                0x872C
1805bd8deadSopenharmony_ci      MODELVIEW13_ARB:                0x872D
1815bd8deadSopenharmony_ci      MODELVIEW14_ARB:                0x872E
1825bd8deadSopenharmony_ci      MODELVIEW15_ARB:                0x872F
1835bd8deadSopenharmony_ci      MODELVIEW16_ARB:                0x8730
1845bd8deadSopenharmony_ci      MODELVIEW17_ARB:                0x8731
1855bd8deadSopenharmony_ci      MODELVIEW18_ARB:                0x8732
1865bd8deadSopenharmony_ci      MODELVIEW19_ARB:                0x8733
1875bd8deadSopenharmony_ci      MODELVIEW20_ARB:                0x8734
1885bd8deadSopenharmony_ci      MODELVIEW21_ARB:                0x8735
1895bd8deadSopenharmony_ci      MODELVIEW22_ARB:                0x8736
1905bd8deadSopenharmony_ci      MODELVIEW23_ARB:                0x8737
1915bd8deadSopenharmony_ci      MODELVIEW24_ARB:                0x8738
1925bd8deadSopenharmony_ci      MODELVIEW25_ARB:                0x8739
1935bd8deadSopenharmony_ci      MODELVIEW26_ARB:                0x873A
1945bd8deadSopenharmony_ci      MODELVIEW27_ARB:                0x873B
1955bd8deadSopenharmony_ci      MODELVIEW28_ARB:                0x873C
1965bd8deadSopenharmony_ci      MODELVIEW29_ARB:                0x873D
1975bd8deadSopenharmony_ci      MODELVIEW30_ARB:                0x873E
1985bd8deadSopenharmony_ci      MODELVIEW31_ARB:                0x873F
1995bd8deadSopenharmony_ci      
2005bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
2015bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
2025bd8deadSopenharmony_ci    
2035bd8deadSopenharmony_ci      CURRENT_WEIGHT_ARB              0x86A8 
2045bd8deadSopenharmony_ci      
2055bd8deadSopenharmony_ci    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
2065bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci      WEIGHT_ARRAY_TYPE_ARB           0x86A9
2095bd8deadSopenharmony_ci      WEIGHT_ARRAY_STRIDE_ARB         0x86AA
2105bd8deadSopenharmony_ci      WEIGHT_ARRAY_SIZE_ARB           0x86AB
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetPointerv:
2135bd8deadSopenharmony_ci      WEIGHT_ARRAY_POINTER_ARB        0x86AC
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci    Accepted by the <cap> parameters of EnableClientState and
2165bd8deadSopenharmony_ci    DisableClientState, by the <value> parameter of IsEnabled,
2175bd8deadSopenharmony_ci    GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev:
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci      WEIGHT_ARRAY_ARB                0x86AD
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.2.1 Specification (Operation)
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci    - (2.6, p. 12) Second paragraph changed to:
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ci          "Each vertex is specified with two, three, or four
2265bd8deadSopenharmony_ci          coordinates. In addition, a current normal, current texture
2275bd8deadSopenharmony_ci          coordinates, current color, and a set of current weights
2285bd8deadSopenharmony_ci          may be used in processing each vertex. Normals are used
2295bd8deadSopenharmony_ci          by the GL in lighting calculations; the current normal is
2305bd8deadSopenharmony_ci          a three-dimensional vector that may be set by sending three
2315bd8deadSopenharmony_ci          coordinates that specify it. Texture coordinates determine
2325bd8deadSopenharmony_ci          how a texture image is mapped onto a primitive. Weights are
2335bd8deadSopenharmony_ci          used to blend between vertex transformations."
2345bd8deadSopenharmony_ci
2355bd8deadSopenharmony_ci    - (2.6.3, p. 19) First paragraph changed to:
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci          "The only GL commands that are allowed within Begin/End
2385bd8deadSopenharmony_ci          pairs are the commands for specifying vertex coordinates,
2395bd8deadSopenharmony_ci          vertex color, normal coordinates, texture coordinates, and
2405bd8deadSopenharmony_ci          weights (Vertex, Color, Index, Normal, TexCoord,
2415bd8deadSopenharmony_ci          WeightvARB), the ArrayElement command (see section 2.8),
2425bd8deadSopenharmony_ci          the EvalCoord and EvalPoint commands (see section 5.1),
2435bd8deadSopenharmony_ci          commands for specifying lighting material parameters
2445bd8deadSopenharmony_ci          (Material commands; see section 2.13.2), display list
2455bd8deadSopenharmony_ci          invocation commands (CallList and CallLists; see section
2465bd8deadSopenharmony_ci          5.4), and the EdgeFlag command. Executing any other GL
2475bd8deadSopenharmony_ci          command between the execution of Begin and the
2485bd8deadSopenharmony_ci          corresponding execution of End results in the error
2495bd8deadSopenharmony_ci          INVALID_OPERATION. Executing Begin after Begin has already
2505bd8deadSopenharmony_ci          been executed but before an End is executed generates the
2515bd8deadSopenharmony_ci          INVALID_OPERATION error, as does executing End without a
2525bd8deadSopenharmony_ci          previous corresponding Begin." 
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    - (2.7, p. 20) Added after the third paragraph:
2555bd8deadSopenharmony_ci
2565bd8deadSopenharmony_ci          "The current weights are set using
2575bd8deadSopenharmony_ci
2585bd8deadSopenharmony_ci              void Weight{bsifd ubusui}vARB(int size, T* weights);
2595bd8deadSopenharmony_ci
2605bd8deadSopenharmony_ci          the floating point values are assigned to the current
2615bd8deadSopenharmony_ci                  weight vector. The first <size> current weights are
2625bd8deadSopenharmony_ci                  replaced with <weights> such that:
2635bd8deadSopenharmony_ci                  
2645bd8deadSopenharmony_ci                      w[i] = <weights>[i]
2655bd8deadSopenharmony_ci                 
2665bd8deadSopenharmony_ci                  When WEIGHT_SUM_UNITY_ARB is enabled, 
2675bd8deadSopenharmony_ci                  
2685bd8deadSopenharmony_ci                                              <size>-1 
2695bd8deadSopenharmony_ci                      w[<size>] = 1 - SUM <weights>[i]
2705bd8deadSopenharmony_ci                                                          i=0
2715bd8deadSopenharmony_ci
2725bd8deadSopenharmony_ci                  otherwise the rest of the current weights are set to
2735bd8deadSopenharmony_ci                  0. If <size> is greater than MAX_VERTEX_UNITS_ARB or if
2745bd8deadSopenharmony_ci                  WEIGHT_SUM_UNITY_ARB is enabled and <size> equals
2755bd8deadSopenharmony_ci                  MAX_VERTEX_UNITS_ARB, then the error INVALID_VALUE is
2765bd8deadSopenharmony_ci                  generated. When the values are supplied as byte, short,
2775bd8deadSopenharmony_ci                  int, or their unsigned counterparts, they are converted to
2785bd8deadSopenharmony_ci                  floating-point values as indicated for the corresponding
2795bd8deadSopenharmony_ci                  type in Table 2.6."
2805bd8deadSopenharmony_ci
2815bd8deadSopenharmony_ci    - (2.8, p. 21) First paragraph changed to read:
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci          "The vertex specification commands described in section 2.7
2845bd8deadSopenharmony_ci          accept data in almost any format, but their use requires
2855bd8deadSopenharmony_ci          many command executions to specify even simple geometry.
2865bd8deadSopenharmony_ci          Vertex data may also be placed into arrays that are stored
2875bd8deadSopenharmony_ci          in the client's address space. Blocks of data in these
2885bd8deadSopenharmony_ci          arrays may then be used to specify multiple geometric
2895bd8deadSopenharmony_ci          primitives through the execution of a single GL command.
2905bd8deadSopenharmony_ci          The client may specify an implementation dependent set of
2915bd8deadSopenharmony_ci          arrays: one each to store edge flags, texture coordinates,
2925bd8deadSopenharmony_ci          colors, color indices, normals, vertices, and weights.
2935bd8deadSopenharmony_ci                  The commands
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ci              void EdgeFlagPointer( sizei stride, void *pointer);
2965bd8deadSopenharmony_ci
2975bd8deadSopenharmony_ci              void TexCoordPointer( int size, enum type, sizei stride,
2985bd8deadSopenharmony_ci                void *pointer );
2995bd8deadSopenharmony_ci
3005bd8deadSopenharmony_ci              void ColorPointer( int size, enum type, sizei stride,
3015bd8deadSopenharmony_ci                void *pointer );
3025bd8deadSopenharmony_ci
3035bd8deadSopenharmony_ci              void IndexPointer( enum type, sizei stride, void 
3045bd8deadSopenharmony_ci                *pointer );
3055bd8deadSopenharmony_ci
3065bd8deadSopenharmony_ci              void NormalPointer( enum type, sizei stride, void
3075bd8deadSopenharmony_ci                *pointer );
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci              void VertexPointer( int size, enum type, sizei stride,
3105bd8deadSopenharmony_ci                void *pointer );
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci              void WeightPointerARB( int size, enum type,
3135bd8deadSopenharmony_ci                            sizei stride, void *pointer)
3145bd8deadSopenharmony_ci
3155bd8deadSopenharmony_ci          describe the locations and organizations of these arrays.
3165bd8deadSopenharmony_ci          For each command, type specifies the data type of the
3175bd8deadSopenharmony_ci          values stored in the array. Because edge flags are always
3185bd8deadSopenharmony_ci          type boolean, EdgeFlagPointer has no type argument. Size,
3195bd8deadSopenharmony_ci          when present, indicates the number of values per vertex
3205bd8deadSopenharmony_ci          that are stored in the array. Because normals are always
3215bd8deadSopenharmony_ci          specified with three values, NormalPointer has no size
3225bd8deadSopenharmony_ci          argument. Likewise, because color indices, edge flags, and
3235bd8deadSopenharmony_ci          weights are always specified with a single value,
3245bd8deadSopenharmony_ci          IndexPointer, and EdgeFlagPointer also have no size
3255bd8deadSopenharmony_ci                  argument. Table 2.4 indicates the allowable values for size
3265bd8deadSopenharmony_ci                  and type (when present). For type the values BYTE, SHORT,
3275bd8deadSopenharmony_ci                  INT, FLOAT, and DOUBLE indicates types byte, short, int,
3285bd8deadSopenharmony_ci                  float, and double, respectively; and the values
3295bd8deadSopenharmony_ci                  UNSIGNED_BYTE, UNSIGNED_SHORT, and UNSIGNED_INT indicate
3305bd8deadSopenharmony_ci                  types ubyte, ushort, and uint, respectively. The error
3315bd8deadSopenharmony_ci                  INVALID_VALUE is generated if size is specified with
3325bd8deadSopenharmony_ci                  a value other than that indicated in the table, or if the
3335bd8deadSopenharmony_ci                  <size> parameter to WeightPointerARB is outside the range
3345bd8deadSopenharmony_ci                  allowed for WeightvARB in section 2.7."
3355bd8deadSopenharmony_ci         
3365bd8deadSopenharmony_ci    - (2.8, p. 22) Change table 2.4 to read:
3375bd8deadSopenharmony_ci
3385bd8deadSopenharmony_ci          Command            Sizes    Types                     
3395bd8deadSopenharmony_ci          -------            -----    -----
3405bd8deadSopenharmony_ci          VertexPointer      2,3,4    short, int, float, double
3415bd8deadSopenharmony_ci          NormalPointer      3        byte, short, int, float, double
3425bd8deadSopenharmony_ci          ColorPointer       3,4      byte, ubyte, short, ushort,
3435bd8deadSopenharmony_ci                                      int, uint, float, double
3445bd8deadSopenharmony_ci          IndexPointer       1        ubyte, short, int, float,
3455bd8deadSopenharmony_ci                                      double
3465bd8deadSopenharmony_ci          TexCoordPointer    1,2,3,4  short, int, float, double
3475bd8deadSopenharmony_ci          EdgeFlagPointer    1        boolean
3485bd8deadSopenharmony_ci          WeightPointerARB   1 ...    byte, ubyte, short, ushort,
3495bd8deadSopenharmony_ci                         MAX_VERTEX_UNITS_ARB int, uint, float, double
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ci
3525bd8deadSopenharmony_ci    - (2.8 p. 23) Change paragraph two to:
3535bd8deadSopenharmony_ci
3545bd8deadSopenharmony_ci          "An individual array is enabled or disabled by calling one
3555bd8deadSopenharmony_ci      of
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci              void EnableClientState( enum array );
3585bd8deadSopenharmony_ci              void DisableClientState( enum array );
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ci          with array set to EDGE_FLAG_ARRAY, TEXTURE_COORD_ARRAY,
3615bd8deadSopenharmony_ci          COLOR_ARRAY, INDEX_ARRAY, NORMAL_ARRAY, VERTEX_ARRAY, or
3625bd8deadSopenharmony_ci          WEIGHT_ARRAY_ARB, for the edge flag, texture coordinate,
3635bd8deadSopenharmony_ci          color, color index, normal, vertex, or weight array,
3645bd8deadSopenharmony_ci          respectively."
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    - (2.8 p. 23) Change paragraph three to:
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ci          "The ith element of every enabled array is transferred to
3695bd8deadSopenharmony_ci          the GL by calling
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ci              void ArrayElement( int i );
3725bd8deadSopenharmony_ci
3735bd8deadSopenharmony_ci          For each enabled array, it is as though the corresponding
3745bd8deadSopenharmony_ci          command form section 2.7 or 2.6.2 were called with a
3755bd8deadSopenharmony_ci          pointer to element i. For the vertex array, the
3765bd8deadSopenharmony_ci          corresponding command is Vertex[size][type]v, where size is
3775bd8deadSopenharmony_ci          one of [2,3,4], and type is one of [s,i,f,d], corresponding
3785bd8deadSopenharmony_ci          to array types short, int, float, and double respectively.
3795bd8deadSopenharmony_ci          The corresponding commands for the edge flag, texture
3805bd8deadSopenharmony_ci          coordinate, color, color index, normal, and weight arrays
3815bd8deadSopenharmony_ci          are EdgeFlagv, TexCoord[size][type]v, Color[size][type]v,
3825bd8deadSopenharmony_ci          Index[type]v, Normal[type]v, and Weight[type]vARB,
3835bd8deadSopenharmony_ci          respectively. The <size> parameter to WeightvARB is the
3845bd8deadSopenharmony_ci                  current <size> for the weight array. If the vertex array
3855bd8deadSopenharmony_ci                  is enabled, it is as though Vertex[size][type]v is executed
3865bd8deadSopenharmony_ci                  last, after the executions of the other corresponding
3875bd8deadSopenharmony_ci                  commands."
3885bd8deadSopenharmony_ci
3895bd8deadSopenharmony_ci    - (2.10 p. 28) Added after the second paragraph:
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci          "Alternatively, the model-view transformation may be
3925bd8deadSopenharmony_ci          performed by a set of model-view matrices when vertex
3935bd8deadSopenharmony_ci          blending is enabled. Enabling and disabling of vertex
3945bd8deadSopenharmony_ci          blending is handled by Enable or Disable with the argument
3955bd8deadSopenharmony_ci          of VERTEX_BLEND_ARB. When blending is enabled, the vertex
3965bd8deadSopenharmony_ci          is transformed by multiple model-view transformations.
3975bd8deadSopenharmony_ci                  The number of active transformations applied is set by
3985bd8deadSopenharmony_ci
3995bd8deadSopenharmony_ci                      void VertexBlendARB(int count)
4005bd8deadSopenharmony_ci                  
4015bd8deadSopenharmony_ci                  where count is the number of transformations to blend.
4025bd8deadSopenharmony_ci                  If count is greater than the implementation defined
4035bd8deadSopenharmony_ci                  maximum number of transformations reported in 
4045bd8deadSopenharmony_ci                  MAX_VERTEX_UNITS_ARB, then the error
4055bd8deadSopenharmony_ci                  INVALID_VALUE is generated."
4065bd8deadSopenharmony_ci
4075bd8deadSopenharmony_ci    - (2.10 p. 29) Add after the second paragraph:
4085bd8deadSopenharmony_ci
4095bd8deadSopenharmony_ci          "When vertex blending is enabled, the vertex's eye
4105bd8deadSopenharmony_ci          coordinates are found as:
4115bd8deadSopenharmony_ci
4125bd8deadSopenharmony_ci            (xe)    n-1               (xo)
4135bd8deadSopenharmony_ci            (ye)  =  SUM  w_i * M_i * (yo)
4145bd8deadSopenharmony_ci            (ze)    i=0               (zo)
4155bd8deadSopenharmony_ci            (we)                      (wo)
4165bd8deadSopenharmony_ci
4175bd8deadSopenharmony_ci          where M_i is the i'th model-view matrix, w_i is the
4185bd8deadSopenharmony_ci                  vertex's associated weight for vertex unit i, 
4195bd8deadSopenharmony_ci
4205bd8deadSopenharmony_ci                        and
4215bd8deadSopenharmony_ci
4225bd8deadSopenharmony_ci                        n = ACTIVE_VERTEX_UNITS_ARB
4235bd8deadSopenharmony_ci                        "
4245bd8deadSopenharmony_ci
4255bd8deadSopenharmony_ci    - (2.10.2 p. 31) Change the first paragraph to:
4265bd8deadSopenharmony_ci
4275bd8deadSopenharmony_ci          "The projection matrix and model-view matrices are set
4285bd8deadSopenharmony_ci          with a variety of commands. The affected matrix is
4295bd8deadSopenharmony_ci          determined by the current matrix mode. The current
4305bd8deadSopenharmony_ci          matrix mode is set with
4315bd8deadSopenharmony_ci
4325bd8deadSopenharmony_ci            void MatrixMode( enum mode );
4335bd8deadSopenharmony_ci
4345bd8deadSopenharmony_ci          which takes one of the pre-defined constants TEXTURE,
4355bd8deadSopenharmony_ci          MODELVIEW, COLOR, PROJECTION, or MODELVIEWn_ARB. TEXTURE
4365bd8deadSopenharmony_ci          is described later in section 2.10.2, and COLOR is
4375bd8deadSopenharmony_ci          described in section 3.6.3. If the current matrix mode is
4385bd8deadSopenharmony_ci          MODELVIEW, the matrix operations apply to the model-view
4395bd8deadSopenharmony_ci          matrix; if PROJECTION, then they apply to the projection
4405bd8deadSopenharmony_ci          matrix; if MODLEVIEWn_ARB, then they apply to the n'th
4415bd8deadSopenharmony_ci          model-view matrix. MODELVIEW0_ARB is aliased to
4425bd8deadSopenharmony_ci          MODELVIEW."  
4435bd8deadSopenharmony_ci
4445bd8deadSopenharmony_ci        - (2.10.2 p. 34) Changed the second paragraph to read:
4455bd8deadSopenharmony_ci
4465bd8deadSopenharmony_ci              "There is a stack of matrices for each of the matrix
4475bd8deadSopenharmony_ci                  modes. For MODELVIEWn mode, the stack depth is at least 32
4485bd8deadSopenharmony_ci                  (that is, there is a stack of at least 32 MODELVIEWn
4495bd8deadSopenharmony_ci                  matrices). Additionally, all modelview matrices must
4505bd8deadSopenharmony_ci                  have the same stack depth. ..."
4515bd8deadSopenharmony_ci
4525bd8deadSopenharmony_ci        - (2.10.2 p. 34) Changed the third paragraph to read:
4535bd8deadSopenharmony_ci
4545bd8deadSopenharmony_ci              "... and a stack of at least 32 4 x 4 matrices with an
4555bd8deadSopenharmony_ci                  associated stack pointer for each MODELVIEWn. ..."
4565bd8deadSopenharmony_ci          
4575bd8deadSopenharmony_ci
4585bd8deadSopenharmony_ci    - (2.10.3 p. 35) Added after the third paragraph:
4595bd8deadSopenharmony_ci
4605bd8deadSopenharmony_ci          "When vertex blending is enabled, the normal is transformed
4615bd8deadSopenharmony_ci          to eye space by:
4625bd8deadSopenharmony_ci
4635bd8deadSopenharmony_ci                                              n-1
4645bd8deadSopenharmony_ci              (nx' ny' nz') = (nx ny nz) Inv ( SUM w_i * Mu_i)
4655bd8deadSopenharmony_ci                                              i=0
4665bd8deadSopenharmony_ci          
4675bd8deadSopenharmony_ci            Alternatively implementations may choose to transform the
4685bd8deadSopenharmony_ci          normal to eye-space by:
4695bd8deadSopenharmony_ci          
4705bd8deadSopenharmony_ci                              n-1
4715bd8deadSopenharmony_ci              (nx' ny' nz') =  SUM w_i * (nx ny nz) Inv(Mu_i)
4725bd8deadSopenharmony_ci                              i=0
4735bd8deadSopenharmony_ci
4745bd8deadSopenharmony_ci          where Mu_i is the upper leftmost 3x3 matrix taken from the
4755bd8deadSopenharmony_ci          model-view for vertex unit i, w_i is the vertex's
4765bd8deadSopenharmony_ci          associated weight for vertex unit i, and
4775bd8deadSopenharmony_ci
4785bd8deadSopenharmony_ci                        n = ACTIVE_VERTEX_UNITS_ARB"
4795bd8deadSopenharmony_ci
4805bd8deadSopenharmony_ci
4815bd8deadSopenharmony_ci    - (2.10.3 p. 36) Added after the second paragraph:
4825bd8deadSopenharmony_ci
4835bd8deadSopenharmony_ci          "When vertex blending is enabled, rescaling is applied
4845bd8deadSopenharmony_ci          within each vertex unit independently. The rescale factor
4855bd8deadSopenharmony_ci          for each unit is derived from the modelview matrix for that
4865bd8deadSopenharmony_ci          unit. Normalization is applied to the transformed, blended
4875bd8deadSopenharmony_ci          normal."
4885bd8deadSopenharmony_ci
4895bd8deadSopenharmony_ciAdditions to Chapter 3:
4905bd8deadSopenharmony_ci
4915bd8deadSopenharmony_ci      None
4925bd8deadSopenharmony_ci
4935bd8deadSopenharmony_ciAdditions to Chapter 4:
4945bd8deadSopenharmony_ci
4955bd8deadSopenharmony_ci      None
4965bd8deadSopenharmony_ci
4975bd8deadSopenharmony_ciAdditions to Chapter 5:
4985bd8deadSopenharmony_ci
4995bd8deadSopenharmony_ci      None 
5005bd8deadSopenharmony_ci
5015bd8deadSopenharmony_ciAdditions to Chapter 6:
5025bd8deadSopenharmony_ci
5035bd8deadSopenharmony_ci      None
5045bd8deadSopenharmony_ci
5055bd8deadSopenharmony_ciAdditions to the GLX Specification
5065bd8deadSopenharmony_ci
5075bd8deadSopenharmony_ci      None
5085bd8deadSopenharmony_ci
5095bd8deadSopenharmony_ciGLX Protocol
5105bd8deadSopenharmony_ci
5115bd8deadSopenharmony_ci    Nine new GL rendering commandsl are added. The following commands
5125bd8deadSopenharmony_ci    are sent to the server as part of a glXRender request:
5135bd8deadSopenharmony_ci
5145bd8deadSopenharmony_ci           WeightbvARB
5155bd8deadSopenharmony_ci
5165bd8deadSopenharmony_ci                2    8+n    rendering command length
5175bd8deadSopenharmony_ci                2    220    rendering command opcode
5185bd8deadSopenharmony_ci                4    INT32  size
5195bd8deadSopenharmony_ci                1*n  INT8   weights
5205bd8deadSopenharmony_ci           
5215bd8deadSopenharmony_ci           WeightubvARB
5225bd8deadSopenharmony_ci
5235bd8deadSopenharmony_ci                2    8+n    rendering command length
5245bd8deadSopenharmony_ci                2    221    rendering command opcode
5255bd8deadSopenharmony_ci                4    INT32  size
5265bd8deadSopenharmony_ci                1*n  CARD8  weights
5275bd8deadSopenharmony_ci           
5285bd8deadSopenharmony_ci           WeightsvARB
5295bd8deadSopenharmony_ci
5305bd8deadSopenharmony_ci                2    8+2*n  rendering command length
5315bd8deadSopenharmony_ci                2    222    rendering command opcode
5325bd8deadSopenharmony_ci                4    INT32  size
5335bd8deadSopenharmony_ci                2*n  INT16  weights
5345bd8deadSopenharmony_ci
5355bd8deadSopenharmony_ci           WeightusvARB
5365bd8deadSopenharmony_ci
5375bd8deadSopenharmony_ci                2    8+2*n  rendering command length
5385bd8deadSopenharmony_ci                2    223    rendering command opcode
5395bd8deadSopenharmony_ci                4    INT32  size
5405bd8deadSopenharmony_ci                2*n  CARD16 weights
5415bd8deadSopenharmony_ci
5425bd8deadSopenharmony_ci           WeightivARB
5435bd8deadSopenharmony_ci
5445bd8deadSopenharmony_ci                2    8+4*n  rendering command length
5455bd8deadSopenharmony_ci                2    224    rendering command opcode
5465bd8deadSopenharmony_ci                4    INT32  size
5475bd8deadSopenharmony_ci                4*n  INT32  weights
5485bd8deadSopenharmony_ci
5495bd8deadSopenharmony_ci           WeightuivARB
5505bd8deadSopenharmony_ci
5515bd8deadSopenharmony_ci                2    8+4*n  rendering command length
5525bd8deadSopenharmony_ci                2    225    rendering command opcode
5535bd8deadSopenharmony_ci                4    INT32  size
5545bd8deadSopenharmony_ci                4*n  CARD32 weights
5555bd8deadSopenharmony_ci
5565bd8deadSopenharmony_ci           VertexBlendARB
5575bd8deadSopenharmony_ci
5585bd8deadSopenharmony_ci                2    8      rendering command length
5595bd8deadSopenharmony_ci                2    226    rendering command opcode
5605bd8deadSopenharmony_ci                4    INT32  count
5615bd8deadSopenharmony_ci
5625bd8deadSopenharmony_ci        WeightfvARB
5635bd8deadSopenharmony_ci
5645bd8deadSopenharmony_ci            2           8+4*n           rendering command length
5655bd8deadSopenharmony_ci            2           227             rendering command opcode
5665bd8deadSopenharmony_ci            4           INT32           size
5675bd8deadSopenharmony_ci            4*n         FLOAT32         weights
5685bd8deadSopenharmony_ci
5695bd8deadSopenharmony_ci        WeightdvARB
5705bd8deadSopenharmony_ci
5715bd8deadSopenharmony_ci            2           8+8*n           rendering command length
5725bd8deadSopenharmony_ci            2           228             rendering command opcode
5735bd8deadSopenharmony_ci            4           INT32           size
5745bd8deadSopenharmony_ci            8*n         FLOAT64         weights
5755bd8deadSopenharmony_ci
5765bd8deadSopenharmony_ciErrors
5775bd8deadSopenharmony_ci      
5785bd8deadSopenharmony_ci      INVALID_VALUE is generated if the <size> parameter for
5795bd8deadSopenharmony_ci          WeightvARB or WeightPointerARB is greater than
5805bd8deadSopenharmony_ci          MAX_VERTEX_UNITS_ARB, or if WEIGHT_SUM_UNITY_ARB is enabled
5815bd8deadSopenharmony_ci          and <size> is equal to MAX_VERTEX_UNITS_ARB
5825bd8deadSopenharmony_ci
5835bd8deadSopenharmony_ci          INVALID_VALUE is generated if the <count> parameter to
5845bd8deadSopenharmony_ci          VertexBlendARB is greater than MAX_VERTEX_UNITS_ARB or
5855bd8deadSopenharmony_ci      if <count> is equal to zero.
5865bd8deadSopenharmony_ci
5875bd8deadSopenharmony_ciNew State
5885bd8deadSopenharmony_ci
5895bd8deadSopenharmony_ci      Modified State in Table 6.5:
5905bd8deadSopenharmony_ci
5915bd8deadSopenharmony_ciGet Value                Get Command Type     Initial Value Attribute
5925bd8deadSopenharmony_ci---------                ----------- ----     ------------- ---------
5935bd8deadSopenharmony_ciCURRENT_WEIGHT_ARB       GetFloatv   Rn       n=0 - 1.0     current
5945bd8deadSopenharmony_ci                                              n>0 - 0.0 
5955bd8deadSopenharmony_ci    
5965bd8deadSopenharmony_ci      Modified State in Table 6.6:
5975bd8deadSopenharmony_ci
5985bd8deadSopenharmony_ciGet Value                 Get Command Type   Initial Value Attribute
5995bd8deadSopenharmony_ci---------                 ----------- ----   ------------- --------- 
6005bd8deadSopenharmony_ciWEIGHT_ARRAY_ARB          IsEnabled   1*B    False         vert-array
6015bd8deadSopenharmony_ciWEIGHT_ARRAY_TYPE_ARB     GetIntegerv 1*Z2   FLOAT         vert-array
6025bd8deadSopenharmony_ciWEIGHT_ARRAY_SIZE_ARB     GetIntegerv 1*Z+   0             vert-array
6035bd8deadSopenharmony_ciWEIGHT_ARRAY_STRIDE_ARB   GetIntegerv 1*Z+   0             vert-array
6045bd8deadSopenharmony_ciWEIGHT_ARRAY_POINTER_ARB  GetPointerv 1*Y    0             vert-array
6055bd8deadSopenharmony_ci
6065bd8deadSopenharmony_ci
6075bd8deadSopenharmony_ci      Modified state in Table 6.7:
6085bd8deadSopenharmony_ci
6095bd8deadSopenharmony_ciGet Value                Get Command Type     Initial Value Attribute
6105bd8deadSopenharmony_ci---------                ----------- ----     ------------- ---------
6115bd8deadSopenharmony_ciMODELVIEWn_ARB           GetFloatv   1*32*xM4 Identity          -
6125bd8deadSopenharmony_ciACTIVE_VERTEX_UNITS_ARB  GetIntegerv Z+       1             transform
6135bd8deadSopenharmony_ciVERTEX_BLEND_ARB         IsEnabled   B        False         transform
6145bd8deadSopenharmony_ci                                                            enable
6155bd8deadSopenharmony_ci
6165bd8deadSopenharmony_ci      Modified state in Table 6.25:
6175bd8deadSopenharmony_ci
6185bd8deadSopenharmony_ciGet Value                Get Command Type     Minmum Value  Attribute
6195bd8deadSopenharmony_ci---------                ----------- ----     ------------  ---------
6205bd8deadSopenharmony_ciMAX_VERTEX_UNITS_ARB     GetIntegerv Z+       2                 -
6215bd8deadSopenharmony_ci
6225bd8deadSopenharmony_ciAdditions to Appendix A:
6235bd8deadSopenharmony_ci
6245bd8deadSopenharmony_ci      None
6255bd8deadSopenharmony_ci
6265bd8deadSopenharmony_ciRevision History
6275bd8deadSopenharmony_ci
6285bd8deadSopenharmony_ci  * 1.0 (October 16, 2000) - initial version
6295bd8deadSopenharmony_ci
6305bd8deadSopenharmony_ci  * 1.1 (March 12, 2002) - added GLX protocol for Weight[df]v
6315bd8deadSopenharmony_ci
6325bd8deadSopenharmony_ci  * 1.2 (March 21, 2002) - correct Weightdv protocol
6335bd8deadSopenharmony_ci
6345bd8deadSopenharmony_ci  * 1.3 (November 4, 2006) - updated contact info after ATI/AMD merger
635