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