15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    EXT_draw_buffers2
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_EXT_draw_buffers2
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Mike Strauss, NVIDIA Corporation (mstrauss 'at' nvidia.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciStatus
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Multi vendor extension
165bd8deadSopenharmony_ci 
175bd8deadSopenharmony_ci    Shipping for GeForce 8 Series (November 2006) 
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciVersion
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Last Modified Date:         10/02/2010
225bd8deadSopenharmony_ci    NVIDIA Revision:            11
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciNumber
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    340
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ciDependencies
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci    The extension is written against the OpenGL 2.0 Specification.
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    OpenGL 2.0 is required.
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ciOverview
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    This extension builds upon the ARB_draw_buffers extension and provides
375bd8deadSopenharmony_ci    separate blend enables and color write masks for each color output.  In
385bd8deadSopenharmony_ci    ARB_draw_buffers (part of OpenGL 2.0), separate values can be written to
395bd8deadSopenharmony_ci    each color buffer, but the blend enable and color write mask are global
405bd8deadSopenharmony_ci    and apply to all color outputs.
415bd8deadSopenharmony_ci
425bd8deadSopenharmony_ci    While this extension does provide separate blend enables, it does not
435bd8deadSopenharmony_ci    provide separate blend functions or blend equations per color output.
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ciNew Procedures and Functions
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ci    void ColorMaskIndexedEXT(uint buf, boolean r, boolean g,
495bd8deadSopenharmony_ci                             boolean b, boolean a);
505bd8deadSopenharmony_ci
515bd8deadSopenharmony_ci    void GetBooleanIndexedvEXT(enum value, uint index, boolean *data);
525bd8deadSopenharmony_ci
535bd8deadSopenharmony_ci    void GetIntegerIndexedvEXT(enum value, uint index, int *data);
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    void EnableIndexedEXT(enum target, uint index);
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    void DisableIndexedEXT(enum target, uint index);
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    boolean IsEnabledIndexedEXT(enum target, uint index);    
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ciNew Tokens
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    None.
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 2.0 Specification (OpenGL Operation)
665bd8deadSopenharmony_ci
675bd8deadSopenharmony_ci    None.
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization)
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci    None.
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 2.0 Specification (Per-Fragment
745bd8deadSopenharmony_ciOperations and the Frame Buffer)
755bd8deadSopenharmony_ci
765bd8deadSopenharmony_ci    Modify the thrid paragraph of section 4.1.8 (Blending), p206, to 
775bd8deadSopenharmony_ci    read as follows:
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    Blending is dependent on the incoming fragment's alpha value and
805bd8deadSopenharmony_ci    that of the corresponding currently stored pixel.  Blending applies
815bd8deadSopenharmony_ci    only in RGBA mode; in color index mode it is bypassed.  Blending
825bd8deadSopenharmony_ci    is enabled or disabled for an individual draw buffer using
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci        void EnableIndexedEXT(GLenum target, GLuint index);
855bd8deadSopenharmony_ci        void DisableIndexedEXT(GLenum target, GLuint index);
865bd8deadSopenharmony_ci
875bd8deadSopenharmony_ci    <target> is the symbolic constant BLEND and <index> is an integer
885bd8deadSopenharmony_ci    i specifying the draw buffer associated with the symbolic constant
895bd8deadSopenharmony_ci    DRAW_BUFFERi.  If the color buffer associated with DRAW_BUFFERi is 
905bd8deadSopenharmony_ci    one of FRONT, BACK, LEFT, RIGHT, or FRONT_AND_BACK (specifying 
915bd8deadSopenharmony_ci    multiple color buffers), then the state enabled or disabled is 
925bd8deadSopenharmony_ci    applicable for all of the buffers.  Blending can be enabled or 
935bd8deadSopenharmony_ci    disabled for all draw buffers using Enable or Disable with the 
945bd8deadSopenharmony_ci    symbolic constant BLEND.  If blending is disabled for a particular 
955bd8deadSopenharmony_ci    draw buffer, or if logical operation on color values is enabled 
965bd8deadSopenharmony_ci    (section 4.1.10), proceed to the next operation.
975bd8deadSopenharmony_ci
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    Modify the first paragraph of section 4.1.8 (Blending - Blending 
1005bd8deadSopenharmony_ci    State), p209, to read as follows:
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci    The state required for blending is two integers for the RGB and
1035bd8deadSopenharmony_ci    alpha blend equations, four integers indicating the source and
1045bd8deadSopenharmony_ci    destination RGB and alpha blending functions, four floating-point
1055bd8deadSopenharmony_ci    values to store the RGBA constant blend color, and n bits 
1065bd8deadSopenharmony_ci    indicating whether blending is enabled or disabled for each of the 
1075bd8deadSopenharmony_ci    n draw buffers.  The initial blend equations for RGB and alpha are 
1085bd8deadSopenharmony_ci    both FUNC_ADD.  The initial blending functions are ONE for the 
1095bd8deadSopenharmony_ci    source RGB and alpha functions, and ZERO for the destination RGB 
1105bd8deadSopenharmony_ci    and alpha functions.  The initial constant blend color is 
1115bd8deadSopenharmony_ci    (R, G, B, A) = (0, 0, 0, 0).  Initially, blending is disabled for 
1125bd8deadSopenharmony_ci    all draw buffers.
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci    Modify the first paragraph of section 4.2.2 (Fine Control of Buffer
1165bd8deadSopenharmony_ci    Updates) to read as followS:
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    Three commands are used to mask the writing of bits to each of the 
1195bd8deadSopenharmony_ci    logical draw buffers after all per-fragment operations have been
1205bd8deadSopenharmony_ci    performed.
1215bd8deadSopenharmony_ci
1225bd8deadSopenharmony_ci    The commands
1235bd8deadSopenharmony_ci
1245bd8deadSopenharmony_ci        void IndexMask(uint mask);
1255bd8deadSopenharmony_ci        void ColorMask(boolean r, boolean g, boolean b, boolean a);
1265bd8deadSopenharmony_ci        void ColorMaskIndexedEXT(uint buf, boolean r, boolean g, 
1275bd8deadSopenharmony_ci                                 boolean b, boolean a);
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    control writes to the active draw buffers.  
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci    The least significant n bits of <mask>, where n is the number of 
1325bd8deadSopenharmony_ci    bits in a color index buffer, specify a mask.  Where a 1 appears in
1335bd8deadSopenharmony_ci    this mask, the corresponding bit in the color index buffer (or 
1345bd8deadSopenharmony_ci    buffers) is written; where a 0 appears, the bit is not written.  
1355bd8deadSopenharmony_ci    This mask  applies only in color index mode.  
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci    In RGBA mode, ColorMask and ColorMaskIndexedEXT are used to mask
1385bd8deadSopenharmony_ci    the writing of R, G, B and A values to the draw buffer or buffers.  
1395bd8deadSopenharmony_ci    ColorMaskIndexedEXT sets the mask for a particular draw buffer.  
1405bd8deadSopenharmony_ci    The mask for DRAW_BUFFERi is modified by passing i as the parameter
1415bd8deadSopenharmony_ci    <buf>.  <r>, <g>, <b>, and <a> indicate whether R, G, B, or A 
1425bd8deadSopenharmony_ci    values, respectively, are written or not (a value of TRUE means 
1435bd8deadSopenharmony_ci    that the corresponding  value is written).  The mask specified by 
1445bd8deadSopenharmony_ci    <r>, <g>, <b>, and <a> is applied to the color buffer associated 
1455bd8deadSopenharmony_ci    with DRAW_BUFFERi.  If DRAW_BUFFERi is one of FRONT, BACK, LEFT, 
1465bd8deadSopenharmony_ci    RIGHT, or FRONT_AND_BACK (specifying multiple color buffers) then 
1475bd8deadSopenharmony_ci    the mask is applied to all of the buffers.  ColorMask sets the mask
1485bd8deadSopenharmony_ci    for all draw buffers to the same values as specified by <r>, <g>, 
1495bd8deadSopenharmony_ci    <b>, and <a>.
1505bd8deadSopenharmony_ci
1515bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 2.0 Specification (Special Functions)
1525bd8deadSopenharmony_ci
1535bd8deadSopenharmony_ci    None.
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 2.0 Specification (State and
1565bd8deadSopenharmony_ciState Requests)
1575bd8deadSopenharmony_ci
1585bd8deadSopenharmony_ci    Modify the second paragraph of section 6.1.1 (Simple Queries)
1595bd8deadSopenharmony_ci    p244 to read as follows:
1605bd8deadSopenharmony_ci
1615bd8deadSopenharmony_ci    ...<data> is a pointer to a scalar or array of the indicated
1625bd8deadSopenharmony_ci    type in which to place the returned data.
1635bd8deadSopenharmony_ci
1645bd8deadSopenharmony_ci        void GetBooleanIndexedvEXT(enum target, uint index, boolean *data);
1655bd8deadSopenharmony_ci        void GetIntegerIndexedvEXT(enum target, uint index, int *data);
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci    are used to query indexed state.  <target> is the name of 
1685bd8deadSopenharmony_ci    the indexed state and <index> is the index of the particular
1695bd8deadSopenharmony_ci    element being queried.  <data> is a pointer to a scalar or array
1705bd8deadSopenharmony_ci    of the indicated type in which to place the returned data.  In
1715bd8deadSopenharmony_ci    addition
1725bd8deadSopenharmony_ci
1735bd8deadSopenharmony_ci        boolean IsEnabled(enum value);
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ci    can be used to determine if <value> is currently enabled (as with
1765bd8deadSopenharmony_ci    Enable) or disabled.
1775bd8deadSopenharmony_ci
1785bd8deadSopenharmony_ci        boolean IsEnabledIndexedEXT(enum target, uint index);
1795bd8deadSopenharmony_ci
1805bd8deadSopenharmony_ci    can be used to determine if the index state corresponding to
1815bd8deadSopenharmony_ci    <target> and <index> is enabled or disabled.
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 2.0 Specification (Invariance)
1845bd8deadSopenharmony_ci
1855bd8deadSopenharmony_ci    None.
1865bd8deadSopenharmony_ci 
1875bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci    None.
1905bd8deadSopenharmony_ci
1915bd8deadSopenharmony_ciGLX Protocol
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ci    The following rendering commands are sent to the server as part of
1945bd8deadSopenharmony_ci    a glXRender request:
1955bd8deadSopenharmony_ci
1965bd8deadSopenharmony_ci    ColorMaskIndexedEXT
1975bd8deadSopenharmony_ci
1985bd8deadSopenharmony_ci        2      12              rendering command length
1995bd8deadSopenharmony_ci        2      352             rendering command opcode
2005bd8deadSopenharmony_ci        4      CARD32          buf
2015bd8deadSopenharmony_ci        1      BOOL            r
2025bd8deadSopenharmony_ci        1      BOOL            g
2035bd8deadSopenharmony_ci        1      BOOL            b
2045bd8deadSopenharmony_ci        1      BOOL            a
2055bd8deadSopenharmony_ci
2065bd8deadSopenharmony_ci    EnableIndexedEXT
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci        2      12              rendering length
2095bd8deadSopenharmony_ci        2      353             rendering command opcode
2105bd8deadSopenharmony_ci        4      ENUM            target
2115bd8deadSopenharmony_ci        4      CARD32          index
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci    DisableIndexedEXT
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci        2      12    	       rendering length
2165bd8deadSopenharmony_ci        2      354             rendering command opcode
2175bd8deadSopenharmony_ci        4      ENUM            target
2185bd8deadSopenharmony_ci        4      CARD32          index
2195bd8deadSopenharmony_ci
2205bd8deadSopenharmony_ci    The following new non-rendering commands are added:
2215bd8deadSopenharmony_ci
2225bd8deadSopenharmony_ci    GetBooleanIndexedvEXT
2235bd8deadSopenharmony_ci
2245bd8deadSopenharmony_ci        1      CARD8           opcode(X assigned)
2255bd8deadSopenharmony_ci        1      210             GLX opcode
2265bd8deadSopenharmony_ci        2      4               request length
2275bd8deadSopenharmony_ci        4      GLX_CONTEXT_TAG context tag
2285bd8deadSopenharmony_ci        4      ENUM            value
2295bd8deadSopenharmony_ci        4      CARD32          index
2305bd8deadSopenharmony_ci    =>
2315bd8deadSopenharmony_ci        1                      reply
2325bd8deadSopenharmony_ci        1                      unused
2335bd8deadSopenharmony_ci        2      CARD16          sequence number
2345bd8deadSopenharmony_ci        4      m               reply length, m = (n == 1 ? 0 :(n+p)/4)
2355bd8deadSopenharmony_ci        4                      unused
2365bd8deadSopenharmony_ci        4      CARD32          n (number of parameter components)
2375bd8deadSopenharmony_ci
2385bd8deadSopenharmony_ci        if (n == 1) this follows:
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ci        1      BOOL            data
2415bd8deadSopenharmony_ci        15                     unused
2425bd8deadSopenharmony_ci
2435bd8deadSopenharmony_ci        otherwise this follows:
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci        16                     unused
2465bd8deadSopenharmony_ci        n*1    LISTofBOOL      data
2475bd8deadSopenharmony_ci        p                      unused, p = pad(n)
2485bd8deadSopenharmony_ci
2495bd8deadSopenharmony_ci    GetIntegerIndexedvEXT
2505bd8deadSopenharmony_ci
2515bd8deadSopenharmony_ci        1      CARD8           opcode(X assigned)
2525bd8deadSopenharmony_ci        1      211             GLX opcode
2535bd8deadSopenharmony_ci        2      4               request length
2545bd8deadSopenharmony_ci        4      GLX_CONTEXT_TAG context tag
2555bd8deadSopenharmony_ci        4      ENUM            value
2565bd8deadSopenharmony_ci        4      CARD32          index
2575bd8deadSopenharmony_ci    =>
2585bd8deadSopenharmony_ci        1                      reply
2595bd8deadSopenharmony_ci        1                      unused
2605bd8deadSopenharmony_ci        2      CARD16          sequence number
2615bd8deadSopenharmony_ci        4      m               reply length, m = (n == 1 ? 0 : n)
2625bd8deadSopenharmony_ci        4                      unused
2635bd8deadSopenharmony_ci        4      CARD32          n (number of parameter components)
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ci        if (n == 1) this follows:
2665bd8deadSopenharmony_ci
2675bd8deadSopenharmony_ci        4      CARD32          data
2685bd8deadSopenharmony_ci        12                     unused
2695bd8deadSopenharmony_ci
2705bd8deadSopenharmony_ci        otherwise this follows:
2715bd8deadSopenharmony_ci
2725bd8deadSopenharmony_ci        16                     unused
2735bd8deadSopenharmony_ci        4*n    LISTofCARD32    data
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ci   IsEnabledIndexedEXT
2765bd8deadSopenharmony_ci
2775bd8deadSopenharmony_ci        1      CARD8           opcode(X assigned)
2785bd8deadSopenharmony_ci        1      212             GLX opcode
2795bd8deadSopenharmony_ci        2      4               request length
2805bd8deadSopenharmony_ci        4      GLX_CONTEXT_TAG context tag
2815bd8deadSopenharmony_ci        4      ENUM            target
2825bd8deadSopenharmony_ci        4      CARD32          index
2835bd8deadSopenharmony_ci   =>
2845bd8deadSopenharmony_ci        1                      reply
2855bd8deadSopenharmony_ci        1                      unused
2865bd8deadSopenharmony_ci        2      CARD16          sequence number
2875bd8deadSopenharmony_ci        4      0               reply length
2885bd8deadSopenharmony_ci        4      BOOL32          return value
2895bd8deadSopenharmony_ci        20                     unused
2905bd8deadSopenharmony_ci
2915bd8deadSopenharmony_ciErrors
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ci    The error INVALID_ENUM is generated by EnableIndexedEXT and
2945bd8deadSopenharmony_ci    DisableIndexedEXT if the <target> parameter is not BLEND.
2955bd8deadSopenharmony_ci
2965bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated by EnableIndexedEXT and 
2975bd8deadSopenharmony_ci    DisableIndexeEXT if the <target> parameter is BLEND and the <index>
2985bd8deadSopenharmony_ci    parameter is outside the range [0, MAX_DRAW_BUFFERS-1].
2995bd8deadSopenharmony_ci
3005bd8deadSopenharmony_ci    The error INVALID_ENUM is generated by IsEnabledIndexedEXT if the 
3015bd8deadSopenharmony_ci    <target> parameter is not BLEND.
3025bd8deadSopenharmony_ci
3035bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated by IsEnabledIndexedEXT if
3045bd8deadSopenharmony_ci    the <target> parameter is BLEND and the <index> parameter is 
3055bd8deadSopenharmony_ci    outside the range [0, MAX_DRAW_BUFFERS-1].
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated by DrawBufferColorMaskEXT
3085bd8deadSopenharmony_ci    if the <buf> parameter is outside the range 
3095bd8deadSopenharmony_ci    [0, MAX_DRAW_BUFFERS-1].
3105bd8deadSopenharmony_ci
3115bd8deadSopenharmony_ci    The error INVALID_ENUM is generated by GetBooleanIndexedvEXT if the 
3125bd8deadSopenharmony_ci    <target> parameter is not BLEND.
3135bd8deadSopenharmony_ci
3145bd8deadSopenharmony_ci    The error INVALID_OPERATION is generated by GetBooleanIndexedvEXT 
3155bd8deadSopenharmony_ci    if the <target> parameter is BLEND and the <index> parameter is
3165bd8deadSopenharmony_ci    outside the range [0, MAX_DRAW_BUFFERS-1].
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ciNew State
3195bd8deadSopenharmony_ci
3205bd8deadSopenharmony_ci    Modify (table 6.20, p281), modifying the entry for BLEND and adding 
3215bd8deadSopenharmony_ci    a new one.
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci
3245bd8deadSopenharmony_ci    Get Target  Type Get Command         Value Description                        Section       Attribute
3255bd8deadSopenharmony_ci    ----------  ---- ------------------- ----- ---------------------------------- ------- -------------------
3265bd8deadSopenharmony_ci    BLEND       B    IsEnabled           False Blending enabled for draw buffer 0  4.1.8  color-buffer/enable
3275bd8deadSopenharmony_ci    BLEND       B    IsEnabledIndexedEXT False Blending enabled for draw buffer i  4.1.8  color-buffer/enable
3285bd8deadSopenharmony_ci                                         where i is specified as <index>
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci
3315bd8deadSopenharmony_ci    Modify (table 6.21, p282), modifying the entry for COLOR_WRITEMASK
3325bd8deadSopenharmony_ci    and adding a new one.
3335bd8deadSopenharmony_ci
3345bd8deadSopenharmony_ci    Get Value       Type Get Command           Value Description                        Section Attribute
3355bd8deadSopenharmony_ci    --------------- ---- --------------------- ----- ---------------------------------- ------- ------------
3365bd8deadSopenharmony_ci    COLOR_WRITEMASK 4xB  GetBooleanv           True  Color write mask for draw buffer 0 4.2.2   color-buffer
3375bd8deadSopenharmony_ci    COLOR_WRITEMASK 4xB  GetBooleanIndexedvEXT True  Color write mask for draw buffer i 4.2.2   color-buffer
3385bd8deadSopenharmony_ci                                                     where i is specified as <index>
3395bd8deadSopenharmony_ci                                                              
3405bd8deadSopenharmony_ciIssues
3415bd8deadSopenharmony_ci
3425bd8deadSopenharmony_ci    1.  Should the extension provide support for per draw buffer index 
3435bd8deadSopenharmony_ci    masks as well as per draw buffer color masks?
3445bd8deadSopenharmony_ci
3455bd8deadSopenharmony_ci        RESOLVED:  No.  Color index rendering is not interesting
3465bd8deadSopenharmony_ci        enough to warrant extending the API in this direction.
3475bd8deadSopenharmony_ci    
3485bd8deadSopenharmony_ci    2.  Should the API for specifying separate color write masks be
3495bd8deadSopenharmony_ci    based on DrawBuffers() (specifying an array of write masks at 
3505bd8deadSopenharmony_ci    once)?
3515bd8deadSopenharmony_ci
3525bd8deadSopenharmony_ci        RESOLVED:  No.  There are two ways to mimic the DrawBuffers()
3535bd8deadSopenharmony_ci        API.  A function, ColorMasks(), could take an an element count 
3545bd8deadSopenharmony_ci        and an array of four element boolean arrays as parameters.  
3555bd8deadSopenharmony_ci        Each four element boolean array contains a set of red, green, 
3565bd8deadSopenharmony_ci        blue, and alpha write masks for a specific color buffer.  An 
3575bd8deadSopenharmony_ci        alternative is a ColorMasks() function that takes an element 
3585bd8deadSopenharmony_ci        count and four parallel boolean arrays with one array per color
3595bd8deadSopenharmony_ci        channel.  Neither approach is particularly clean.  A cleaner
3605bd8deadSopenharmony_ci        approach, taken by ColorMaskIndexedEXT(), is to specify a 
3615bd8deadSopenharmony_ci        color mask for a single draw buffer where the draw buffer is
3625bd8deadSopenharmony_ci        specified as a parameter to the function.
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ci    3.  How should ColorMask() affect the per color buffer write masks?
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci        RESOLVED:  ColorMask() should set all color buffer write masks
3675bd8deadSopenharmony_ci        to the same values.  This is backwards compatible with the way
3685bd8deadSopenharmony_ci        ColorMask() behaves in the absence of this extension.
3695bd8deadSopenharmony_ci
3705bd8deadSopenharmony_ci    4.  What should GetBooleanv return when COLOR_WRITEMASK is queried?
3715bd8deadSopenharmony_ci
3725bd8deadSopenharmony_ci        RESOLVED:  COLOR_WRITEMASK should return
3735bd8deadSopenharmony_ci        DRAW_BUFFER0_COLOR_WRITEMASK_EXT.  This is backwards compatible
3745bd8deadSopenharmony_ci        with the way the query works without this extension.  To query 
3755bd8deadSopenharmony_ci        the writemask associated with a particular draw buffer, an 
3765bd8deadSopenharmony_ci        application can use GetBooleanIndexedvEXT.
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci    5.  How are separate blend enables controlled?  Should a new
3795bd8deadSopenharmony_ci    function be introduced, or do Enable() and Disable() provide
3805bd8deadSopenharmony_ci    sufficient functionality?
3815bd8deadSopenharmony_ci
3825bd8deadSopenharmony_ci        RESOLVED:  This extension introduces new functions
3835bd8deadSopenharmony_ci        EnableIndexedEXT and DisableIndexedEXT that can be used to
3845bd8deadSopenharmony_ci        enable/disable individual states of a state array.  These
3855bd8deadSopenharmony_ci        functions are introduced because there is a trend towards
3865bd8deadSopenharmony_ci        introducing arrays of state.  Rather than creating enums for
3875bd8deadSopenharmony_ci        each index in the array, it is better to give applications
3885bd8deadSopenharmony_ci        a mechanism for accessing a particular element of the state
3895bd8deadSopenharmony_ci        array given the name of the state and an index into the array.
3905bd8deadSopenharmony_ci
3915bd8deadSopenharmony_ci    6.  What effect does enabling or disabling blending using BLEND
3925bd8deadSopenharmony_ci    have on per draw buffer blend enables?
3935bd8deadSopenharmony_ci
3945bd8deadSopenharmony_ci        RESOLVED:  BLEND, used with Enable() and Disable(), should 
3955bd8deadSopenharmony_ci        enable or disable all per draw buffer blend enables.  This is
3965bd8deadSopenharmony_ci        similar to the way that ColorMask() affects the per draw
3975bd8deadSopenharmony_ci        buffer write masks.
3985bd8deadSopenharmony_ci      
3995bd8deadSopenharmony_ci    7.  What does DRAW_BUFFERi mean in the context of functions like
4005bd8deadSopenharmony_ci    ColorMaskIndexedEXT?
4015bd8deadSopenharmony_ci    
4025bd8deadSopenharmony_ci        PROPOSED:  When DrawBuffersARB is called with a list of buffers 
4035bd8deadSopenharmony_ci        to be used for MRT rendering, DRAW_BUFFERi implies an index into 
4045bd8deadSopenharmony_ci        the list of buffers.  That is, DRAW_BUFFER0 refers to the zeroeth
4055bd8deadSopenharmony_ci        buffer in the array passed to DrawBuffersARB (or any of the other
4065bd8deadSopenharmony_ci        ways to specify multiple render targets).  MAX_DRAW_BUFFERS is
4075bd8deadSopenharmony_ci        also to be understood in this context to mean the number of currently
4085bd8deadSopenharmony_ci        active draw buffers.
4095bd8deadSopenharmony_ci
4105bd8deadSopenharmony_ciRevision History
4115bd8deadSopenharmony_ci
4125bd8deadSopenharmony_ci    Rev.    Date    Author    Changes
4135bd8deadSopenharmony_ci    ----  --------  --------  -----------------------------------------
4145bd8deadSopenharmony_ci    11    10/02/10  srahman   Added GLX protocol.
4155bd8deadSopenharmony_ci
4165bd8deadSopenharmony_ci    10    07/11/08  joburgess Added a clarification of ColorMaskIndexedEXT / DrawBuffersARB interaction.
4175bd8deadSopenharmony_ci    
4185bd8deadSopenharmony_ci     9    02/09/07  pbrown    Updated status section (now released).
4195bd8deadSopenharmony_ci
4205bd8deadSopenharmony_ci     8    10/23/06  pbrown    Fixed typo in the prototype for
4215bd8deadSopenharmony_ci                              GetIntegerIndexedvEXT -- <data> should be an
4225bd8deadSopenharmony_ci                              integer pointer.  Moved issues to the end.
4235bd8deadSopenharmony_ci
4245bd8deadSopenharmony_ci     7    10/21/06  barthold  Added revision history
4255bd8deadSopenharmony_ci
4265bd8deadSopenharmony_ci    1-6             mstrauss  Internal spec development.
4275bd8deadSopenharmony_ci
428