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