15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ARB_vertex_array_bgra 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ARB_vertex_array_bgra 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Jason Green, TransGaming 125bd8deadSopenharmony_ci Gavriel State, TransGaming 135bd8deadSopenharmony_ci Daniel Koch, TransGaming 145bd8deadSopenharmony_ci Rob Barris, Blizzard 155bd8deadSopenharmony_ci Mark Krenek, Aspyr 165bd8deadSopenharmony_ci Ryan Gordon, Destineer 175bd8deadSopenharmony_ci Nicholas Vining, Destineer 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ciContact 205bd8deadSopenharmony_ci 215bd8deadSopenharmony_ci Mark Kilgard, NVIDIA (mjk 'at' nvidia.com) 225bd8deadSopenharmony_ci Daniel Koch, TransGaming (daniel 'at' transgaming.com) 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ciNotice 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ci Copyright (c) 2009-2013 The Khronos Group Inc. Copyright terms at 275bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ciSpecification Update Policy 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 325bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL Working Group. For 335bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 345bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 355bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 365bd8deadSopenharmony_ci described in more detail at 375bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ciStatus 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci Complete. Approved by the ARB on July 3, 2009. 425bd8deadSopenharmony_ci Implemented by NVIDIA, October 2008 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ciVersion 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci Last Modified Date: June 26, 2009 475bd8deadSopenharmony_ci Version: 2 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ciNumber 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ci ARB Extension #68 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ciDependencies 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci This extension is written against the OpenGL 2.1 Specification but 565bd8deadSopenharmony_ci can apply to OpenGL 1.1 and up. 575bd8deadSopenharmony_ci 585bd8deadSopenharmony_ci This extension interacts with EXT_vertex_array. 595bd8deadSopenharmony_ci 605bd8deadSopenharmony_ci This extension interacts with EXT_secondary_color. 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ci This extension interacts with NV_vertex_program. 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci This extension interacts with ARB_vertex_program. 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci This extension interacts with ARB_vertex_shader. 675bd8deadSopenharmony_ci 685bd8deadSopenharmony_ciOverview 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci This extension provides a single new component format for vertex 715bd8deadSopenharmony_ci arrays to read 4-component unsigned byte vertex attributes with a 725bd8deadSopenharmony_ci BGRA component ordering. 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ci OpenGL expects vertex arrays containing 4 unsigned bytes per 755bd8deadSopenharmony_ci element to be in the RGBA, STRQ, or XYZW order (reading components 765bd8deadSopenharmony_ci left-to-right in their lower address to higher address order). 775bd8deadSopenharmony_ci Essentially the order the components appear in memory is the order 785bd8deadSopenharmony_ci the components appear in the resulting vertex attribute vector. 795bd8deadSopenharmony_ci 805bd8deadSopenharmony_ci However Direct3D has color (diffuse and specular) vertex arrays 815bd8deadSopenharmony_ci containing 4 unsigned bytes per element that are in a BGRA order 825bd8deadSopenharmony_ci (again reading components left-to-right in their lower address 835bd8deadSopenharmony_ci to higher address order). Direct3D calls this "ARGB" reading the 845bd8deadSopenharmony_ci components in the opposite order (reading components left-to-right 855bd8deadSopenharmony_ci in their higher address to lower address order). This ordering is 865bd8deadSopenharmony_ci generalized in the DirectX 10 by the DXGI_FORMAT_B8G8R8A8_UNORM 875bd8deadSopenharmony_ci format. 885bd8deadSopenharmony_ci 895bd8deadSopenharmony_ci For an OpenGL application to source color data from a vertex 905bd8deadSopenharmony_ci buffer formatted for Direct3D's color array format conventions, 915bd8deadSopenharmony_ci the application is forced to either: 925bd8deadSopenharmony_ci 935bd8deadSopenharmony_ci 1. Rely on a vertex program or shader to swizzle the color components 945bd8deadSopenharmony_ci from the BGRA to conventional RGBA order. 955bd8deadSopenharmony_ci 965bd8deadSopenharmony_ci 2. Re-order the color data components in the vertex buffer from 975bd8deadSopenharmony_ci Direct3D's native BGRA order to OpenGL's native RGBA order. 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci Neither option is entirely satisfactory. 1005bd8deadSopenharmony_ci 1015bd8deadSopenharmony_ci Option 1 means vertex shaders have to be re-written to source colors 1025bd8deadSopenharmony_ci differently. If the same vertex shader is used with vertex arrays 1035bd8deadSopenharmony_ci configured to source the color as 4 floating-point color components, 1045bd8deadSopenharmony_ci the swizzle for BGRA colors stored as 4 unsigned bytes is no longer 1055bd8deadSopenharmony_ci appropriate. The shader's swizzling of colors becomes dependent on 1065bd8deadSopenharmony_ci the type and number of color components. Ideally the vertex shader 1075bd8deadSopenharmony_ci should be independent from the format and component ordering of the 1085bd8deadSopenharmony_ci data it sources. 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci Option 2 is expensive because vertex buffers may have to be 1115bd8deadSopenharmony_ci reformatted prior to use. OpenGL treats the memory for vertex arrays 1125bd8deadSopenharmony_ci (whether client-side memory or buffer objects) as essentially untyped 1135bd8deadSopenharmony_ci memory and vertex arrays can be stored separately, interleaved, 1145bd8deadSopenharmony_ci or even interwoven (where multiple arrays overlap with differing 1155bd8deadSopenharmony_ci strides and formats). 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci Rather than force a re-ordering of either vertex array components 1185bd8deadSopenharmony_ci in memory or a vertex array format-dependent re-ordering of vertex 1195bd8deadSopenharmony_ci shader inputs, OpenGL can simply provide a vertex array format that 1205bd8deadSopenharmony_ci matches the Direct3D color component ordering. 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci This approach mimics that of the EXT_bgra extension for pixel and 1235bd8deadSopenharmony_ci texel formats except for vertex instead of image data. 1245bd8deadSopenharmony_ci 1255bd8deadSopenharmony_ciNew Procedures and Functions 1265bd8deadSopenharmony_ci 1275bd8deadSopenharmony_ci None 1285bd8deadSopenharmony_ci 1295bd8deadSopenharmony_ciNew Tokens 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ci Accepted by the <size> parameter of ColorPointer, 1325bd8deadSopenharmony_ci SecondaryColorPointer, and VertexAttribPointer: 1335bd8deadSopenharmony_ci 1345bd8deadSopenharmony_ci BGRA 0x80E1 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 2.1 Specification (OpenGL Operation) 1375bd8deadSopenharmony_ci 1385bd8deadSopenharmony_ci -- Section 2.8 "Vertex Arrays" (page 24) 1395bd8deadSopenharmony_ci 1405bd8deadSopenharmony_ci Replace the sentence beginning "size, when present, ..." with: 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci "size, when present, indicates the number of values per vertex that 1435bd8deadSopenharmony_ci are stored in the array as well as their component ordering." 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci Add these final sentences to the end of the same paragraph: 1465bd8deadSopenharmony_ci 1475bd8deadSopenharmony_ci "The error INVALID_VALUE is generated if size is BGRA and type is 1485bd8deadSopenharmony_ci not UNSIGNED_BYTE. The error INVALID_VALUE is generated by 1495bd8deadSopenharmony_ci VertexAttribPointer if size is BGRA and normalized is FALSE." 1505bd8deadSopenharmony_ci 1515bd8deadSopenharmony_ci Edit Table 2.4 "Vertex array sizes (values per vertex) and data types" 1525bd8deadSopenharmony_ci as follows: 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci * Rename the "Sizes" column to "Sizes and component ordering". 1555bd8deadSopenharmony_ci 1565bd8deadSopenharmony_ci * Add "BGRA" to the "Sizes and component order" column of the 1575bd8deadSopenharmony_ci following rows: ColorPointer, SecondaryColorPointer, and 1585bd8deadSopenharmony_ci VertexAttribPointer. 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ci These are the commands capable of accepting normalized 1615bd8deadSopenharmony_ci coordinates and accepting 4 for "size" plus the special case of 1625bd8deadSopenharmony_ci SecondaryColorPointer command. 1635bd8deadSopenharmony_ci 1645bd8deadSopenharmony_ci * Add the following sentence to the end of the table caption: 1655bd8deadSopenharmony_ci "If the size parameter is BGRA, the vertex array values are always 1665bd8deadSopenharmony_ci normalized irrespective of the Normalized column." 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ci "The one, two, three, or four values in an array that correspond to 1695bd8deadSopenharmony_ci a single vertex comprise an array element. When the BGRA token is 1705bd8deadSopenharmony_ci specified for size, it indicates four values. The values within 1715bd8deadSopenharmony_ci each array element are stored sequentially in memory. However if 1725bd8deadSopenharmony_ci the size is specified with BGRA, the first, second, third, and fourth 1735bd8deadSopenharmony_ci values of each array element are read from the third, second, first, 1745bd8deadSopenharmony_ci and fourth values in memory respectively." 1755bd8deadSopenharmony_ci 1765bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 2.1 Specification (Rasterization) 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci None 1795bd8deadSopenharmony_ci 1805bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 2.1 Specification (Per-Fragment 1815bd8deadSopenharmony_ciOperations and the Frame Buffer) 1825bd8deadSopenharmony_ci 1835bd8deadSopenharmony_ci None 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 2.1 Specification (Special 1865bd8deadSopenharmony_ciFunctions) 1875bd8deadSopenharmony_ci 1885bd8deadSopenharmony_ci None 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 2.1 Specification (State and 1915bd8deadSopenharmony_ciState Requests) 1925bd8deadSopenharmony_ci 1935bd8deadSopenharmony_ci None 1945bd8deadSopenharmony_ci 1955bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci None 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ciAdditions to the OpenGL Shading Language 2005bd8deadSopenharmony_ci 2015bd8deadSopenharmony_ci None 2025bd8deadSopenharmony_ci 2035bd8deadSopenharmony_ciGLX Protocol 2045bd8deadSopenharmony_ci 2055bd8deadSopenharmony_ci None 2065bd8deadSopenharmony_ci 2075bd8deadSopenharmony_ciErrors 2085bd8deadSopenharmony_ci 2095bd8deadSopenharmony_ci The error INVALID_VALUE is generated when ColorPointer, 2105bd8deadSopenharmony_ci SecondaryColorPointer, or VertexAttribPointer is 2115bd8deadSopenharmony_ci called with size set to BGRA and type is not UNSIGNED_BYTE. 2125bd8deadSopenharmony_ci 2135bd8deadSopenharmony_ci The error INVALID_VALUE is generated when VertexAttribPointer is 2145bd8deadSopenharmony_ci called with size set to BGRA and normalized is FALSE. 2155bd8deadSopenharmony_ci 2165bd8deadSopenharmony_ciDependencies on EXT_vertex_array 2175bd8deadSopenharmony_ci 2185bd8deadSopenharmony_ci This extension's additional behavior for ColorPointer apply to 2195bd8deadSopenharmony_ci ColorPointerEXT too. 2205bd8deadSopenharmony_ci 2215bd8deadSopenharmony_ciDependencies on EXT_secondary_color 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci This extension's additional behavior for SecondaryColorPointer 2245bd8deadSopenharmony_ci applies to SecondaryColorPointerEXT too. 2255bd8deadSopenharmony_ci 2265bd8deadSopenharmony_ciDependencies on NV_vertex_program 2275bd8deadSopenharmony_ci 2285bd8deadSopenharmony_ci This extension's additional behavior for VertexAttribPointer applies 2295bd8deadSopenharmony_ci to VertexAttribPointerNV too. 2305bd8deadSopenharmony_ci 2315bd8deadSopenharmony_ciDependencies on ARB_vertex_program and ARB_vertex_shader 2325bd8deadSopenharmony_ci 2335bd8deadSopenharmony_ci This extension's additional behavior for VertexAttribPointer applies 2345bd8deadSopenharmony_ci to VertexAttribPointerARB too. 2355bd8deadSopenharmony_ci 2365bd8deadSopenharmony_ciDependencies on ARB_compatibility and OpenGL 3.1 (or later): 2375bd8deadSopenharmony_ci 2385bd8deadSopenharmony_ci If using an OpenGL 3.1 (or later) and ARB_compatibility is not supported 2395bd8deadSopenharmony_ci ignore all references to ColorPointer and SecondaryColorPointer and the 2405bd8deadSopenharmony_ci associated state and queries. 2415bd8deadSopenharmony_ci 2425bd8deadSopenharmony_ciNew State 2435bd8deadSopenharmony_ci 2445bd8deadSopenharmony_ci Change tables 6.6 and 6.7 to fix Type column by making the type 2455bd8deadSopenharmony_ci a k-valued integer where k is 3, 2, and 5 for color, secondary, 2465bd8deadSopenharmony_ci and vertex attrib arrays respectively. 2475bd8deadSopenharmony_ci 2485bd8deadSopenharmony_ci(table 6.6, "Vertex Array Data", p. 271) 2495bd8deadSopenharmony_ci Get Value Type Get Command Initial Value Description Sec Attribute 2505bd8deadSopenharmony_ci --------- ---- ----------- ------------- --------------------- --- --------- 2515bd8deadSopenharmony_ci COLOR_ARRAY_SIZE Z3 GetIntegerv 4 Color components 2.8 vertex-array 2525bd8deadSopenharmony_ci per vertex 2535bd8deadSopenharmony_ci SECONDARY_COLOR_ARRAY_SIZE Z2 GetIntegerv 3 Secondary color 2.8 vertex-array 2545bd8deadSopenharmony_ci components per vertex 2555bd8deadSopenharmony_ci 2565bd8deadSopenharmony_ci(table 6.7, "Vertex Array Data (cont.)", p. 272) 2575bd8deadSopenharmony_ci Get Value Type Get Command Initial Value Description Sec Attribute 2585bd8deadSopenharmony_ci --------- -------- ----------- ------------- --------------------- --- --------- 2595bd8deadSopenharmony_ci VERTEX_ATTRIB_ARRAY_SIZE 16* x Z5 GetIntegerv 4 Vertex attrib array 2.8 vertex-array 2605bd8deadSopenharmony_ci size 2615bd8deadSopenharmony_ci 2625bd8deadSopenharmony_ciNew Implementation Dependent State 2635bd8deadSopenharmony_ci 2645bd8deadSopenharmony_ci None 2655bd8deadSopenharmony_ci 2665bd8deadSopenharmony_ciIssues 2675bd8deadSopenharmony_ci 2685bd8deadSopenharmony_ci 1. What should this extension be called? 2695bd8deadSopenharmony_ci 2705bd8deadSopenharmony_ci RESOLVED: ARB_vertex_array_bgra 2715bd8deadSopenharmony_ci 2725bd8deadSopenharmony_ci Because the extension adds a new "vertex array" format with the 2735bd8deadSopenharmony_ci "bgra" component ordering and assuming a normalized representation 2745bd8deadSopenharmony_ci as BGRA with UNSIGNED_BYTE would provide for image data. This 2755bd8deadSopenharmony_ci extension is the ARB-ratified version of EXT_vertex_array_bgra. 2765bd8deadSopenharmony_ci 2775bd8deadSopenharmony_ci 2. How should the vertex array API be changed? 2785bd8deadSopenharmony_ci 2795bd8deadSopenharmony_ci RESOLVED: Allow BGRA as a valid token for the size field of 2805bd8deadSopenharmony_ci vertex array specification commands. While the size parameter 2815bd8deadSopenharmony_ci is of type GLint, the valid sizes are in the 1 to 4 range so 2825bd8deadSopenharmony_ci the GL_BGRA token is easily distinguished from the existing 2835bd8deadSopenharmony_ci small integer values. 2845bd8deadSopenharmony_ci 2855bd8deadSopenharmony_ci This mimics the way OpenGL 1.1 changed the "components" field 2865bd8deadSopenharmony_ci of glTexImage1D and glTexImage2D to specify an internalformat 2875bd8deadSopenharmony_ci rather than simply a number of components from 1 to 4. 2885bd8deadSopenharmony_ci 2895bd8deadSopenharmony_ci This approach has the advantage of not adding any new commands 2905bd8deadSopenharmony_ci or tokens since the GL_BGRA token already exists. 2915bd8deadSopenharmony_ci 2925bd8deadSopenharmony_ci 3. What vertex array specification commands should accept the new 2935bd8deadSopenharmony_ci BGRA vertex array format for their size parameter? 2945bd8deadSopenharmony_ci 2955bd8deadSopenharmony_ci RESOLVED: All vertex array specification commands which accept 4 2965bd8deadSopenharmony_ci as a valid size plus the glSecondaryColorPointer command because 2975bd8deadSopenharmony_ci Direct3D allows a BGRA-ordered secondary color (its specular 2985bd8deadSopenharmony_ci vertex attribute) to be specified. 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci Because DirectX 10 makes its formats highly orthogonal and it 3015bd8deadSopenharmony_ci allows a corresponding format (DXGI_FORMAT_B8G8R8A8_UNORM), 3025bd8deadSopenharmony_ci the BGRA vertex array format should be similarly general. 3035bd8deadSopenharmony_ci 3045bd8deadSopenharmony_ci 4. Should a 4-component BGRA secondary color be allowed? 3055bd8deadSopenharmony_ci 3065bd8deadSopenharmony_ci RESOLVED: Yes. 3075bd8deadSopenharmony_ci 3085bd8deadSopenharmony_ci DirectX 9 supports a 4-component secondary color. All four 3095bd8deadSopenharmony_ci components should be available to a vertex shader or vertex 3105bd8deadSopenharmony_ci program. Fixed-function operation without lighting enabled 3115bd8deadSopenharmony_ci should pass through the secondary color alpha component. However 3125bd8deadSopenharmony_ci fixed-function lighting specifies its output secondary color alpha 3135bd8deadSopenharmony_ci is always output as 1 and ignores the input secondary color alpha. 3145bd8deadSopenharmony_ci 3155bd8deadSopenharmony_ci 5. So should 4 be allowed as a valid size parameter for 3165bd8deadSopenharmony_ci glSecondaryColorPointer? 3175bd8deadSopenharmony_ci 3185bd8deadSopenharmony_ci RESOLVED: Not for this extension. We leave it to another 3195bd8deadSopenharmony_ci extension or core revision could extend the secondary color to 3205bd8deadSopenharmony_ci 4 components. 3215bd8deadSopenharmony_ci 3225bd8deadSopenharmony_ci 6. Should the BGRA vertex array format only work with the 3235bd8deadSopenharmony_ci GL_UNSIGNED_BYTE type? 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci RESOLVED: Yes. 3265bd8deadSopenharmony_ci 3275bd8deadSopenharmony_ci This is consistent with Direct3D's use of the D3DCOLOR type which 3285bd8deadSopenharmony_ci is defined with a BGRA ordering and 8-bit normalized components. 3295bd8deadSopenharmony_ci 3305bd8deadSopenharmony_ci 7. How should the BGRA vertex array format's normalized behavior 3315bd8deadSopenharmony_ci interact with the "normalized" parameter of glVertexAttribPointer? 3325bd8deadSopenharmony_ci 3335bd8deadSopenharmony_ci RESOLVED: Since BGRA implies normalization, it should be an 3345bd8deadSopenharmony_ci error to request BGRA with the normalized parameter set to false. 3355bd8deadSopenharmony_ci 3365bd8deadSopenharmony_ci This ensures the following statement in the caption of table 2.4 3375bd8deadSopenharmony_ci remains true: "For generic vertex attributes, fixed-point data 3385bd8deadSopenharmony_ci are normalized if and only if the VertexAttribPointer normalized 3395bd8deadSopenharmony_ci flag is set." 3405bd8deadSopenharmony_ci 3415bd8deadSopenharmony_ci 8. Should the glVertexAttribIPointerEXT command accept GL_BGRA for 3425bd8deadSopenharmony_ci its size parameter? 3435bd8deadSopenharmony_ci 3445bd8deadSopenharmony_ci RESOLVED: No. Because the BGRA vertex array format implies 3455bd8deadSopenharmony_ci normalized component values, that is inconsistent with providing 3465bd8deadSopenharmony_ci integer vertex attributes. 3475bd8deadSopenharmony_ci 3485bd8deadSopenharmony_ci 9. Should this apply to glVertexPointer? 3495bd8deadSopenharmony_ci 3505bd8deadSopenharmony_ci RESOLVED: No. glVertexPointer doesn't support GL_UNSIGNED_BYTE 3515bd8deadSopenharmony_ci as a type so GL_BGRA doesn't make sense. 3525bd8deadSopenharmony_ci 3535bd8deadSopenharmony_ci 10. To what vertex arrays should this extension apply? 3545bd8deadSopenharmony_ci 3555bd8deadSopenharmony_ci RESOLVED: Just primary color (glColorPointer), secondary 3565bd8deadSopenharmony_ci color (glSecondaryColorPointer), and generic vertex attribs 3575bd8deadSopenharmony_ci (glVertexAttribPointer). 3585bd8deadSopenharmony_ci 3595bd8deadSopenharmony_ci The rationale is these are the formats that take 4 component 3605bd8deadSopenharmony_ci attributes that can be normalized (making a special exception to 3615bd8deadSopenharmony_ci treat the secondary color array as having 4 components for the 3625bd8deadSopenharmony_ci purpose of BGRA support to match Direct3D). Texture coordinate 3635bd8deadSopenharmony_ci sets and vertex positions are not normalized. Normals are 3645bd8deadSopenharmony_ci normalized but only 4 coordinates. 3655bd8deadSopenharmony_ci 3665bd8deadSopenharmony_ci 11. What Direct3D 9 functionality provides BGRA vertex arrays? 3675bd8deadSopenharmony_ci 3685bd8deadSopenharmony_ci You can specify BGRA vertex arrays with either Flexible Vertex 3695bd8deadSopenharmony_ci Formats (FVFs) or a Direct3D 9 Vertex Declaration. 3705bd8deadSopenharmony_ci 3715bd8deadSopenharmony_ci The FVF formats are D3DFVF_DIFFUSE and D3DFVF_SPECULAR. 3725bd8deadSopenharmony_ci 3735bd8deadSopenharmony_ci The Vertex Declaration declaration data type is 3745bd8deadSopenharmony_ci D3DDECLTYPE_D3DCOLOR. 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ciRevision History 3775bd8deadSopenharmony_ci 3785bd8deadSopenharmony_ci Rev. Date Author Changes 3795bd8deadSopenharmony_ci ---- -------- --------- ---------------------------------------- 3805bd8deadSopenharmony_ci 1 5/19/09 dgkoch copy & rename from EXT version rev 5. 3815bd8deadSopenharmony_ci 2 6/26/09 dgkoch add interactions with ARB_compatibility 3825bd8deadSopenharmony_ci correct Type and Initial values columns in 3835bd8deadSopenharmony_ci table 6.7 384