15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    AMD_interleaved_elements
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_AMD_interleaved_elements
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Graham Sellers (graham.sellers 'at' amd.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciContributors
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Sergey Leontyev, AMD
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ciStatus
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ci    Shipping
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ciVersion
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ci    Last Modified Date: 2 May 2013
245bd8deadSopenharmony_ci    Revision: 3
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ciNumber
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ci    431
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ciDependencies
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    This extension is written against version 4.3 of the Core Profile OpenGL
335bd8deadSopenharmony_ci    Specification, dated August 6, 2012.
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ciOverview
365bd8deadSopenharmony_ci
375bd8deadSopenharmony_ci        The glDrawElements function and its variants (instanced and indirect,
385bd8deadSopenharmony_ci    for example) allow OpenGL to draw indexed arrays of vertices. Since its
395bd8deadSopenharmony_ci    inception, OpenGL has supported unsigned bytes, unsigned shorts and
405bd8deadSopenharmony_ci    unsigned integers as index types. However, all enabled vertex arrays may
415bd8deadSopenharmony_ci    be represented by at most one shared index.
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci        A common scenario in graphics rendering is that several faces share
445bd8deadSopenharmony_ci    a vertex where, for each face some properties of a vertex (position and
455bd8deadSopenharmony_ci    texture coordinates, for example) should be common but others must be
465bd8deadSopenharmony_ci    unique (colors, normals, and so on). Consider a mesh of a cube with
475bd8deadSopenharmony_ci    per-face normals, for example. There are 8 vertices and 6 normals, and 12
485bd8deadSopenharmony_ci    triangles (where each face of the cube is represented as two triangles).
495bd8deadSopenharmony_ci    To render this cube, we must compute the 24 unique permutations of
505bd8deadSopenharmony_ci    position and normal and build a new element list to index into it. In
515bd8deadSopenharmony_ci    fact, any advantage of indexed draw is lost here as the number of required
525bd8deadSopenharmony_ci    permutations is equal to the final vertex count required to draw the
535bd8deadSopenharmony_ci    object.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci        This extension allows OpenGL to process multi-component packed element
565bd8deadSopenharmony_ci    data. The maximum size of a vertex's index data is not increased, but the
575bd8deadSopenharmony_ci    facility to store 2 16-bit or 2 or 4 8-bit indices per vertex is introduced.
585bd8deadSopenharmony_ci    Each vertex attribute is given a swizzle property to allow its index to
595bd8deadSopenharmony_ci    be sourced from one of up to 4 channels of index data. This effectively
605bd8deadSopenharmony_ci    allows an application to supply multiple interleaved streams of index data
615bd8deadSopenharmony_ci    to OpenGL. Each vertex attribute is given a 'channel selector' to select
625bd8deadSopenharmony_ci    one of the up to 4 channels of vertex index information presented to
635bd8deadSopenharmony_ci    OpenGL. This enables the use-case described above and many more.
645bd8deadSopenharmony_ci    The swizzle parameter is also applied to vertex indices passed to shaders,
655bd8deadSopenharmony_ci    and updates to the definition of base vertex parameters and primitive
665bd8deadSopenharmony_ci    restart are applied.
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ciNew Procedures and Functions
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    void VertexAttribParameteriAMD(uint index, enum pname, int param);
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ciNew Tokens
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    Accepted by the <pname> parameter of VertexAttribParameteriAMD and
755bd8deadSopenharmony_ci    GetVertexAttrib{iv|dv|fv|Iiv|Iuiv|Ldv}:
765bd8deadSopenharmony_ci
775bd8deadSopenharmony_ci        VERTEX_ELEMENT_SWIZZLE_AMD                          0x91A4
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    Selected by the <pname> parameter of ProgramParameteri and GetProgramiv:
805bd8deadSopenharmony_ci
815bd8deadSopenharmony_ci        VERTEX_ID_SWIZZLE_AMD                               0x91A5
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ci    Accepted by the <param> parameter of VertexAttribParameteriAMD:
845bd8deadSopenharmony_ci
855bd8deadSopenharmony_ci        RED                                                 0x1903
865bd8deadSopenharmony_ci        GREEN                                               0x1904
875bd8deadSopenharmony_ci        BLUE                                                0x1905
885bd8deadSopenharmony_ci        ALPHA                                               0x1906
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ci    Accepted by the <type> parameter of DrawElements, DrawElementsInstanced,
915bd8deadSopenharmony_ci    DrawElementsInstancedBaseInstance and DrawElementsIndirect:
925bd8deadSopenharmony_ci
935bd8deadSopenharmony_ci        RG8UI                                               0x8238
945bd8deadSopenharmony_ci        RG16UI                                              0x823A
955bd8deadSopenharmony_ci        RGBA8UI                                             0x8D7C
965bd8deadSopenharmony_ci
975bd8deadSopenharmony_ciIP Status
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    None.
1005bd8deadSopenharmony_ci
1015bd8deadSopenharmony_ciAdditions to Chapter 7 of the OpenGL Core Profile Specification, Version 4.3,
1025bd8deadSopenharmony_ci"Programs and Shaders"
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ci    Add to the parameters accepted by ProgramParameteri, p.82:
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci        If <pname> is VERTEX_ID_SWIZZLE_AMD, <value> should be set to
1075bd8deadSopenharmony_ci    RED, GREEN, BLUE or ALPHA to indicate that the first, second, third
1085bd8deadSopenharmony_ci    or fourth component of the vertex element vector be propagated to the
1095bd8deadSopenharmony_ci    gl_VertexID vertex shader input as described in subsection 11.1.3.9.
1105bd8deadSopenharmony_ci    The initial value of VERTEX_ID_SWIZZLE_AMD is RED.
1115bd8deadSopenharmony_ci
1125bd8deadSopenharmony_ciAdditions to Chapter 10 of the OpenGL Core Profile Specification, Version 4.3,
1135bd8deadSopenharmony_ci"Vertex Specification and Drawing Commands"
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci    Insert Subsection 10.3.2, "Vertex Attribute Parameters", renumber
1165bd8deadSopenharmony_ci    subsequent sections:
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci        Each vertex attribute possesses a set of parameters that control
1195bd8deadSopenharmony_ci    its behavior. Parameters for a vertex attribute may be set by calling:
1205bd8deadSopenharmony_ci
1215bd8deadSopenharmony_ci        void VertexAttribParameteriAMD(uint index,
1225bd8deadSopenharmony_ci                                       enum pname,
1235bd8deadSopenharmony_ci                                       int param);
1245bd8deadSopenharmony_ci
1255bd8deadSopenharmony_ci    where <index> identifies the generic vertex attribute array whose parameter
1265bd8deadSopenharmony_ci    to modify. If <pname> is VERTEX_ELEMENT_SWIZZLE_AMD, then <param>
1275bd8deadSopenharmony_ci    specifies the component of the vertex element that is to be used to
1285bd8deadSopenharmony_ci    source the vertex indices for the selected vertex attribute. Its value
1295bd8deadSopenharmony_ci    may be RED, GREEN, BLUE or ALPHA to select the first, second, third or
1305bd8deadSopenharmony_ci    fourth component of the vertex element.
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci    In section 10.3.2, "Primitive Restart", modify the language describing
1335bd8deadSopenharmony_ci    how the restart index is compared to the vertex element index, p.302
1345bd8deadSopenharmony_ci    as follows:
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci        When one of the Draw* commands transfers a set of generic attribute
1375bd8deadSopenharmony_ci    array elements to the GL, if all present index channels in the passed
1385bd8deadSopenharmony_ci    element index are equal to the primitive restart index, then the GL
1395bd8deadSopenharmony_ci    does not process those elements as a vertex. Instead ... *include
1405bd8deadSopenharmony_ci    remainder of section verbatim.*
1415bd8deadSopenharmony_ci
1425bd8deadSopenharmony_ci    In the description of DrawElementsOneInstance (p. 311), replace the
1435bd8deadSopenharmony_ci    sentence beginning "The ith element transferred by..." with:
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci    For each enabled vertex attribute, the ith element transferred by
1465bd8deadSopenharmony_ci    DrawElementsOneInstance will be taken from that attribute's selected
1475bd8deadSopenharmony_ci    channel of the element whose values are stored currently bound element
1485bd8deadSopenharmony_ci    array buffer at offset indices + i.
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ci    Replace the paragraph explaining the <type> parameter to
1515bd8deadSopenharmony_ci    DrawElementsOneIntance (p. 311):
1525bd8deadSopenharmony_ci
1535bd8deadSopenharmony_ci        <type> may be UNSIGNED_BYTE, UNSIGNED_SHORT or UNSIGNED_INT,
1545bd8deadSopenharmony_ci    indicating that the index values are of GL type ubyte, ushort or uint,
1555bd8deadSopenharmony_ci    respectively, RG8UI or RG16UI, indicating that the index values are pairs
1565bd8deadSopenharmony_ci    of GL type ubyte or ushort, respectively, or RGBA8UI, indicating that
1575bd8deadSopenharmony_ci    index values are quadruplets of GL type ubyte. ...
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci    Modify the language describing the DrawElements*BaseVertex* functions
1605bd8deadSopenharmony_ci    on p.314 as follows:
1615bd8deadSopenharmony_ci
1625bd8deadSopenharmony_ci        ... are equivalent to the commands with the same base name (without
1635bd8deadSopenharmony_ci    the BaseVertex suffix), except that the ith element transferred by
1645bd8deadSopenharmony_ci    the corresponding draw call will be taken from the selected channel
1655bd8deadSopenharmony_ci    of the element vector indices[i] + <basevertex>. That is, the value of
1665bd8deadSopenharmony_ci    <basevertex> is added to the vertex index after channel selection.
1675bd8deadSopenharmony_ci    ... *include remainder of description verbatim.*
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ci    Add to the list of accepted values for the <pname> parameter to
1705bd8deadSopenharmony_ci    GetVertexAttrib* in Section 10.6, "Vertex Array and Vertex Array Object
1715bd8deadSopenharmony_ci    Queries", p. 317:
1725bd8deadSopenharmony_ci
1735bd8deadSopenharmony_ci        ... VERTEX_ELEMENT_SWIZZLE_AMD.
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ciAdditions to Chapter 11 of the OpenGL Core Profile Specification, Version 4.3,
1765bd8deadSopenharmony_ci"Programmable Vertex Processing"
1775bd8deadSopenharmony_ci
1785bd8deadSopenharmony_ci    In Subsection 11.1.3.9, "Shader Inputs", p.338, modify the description
1795bd8deadSopenharmony_ci    of gl_VertexID as follows:
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ci        gl_VertexID holds the integer index i stored in the selected component
1825bd8deadSopenharmony_ci    of the element implicitly passed by DrawArrays or one of the other drawing
1835bd8deadSopenharmony_ci    commands defined in section 10.5. The component of the element data
1845bd8deadSopenharmony_ci    stored in gl_VertexID may be specified by calling ProgramParameteri with
1855bd8deadSopenharmony_ci    <pname> set to VERTEX_ID_SWIZZLE_AMD as specified in section 7.3.
1865bd8deadSopenharmony_ci
1875bd8deadSopenharmony_ciNew State
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci    Append to Table 23.4, "Vertex Array Object State (cont.)":
1905bd8deadSopenharmony_ci
1915bd8deadSopenharmony_ci    +------------------------------+----------+---------------------+----------------+---------------------------------------------+----------+
1925bd8deadSopenharmony_ci    | Get Value                    | Type     | Get Command         | Initial Value  | Description                                 | Sec      |
1935bd8deadSopenharmony_ci    +------------------------------+----------+---------------------+----------------+---------------------------------------------+----------+
1945bd8deadSopenharmony_ci    | VERTEX_ELEMENT_SWIZZLE_AMD   | 16 * x E | GetVertexAttribiv   | RED            | Channel selector for vertex attribute index | 10.3.2   |
1955bd8deadSopenharmony_ci    +------------------------------+----------+---------------------+----------------+---------------------------------------------+----------+
1965bd8deadSopenharmony_ci
1975bd8deadSopenharmony_ci    Append to Table 23.39, "Program Object State (cont.)":
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci    +------------------------+-------+---------------+----------------+------------------------------------+----------+
2005bd8deadSopenharmony_ci    | Get Value              | Type  | Get Command   | Initial Value  | Description                        | Sec      |
2015bd8deadSopenharmony_ci    +------------------------+-------+---------------+----------------+------------------------------------+----------+
2025bd8deadSopenharmony_ci    | VERTEX_ID_SWIZZLE_AMD  | E     | GetProgramiv  | RED            | Channel selector for gl_VertexID   | 11.1.3.9 |
2035bd8deadSopenharmony_ci    +------------------------+-------+---------------+----------------+------------------------------------+----------+
2045bd8deadSopenharmony_ci
2055bd8deadSopenharmony_ciNew Implementation Dependent State
2065bd8deadSopenharmony_ci
2075bd8deadSopenharmony_ci    None.
2085bd8deadSopenharmony_ci
2095bd8deadSopenharmony_ciErrors
2105bd8deadSopenharmony_ci
2115bd8deadSopenharmony_ci    INVALID_ENUM is generated by VertexAttribParameteri if <pname> is not an
2125bd8deadSopenharmony_ci    accepted token.
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ci    INVALID_VALUE is generated by VertexAttribParameteri if <value> is not an
2155bd8deadSopenharmony_ci    acceptable value for the specified value of <pname>.
2165bd8deadSopenharmony_ci
2175bd8deadSopenharmony_ciExamples
2185bd8deadSopenharmony_ci
2195bd8deadSopenharmony_ci    // Basic per-face normals
2205bd8deadSopenharmony_ci
2215bd8deadSopenharmony_ci    // Normal data
2225bd8deadSopenharmony_ci    static const float normals[] =
2235bd8deadSopenharmony_ci    {
2245bd8deadSopenharmony_ci        0.0f, 0.0f, 1.0f,   // Positive Z
2255bd8deadSopenharmony_ci        0.0f, 0.0f, -1.0f,  // Negative Z
2265bd8deadSopenharmony_ci        0.0f, 1.0f, 0.0f,   // Positive Y
2275bd8deadSopenharmony_ci        0.0f, -1.0f, 0.0f,  // Negative Y
2285bd8deadSopenharmony_ci        1.0f, 0.0f, 0.0f,   // Positive X
2295bd8deadSopenharmony_ci        -1.0f, 0.0f, 0.0f,  // Negative X
2305bd8deadSopenharmony_ci    };
2315bd8deadSopenharmony_ci
2325bd8deadSopenharmony_ci    // Position data
2335bd8deadSopenharmony_ci    static const float positions[] =
2345bd8deadSopenharmony_ci    {
2355bd8deadSopenharmony_ci        -1.0f, -1.0f, -1.0f,
2365bd8deadSopenharmony_ci        // <More data here>
2375bd8deadSopenharmony_ci        1.0f, 1.0f, 1.0f
2385bd8deadSopenharmony_ci    };
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ci    // Put the above data into a buffer and bind them as separate vertex
2415bd8deadSopenharmony_ci    // attributes.
2425bd8deadSopenharmony_ci    GLuint vertex_buffer;
2435bd8deadSopenharmony_ci    glGenBuffers(1, &vertex_buffer);
2445bd8deadSopenharmony_ci    glBindBuffer(GL_ARRAY_BUFFER, sizeof(positions) + sizeof(normals),
2455bd8deadSopenharmony_ci                 NULL, GL_STATIC_DRAW);
2465bd8deadSopenharmony_ci    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(positions), positions);
2475bd8deadSopenharmony_ci    glBufferSubData(GL_ARRAY_BUFFER, sizeof(positions),
2485bd8deadSopenharmony_ci                    sizeof(normals), normals);
2495bd8deadSopenharmony_ci    // ... etc. Set up vertex attributes.
2505bd8deadSopenharmony_ci
2515bd8deadSopenharmony_ci    // Index data
2525bd8deadSopenharmony_ci    static const unsigned short indices[] =
2535bd8deadSopenharmony_ci    {
2545bd8deadSopenharmony_ci        0, 0,       // vertex 0: position index, normal index
2555bd8deadSopenharmony_ci        1, 0,       // vertex 1: position index, normal index
2565bd8deadSopenharmony_ci        2, 0,       // vertex 2: position index, normal index
2575bd8deadSopenharmony_ci        1, 0,       // vertex 3: position index, normal index
2585bd8deadSopenharmony_ci        2, 0,       // ... six vertices, forming
2595bd8deadSopenharmony_ci        3, 0,       // ... two complete triangles, all using normals[0]
2605bd8deadSopenharmony_ci        0, 1,
2615bd8deadSopenharmony_ci        2, 1,
2625bd8deadSopenharmony_ci        3, 1,
2635bd8deadSopenharmony_ci        3, 1,
2645bd8deadSopenharmony_ci        4, 1,       // ... six more vertices, forming
2655bd8deadSopenharmony_ci        2, 1,       // ... two more triangles, all using normals[1]
2665bd8deadSopenharmony_ci        // etc...
2675bd8deadSopenharmony_ci    };
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci    GLuint index_buffer;
2705bd8deadSopenharmony_ci    glGenBuffers(1, &index_buffer);
2715bd8deadSopenharmony_ci    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer);
2725bd8deadSopenharmony_ci    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices),
2735bd8deadSopenharmony_ci                 indices, GL_STATIC_DRAW);
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci    // Okay... here's the new code. Set up vertex attribute 0 (position) to
2765bd8deadSopenharmony_ci    // consume the RED channel of the vertex index and attribute 1 (normal)
2775bd8deadSopenharmony_ci    // to consume the GREEN (second) channel of the vertex index. Then
2785bd8deadSopenharmony_ci    // draw with GL_RG16UI (two channel, 16-bit unsigned int) as the index
2795bd8deadSopenharmony_ci    // type.
2805bd8deadSopenharmony_ci    glVertexAttribParameteriAMD(0, GL_VERTEX_ELEMENT_SWIZZLE_AMD, GL_RED);
2815bd8deadSopenharmony_ci    glVertexAttribParameteriAMD(1, GL_VERTEX_ELEMENT_SWIZZLE_AMD, GL_GREEN);
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    glDrawElements(GL_TRIANGLES,
2845bd8deadSopenharmony_ci                   sizeof(indices) / (2 * sizeof(unsigned short)),
2855bd8deadSopenharmony_ci                   GL_RG16UI,
2865bd8deadSopenharmony_ci                   NULL);
2875bd8deadSopenharmony_ci
2885bd8deadSopenharmony_ciIssues
2895bd8deadSopenharmony_ci
2905bd8deadSopenharmony_ci    1) What is the effect of multi-channel vertex indices on gl_VertexID?
2915bd8deadSopenharmony_ci
2925bd8deadSopenharmony_ci       RESOLVED: The VERTEX_ID_SWIZZLE_AMD program parameter selects the
2935bd8deadSopenharmony_ci       channel of vector element types to be passed to gl_VertexID. By
2945bd8deadSopenharmony_ci       default, this is RED, which is backwards compatible with single-channel
2955bd8deadSopenharmony_ci       types.
2965bd8deadSopenharmony_ci
2975bd8deadSopenharmony_ci    2) How does this interact with primitive-restart indices?
2985bd8deadSopenharmony_ci
2995bd8deadSopenharmony_ci       RESOLVED: If all present channels of the vertex index vector match the
3005bd8deadSopenharmony_ci       restart index, then the element index is considered to match.
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    3) How does baseVertex affect this?
3035bd8deadSopenharmony_ci
3045bd8deadSopenharmony_ci       RESOLVED: The same base vertex value is added to each each vertex
3055bd8deadSopenharmony_ci       element component after channel selection for each of the enabled
3065bd8deadSopenharmony_ci       vertex attributes. This choice is primarily motivated by the behavior
3075bd8deadSopenharmony_ci       of base vertex elements encoded in indirect draw commands.
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci    4) Does this feature disable potential optimizations such as vertex
3105bd8deadSopenharmony_ci       reuse?
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ci       RESOVLED: No, vertex reuse should continue to function correctly.
3135bd8deadSopenharmony_ci       Each unique vector of indices should produce a unique set of vertex
3145bd8deadSopenharmony_ci       shader outputs (modulo side effects) and will hit a naive vertex
3155bd8deadSopenharmony_ci       reuse cache. Nothing precludes more advanced optimization strategies
3165bd8deadSopenharmony_ci       from being implemented, however.
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci    5) Is it possible to get at all two or four channels of the vertex index
3195bd8deadSopenharmony_ci       using a built-in input to the vertex shader?
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ci       RESOLVED: No. A single channel selection is provided. Providing more
3225bd8deadSopenharmony_ci       data could be implemented by introducing a new built-in integer vector
3235bd8deadSopenharmony_ci       input to the shader, but we have chosen not to do at this time.
3245bd8deadSopenharmony_ci
3255bd8deadSopenharmony_ci    6) What is the value of missing channels? For example, if we render with
3265bd8deadSopenharmony_ci       GL_RG16UI indices but set certain attributes to GL_BLUE or GL_ALPHA
3275bd8deadSopenharmony_ci       swizzle, what index value is used for those channels?
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci       RESOLVED: Zero.
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci    7) Are the traditional GL_RED, GL_GREEN, GL_BLUE, and GL_ALPHA terms
3325bd8deadSopenharmony_ci       appropriate for this use?
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci       RESOLVED: Not really, but are they appropriate for normals? g-buffers?
3355bd8deadSopenharmony_ci       Any other arbitrary data that might be in a buffer or texture?
3365bd8deadSopenharmony_ci       It's not worth introducing new enumerants just for this - we'll use
3375bd8deadSopenharmony_ci       R, G, B, A.
3385bd8deadSopenharmony_ci
3395bd8deadSopenharmony_ciRevision History
3405bd8deadSopenharmony_ci
3415bd8deadSopenharmony_ci    Rev.    Date      Author    Changes
3425bd8deadSopenharmony_ci    ----  --------    --------  -----------------------------------------
3435bd8deadSopenharmony_ci
3445bd8deadSopenharmony_ci     3    05/02/2013  gsellers  Shipping. Finalize spec ready for posting.
3455bd8deadSopenharmony_ci     2    01/25/2013  gsellers  Resolve issues 1, 2, 3. Polish spec.
3465bd8deadSopenharmony_ci     1    01/17/2013  gsellers  Initial draft
3475bd8deadSopenharmony_ci
348