• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    EXT_draw_buffers
4
5Name Strings
6
7    GL_EXT_draw_buffers
8
9Contributors
10
11    Contributors to GL_NV_draw_buffers
12    Contributors to GL_NV_fbo_color_attachments
13    Contributors to the OpenGL ES 2.0 specification
14    Contributors to the OpenGLSL ES 1.0.17 specification
15    Contributors to the OpenGL ES 3.0 specification
16    Nicolas Capens, TransGaming Inc.
17    Shannon Woods, TransGaming Inc.
18    Alastair Patrick, Google Inc.
19    Kenneth Russell, Google Inc.
20    Greg Roth, NVIDIA Corporation
21    Ben Bowman, Imagination Technologies
22    Members of the WebGL and OpenGL ES working groups
23
24Contact
25
26    Daniel Koch (dkoch 'at' nvidia.com)
27
28Status
29
30    Complete
31
32Version
33
34    Last Modified Date: May 11, 2013
35    Revision: #8
36
37Number
38
39    OpenGL ES Extension #151
40
41Dependencies
42
43    OpenGL ES 2.0 is required.
44
45    The extension is written against the OpenGL ES 2.0 specification.
46
47    ANGLE_framebuffer_blit affects the definition of this extension.
48    APPLE_framebuffer_multisample affects the definitin of this extension.
49
50Overview
51
52    This extension increases the number of available framebuffer object
53    color attachment points, extends OpenGL ES 2.0 to allow multiple output
54    colors, and provides a mechanism for directing those outputs to
55    multiple color buffers.
56
57    This extension is similar to the combination of the GL_NV_draw_buffers
58    and GL_NV_fbo_color_attachments extensions, but imposes certain
59    restrictions informed by the OpenGL ES 3.0 API.
60
61New Procedures and Functions
62
63      void DrawBuffersEXT(sizei n, const enum *bufs);
64
65New Tokens
66
67    Accepted by the <pname> parameter of GetIntegerv:
68
69        MAX_COLOR_ATTACHMENTS_EXT             0x8CDF
70
71    Accepted by the <pname> parameters of GetIntegerv and GetFloatv:
72
73        MAX_DRAW_BUFFERS_EXT                  0x8824
74        DRAW_BUFFER0_EXT                      0x8825
75        DRAW_BUFFER1_EXT                      0x8826
76        DRAW_BUFFER2_EXT                      0x8827
77        DRAW_BUFFER3_EXT                      0x8828
78        DRAW_BUFFER4_EXT                      0x8829
79        DRAW_BUFFER5_EXT                      0x882A
80        DRAW_BUFFER6_EXT                      0x882B
81        DRAW_BUFFER7_EXT                      0x882C
82        DRAW_BUFFER8_EXT                      0x882D
83        DRAW_BUFFER9_EXT                      0x882E
84        DRAW_BUFFER10_EXT                     0x882F
85        DRAW_BUFFER11_EXT                     0x8830
86        DRAW_BUFFER12_EXT                     0x8831
87        DRAW_BUFFER13_EXT                     0x8832
88        DRAW_BUFFER14_EXT                     0x8833
89        DRAW_BUFFER15_EXT                     0x8834
90
91    Accepted by the <attachment> parameter of FramebufferRenderbuffer,
92    FramebufferTexture2D and GetFramebufferAttachmentParameteriv, and by
93    the <bufs> parameter of DrawBuffersEXT:
94
95        COLOR_ATTACHMENT0_EXT                      0x8CE0
96        COLOR_ATTACHMENT1_EXT                      0x8CE1
97        COLOR_ATTACHMENT2_EXT                      0x8CE2
98        COLOR_ATTACHMENT3_EXT                      0x8CE3
99        COLOR_ATTACHMENT4_EXT                      0x8CE4
100        COLOR_ATTACHMENT5_EXT                      0x8CE5
101        COLOR_ATTACHMENT6_EXT                      0x8CE6
102        COLOR_ATTACHMENT7_EXT                      0x8CE7
103        COLOR_ATTACHMENT8_EXT                      0x8CE8
104        COLOR_ATTACHMENT9_EXT                      0x8CE9
105        COLOR_ATTACHMENT10_EXT                     0x8CEA
106        COLOR_ATTACHMENT11_EXT                     0x8CEB
107        COLOR_ATTACHMENT12_EXT                     0x8CEC
108        COLOR_ATTACHMENT13_EXT                     0x8CED
109        COLOR_ATTACHMENT14_EXT                     0x8CEE
110        COLOR_ATTACHMENT15_EXT                     0x8CEF
111
112    The COLOR_ATTACHMENT0_EXT constant is equal to the
113    COLOR_ATTACHMENT0 constant.
114
115    Each COLOR_ATTACHMENT<i>_EXT adheres to COLOR_ATTACHMENT<i>_EXT
116    = COLOR_ATTACHMENT0_EXT + <i>.
117
118Changes to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization)
119
120    Section 3.2, (Multisampling). Replace the second paragraph:
121
122    An additional buffer, called the multisample buffer, is added to the
123    window system-provided framebuffer. Pixel sample values, including
124    color, depth, and stencil values, are stored in this buffer. Samples
125    contain separate color values for each fragment color. When the
126    window system-provided framebuffer includes a multisample buffer, it
127    does not include depth or stencil buffers, even if the multisample
128    buffer does not store depth or stencil values. Color buffers do
129    coexist with the multisample buffer, however.
130
131    Section 3.8.2, (Shader Execution) Replace subsection "Shader
132    Outputs":
133
134    The OpenGL ES Shading Language specification describes the values
135    that may be output by a fragment shader. These are gl_FragColor and
136    gl_FragData[n].  The final fragment color values or the final
137    fragment data values written by a fragment shader are clamped to the
138    range [0, 1] and then converted to fixed-point as described in
139    section 2.1.2 for framebuffer color components.
140
141    Writing to gl_FragColor specifies the fragment color (color number
142    zero) that will be used by subsequent stages of the pipeline.
143    Writing to gl_FragData[n] specifies the value of fragment color
144    number n. Any colors, or color components, associated with a
145    fragment that are not written by the fragment shader are undefined.
146    A fragment shader may not statically assign values to both
147    gl_FragColor and gl_FragData. In this case, a compile or link error
148    will result. A shader statically assigns a value to a variable if,
149    after preprocessing, it contains a statement that would write to the
150    variable, whether or not run-time flow of control will cause that
151    statement to be executed.
152
153Changes to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment
154Operations and the Frame Buffer)
155
156    Modify the overview of Chapter 4 and replace the sentences
157    of the fifth paragraph which read:
158
159    "The name of the color buffer of an application-created framebuffer
160    object is COLOR_ATTACHMENT0. The names of the depth and stencil buffers
161    are DEPTH_ATTACHMENT and STENCIL_ATTACHMENT."
162
163    With the following:
164
165    "A framebuffer object has an array of color buffer attachment points,
166    numbered zero through <n>, a depth buffer attachment point, and a
167    stencil buffer attachment point."
168
169    Insert Table 4.3 to Section 4.2.1 (and renumber subsequent tables):
170
171    Symbolic Constant                       Meaning
172    -----------------                       ---------------------
173    NONE                                    No buffer
174
175    COLOR_ATTACHMENT<i>_EXT (see caption)   Output fragment color to image
176                                            attached at color attachment
177                                            point i
178
179    Table 4.3: Arguments to DrawBuffersEXT when the context is bound to a
180    framebuffer object, and the buffers they indicate. <i> in
181    COLOR_ATTACHMENT<i>_EXT may range from zero to the value of
182    MAX_COLOR_ATTACHMENTS_EXT minus one.
183
184    Replace Section 4.2.1, "Selecting a Buffer for Writing" with the following:
185
186    "By default, color values are written into the front buffer for
187    single buffered surfaces or into the back buffer for back buffered
188    surfaces as determined when making the context current. To control
189    the color buffer into which each of the fragment color values is
190    written, DrawBuffersEXT is used.
191
192    The command
193
194      void DrawBuffersEXT(sizei n, const enum *bufs);
195
196    defines the draw buffers to which all fragment colors are written.
197    <n> specifies the number of buffers in <bufs>. <bufs> is a pointer
198    to an array of symbolic constants specifying the buffer to which
199    each fragment color is written.
200
201    Each buffer listed in <bufs> must be BACK, NONE, or one of the
202    values from table 4.3. Further, acceptable values for the constants
203    in <bufs> depend on whether the GL is using the default framebuffer
204    (i.e., DRAW_FRAMEBUFFER_BINDING is zero), or a framebuffer object
205    (i.e., DRAW_FRAMEBUFFER_BINDING is non-zero). For more information
206    about framebuffer objects, see section 4.4.
207
208    If the GL is bound to the default framebuffer, then <n> must be 1
209    and the constant must be BACK or NONE. When draw buffer zero is
210    BACK, color values are written into the sole buffer for single-
211    buffered contexts, or into the back buffer for double-buffered
212    contexts. If DrawBuffersEXT is supplied with a constant other than
213    BACK and NONE, or with a value of <n> other than 1, the error
214    INVALID_OPERATION is generated.
215
216    If the GL is bound to a draw framebuffer object, then each of the
217    constants must be one of the values listed in table 4.3. Calling
218    DrawBuffersEXT with <n> equal zero is equivalent to setting all the
219    draw buffers to NONE.
220
221    In both cases, the draw buffers being defined correspond in order to
222    the respective fragment colors. The draw buffer for fragment
223    colors beyond <n> is set to NONE.
224
225    The maximum number of draw buffers is implementation-dependent. The
226    number of draw buffers supported can be queried by calling
227    GetIntegerv with the symbolic constant MAX_DRAW_BUFFERS_EXT. An
228    INVALID_VALUE error is generated if <n> is greater than
229    MAX_DRAW_BUFFERS_EXT.
230
231    If the GL is bound to a draw framebuffer object, the <i>th buffer listed
232    in <bufs> must be COLOR_ATTACHMENT<i>_EXT or NONE. Specifying a
233    buffer out of order, BACK, or COLOR_ATTACHMENT<m>_EXT where <m> is
234    greater than or equal to the value of MAX_COLOR_ATTACHMENTS_EXT,
235    will generate the error INVALID_OPERATION.
236
237    If a fragment shader writes to "gl_FragColor", DrawBuffersEXT
238    specifies the set of draw buffers into which the color
239    written to "gl_FragColor" is written. If a fragment shader writes to
240    "gl_FragData", DrawBuffersEXT specifies a set of draw buffers
241    into which each of the multiple output colors defined by these
242    variables are separately written. If a fragment shader writes to
243    neither "gl_FragColor" nor "gl_FragData" the values of the
244    fragment colors following shader execution are undefined, and may
245    differ for each fragment color.
246
247    Indicating a buffer or buffers using DrawBuffersEXT causes
248    subsequent pixel color value writes to affect the indicated
249    buffers. If the GL is bound to a draw framebuffer object and a draw
250    buffer selects an attachment that has no image attached, then that
251    fragment color is not written.
252
253    Specifying NONE as the draw buffer for a fragment color will inhibit
254    that fragment color from being written.
255
256    The state required to handle color buffer selection for each
257    framebuffer is an integer for each supported fragment color. For the
258    default framebuffer, in the initial state the draw buffer for
259    fragment color zero is BACK if there is a default framebuffer
260    associated with the context, otherwise NONE. For framebuffer
261    objects, in the initial state the draw buffer for fragment color
262    zero is COLOR_ATTACHMENT0_EXT.
263
264    For both the default framebuffer and framebuffer objects, the
265    initial state of draw buffers for fragment colors other than zero is
266    NONE.
267
268    The value of the draw buffer selected for fragment color <i> can be
269    queried by calling GetIntegerv with the symbolic constant
270    DRAW_BUFFER<i>_EXT."
271
272    Modify Section 4.2.3 (Clearing the Buffers) and replace the first
273    two paragraphs with the following:
274
275    "The GL provides a means for setting portions of every pixel in a
276    particular buffer to the same value.  The argument to
277
278        void Clear(bitfield buf);
279
280    is the bitwise OR of a number of values indicating which buffers are
281    to be cleared. The values are COLOR_BUFFER_BIT, DEPTH_BUFFER_BIT, and
282    STENCIL_BUFFER_BIT, indicating the buffers currently enabled for color
283    writing, the depth buffer, and the stencil buffer (see below),
284    respectively. The value to which each buffer is cleared depends on
285    the setting of the clear value for that buffer.  If the mask is not a
286    bitwise OR of the specified values, then the error INVALID_VALUE is
287    generated.
288
289        void ClearColor(clampf r, clampf, g, clampf b, clampf a);
290
291    sets the clear value for fixed-point color buffers.  Each of the
292    specified components is clamped to [0, 1] and converted to fixed-point
293    as described in section 2.1.2 for framebuffer color components."
294
295    Replace the second paragraph of Section 4.4.1 (Binding and Managing
296    Framebuffer Objects) with the following:
297
298    "The namespace for framebuffer objects is the unsigned integers, with
299    zero reserved by OpenGL ES to refer to the default framebuffer. A
300    framebuffer object is created by binding an unused name to the
301    target FRAMEBUFFER, DRAW_FRAMEBUFFER, or READ_FRAMEBUFFER. The binding
302    is effected by calling
303
304        void BindFramebuffer(enum target, uint framebuffer);
305
306    with <target> set the desired framebuffer target and <framebuffer> set
307    to the unused name. The resulting framebuffer object is a new state
308    vector. There is a number of color attachment points, plus one each
309    for the depth and stencil attachment points. The number of color attachment
310    points is equal to the value of MAX_COLOR_ATTACHMENTS_EXT."
311
312    Replace the third item in the bulleted list in Section 4.4.1 (Binding
313    and Managing Framebuffer Objects) with the following:
314
315    " * The only color buffer bitplanes are the ones defined by the
316    framebuffer attachments points named COLOR_ATTACHMENT0_EXT through
317    COLOR_ATTACHMENT<n>_EXT."
318
319    Modify Section 4.4.3 (Renderbuffer Objects) in the
320    "Attaching Renderbuffer Images to a Framebuffer" subsection as follows:
321
322    Insert the following table:
323
324    Name of attachment
325    ---------------------------------------
326    COLOR_ATTACHMENT<i>_EXT (see caption)
327    DEPTH_ATTACHMENT
328    STENCIL_ATTACHMENT
329
330    Table 4.x: Framebuffer attachment points. <i> in COLOR_ATTACHMENT<i>_EXT
331    may range from zero to the value of MAX_COLOR_ATTACHMENTS_EXT minus 1.
332
333    Modify the third sentence of the paragraph following the definition of
334    FramebufferRenderbuffer to be as follows:
335
336    "<attachment> should be set to one of the attachment points of the
337    framebuffer listed in Table 4.x."
338
339    Modify Section 4.4.3 (Renderbuffer Objects) in the "Attaching Texture
340    Images to a Framebuffer" subsection as follows:
341
342    Modify the last sentence of the paragraph following the definition of
343    FramebufferTexture2D to be as follows:
344
345    "<attachment> must be one of the attachment points of the framebuffer
346    listed in Table 4.x."
347
348    Modify Section 4.4.5 (Framebuffer Completeness) and replace the 3rd
349    item in the bulleted list in the "Framebuffer Attachment Completeness"
350    subsection with the following:
351
352    " * If <attachment> is COLOR_ATTACHMENT<i>_EXT, then <image> must
353    have a color-renderable internal format."
354
355Changes to Chapter 6 of the OpenGL ES 2.0 Specification (State and
356State Requests)
357
358    In section 6.1.3 (Enumerated Queries) modify the third sentence in
359    the definition of GetFramebufferAttachmentParameteriv to be as follows:
360
361    "<attachment> must be one of the attachment points of the framebuffer
362    listed in Table 4.x."
363
364Changes to Chapter 3 of the OpenGL ES Shading Language 1.0.17 Specification (Basics)
365
366    Add a new section:
367
368    3.4.1 GL_EXT_draw_buffers Extension
369
370    To use the GL_EXT_draw_buffers extension in a shader it
371    must be enabled using the #extension directive.
372
373    The shading language preprocessor #define
374    GL_EXT_draw_buffers will be defined to 1, if the
375    GL_EXT_draw_buffers extension is supported.
376
377Dependencies on ANGLE_framebuffer_blit and APPLE_framebuffer_multisample:
378
379    If neither ANGLE_framebuffer_blit nor APPLE_framebuffer_multisample are
380    supported, then all references to "draw framebuffers" should be replaced
381    with references to "framebuffers". References to DRAW_FRAMEBUFFER_BINDING
382    should be replaced with references to FRAMEBUFFER_BINDING. References to
383    DRAW_FRAMEBUFFER and READ_FRAMEBUFFER should be removed.
384
385    If ANGLE_framebuffer_blit is supported, DRAW_FRAMEBUFFER_BINDING, DRAW_FRAMEBUFFER
386    and READ_FRAMEBUFFER all refer to corresponding _ANGLE suffixed names
387    (they have the same token values).
388
389    If APPLE_framebuffer_multisample is supported, DRAW_FRAMEBUFFER_BINDING,
390    DRAW_FRAMEBUFFER and READ_FRAMEBUFFER all refer to the corresponding _APPLE
391    suffixed names (they have the same token values).
392
393Errors
394
395    The INVALID_OPERATION error is generated if DrawBuffersEXT is called
396    when the default framebuffer is bound and any of the following conditions
397    hold:
398     - <n> is zero,
399     - <n> is greater than 1 and less than MAX_DRAW_BUFFERS_EXT,
400     - <bufs> contains a value other than BACK or NONE.
401
402    The INVALID_OPERATION error is generated if DrawBuffersEXT is called
403    when bound to a draw framebuffer object and any of the following
404    conditions hold:
405     - the <i>th value in <bufs> is not COLOR_ATTACHMENT<i>_EXT or NONE.
406
407    The INVALID_VALUE error is generated if DrawBuffersEXT is called
408    with a value of <n> which is greater than MAX_DRAW_BUFFERS_EXT.
409
410    The INVALID_ENUM error is generated by FramebufferRenderbuffer if
411    the <attachment> parameter is not one of the values listed in Table 4.x.
412
413    The INVALID_ENUM error is generated by FramebufferTexture2D if
414    the <attachment> parameter is not one of the values listed in Table 4.x.
415
416    The INVALID_ENUM error is generated by GetFramebufferAttachmentParameteriv
417    if the <attachment> parameter is not one of the values listed in Table 4.x.
418
419New State
420
421    Add Table 6.X Framebuffer (State per framebuffer object):
422
423    State               Type Get Command  Initial Value Description
424    ------------------  ---- ------------ ------------- -----------
425    DRAW_BUFFER<i>_EXT  Z10* GetIntegerv  see 4.2.1     Draw buffer selected
426                                                          for fragment color i
427
428    Add to Table 6.18 (Implementation Dependent Values)
429
430    Get value                 Type Get Cmnd    Minimum Value Description             Sec.
431    --------------------      ---- ----------- ------------- -----------             -----
432    MAX_DRAW_BUFFERS_EXT      Z+   GetIntegerv 1             Maximum number of       4.2.1
433                                                             active draw buffers
434    MAX_COLOR_ATTACHMENTS_EXT Z+   GetIntegerv 1             Number of framebuffer   4.4.1
435                                                             color attachment points
436Issues
437
438    See ARB_draw_buffers for relevant issues.
439
440  1) What are the differences between this extension and NV_draw_buffers
441    + NV_fbo_color_attachments?
442
443    RESOLVED. This extension:
444     - adds interactions with blit_framebuffer and the separate
445       draw/read binding points
446     - The draw buffer and color attachment limits are global instead
447       of per-fbo (see Issue 2)
448     - can be used to with default framebuffer to set NONE/BACK (see Issue 4)
449     - retains the ordering restrictions on color attachments that are
450       imposed by ES 3.0.
451
452   2) Should the MAX_DRAW_BUFFERS_EXT and MAX_COLOR_ATTACHMENTS_EXT limits
453    be per-framebuffer values or implementation dependent constants?
454
455    DISCUSSION: In ARB_draw_buffers this was per-context (see Issue 2).
456    EXT_framebuffer_object (and subsequently ARB_framebuffer_object, and GL 3.0
457    through GL 4.2) made these queries framebuffer-dependent.
458    However in GL 4.3 and GLES 3.0, these limits were changed from
459    framebuffer-dependent state to implementation-dependent state after
460    much discussion (Bug 7990).
461
462    NV_draw_buffers has MAX_DRAW_BUFFERS listed as per-framebuffer state,
463    but NV_fbo_color_attachments has MAX_COLOR_ATTACHMENTS as an
464    implementation-dependent constant.
465
466    This is relevant because some implementations are not able to support
467    multisampling in conjuction with multiple color attachments.  If the
468    query is per-framebuffer, they can report a maximum of one attachment
469    when there are multisampled attachments, but a higher limit when only
470    single-sampled attachments are present.
471
472    RESOLVED. Make this global context state as this is most consistent
473    with GLES 3.0 and updated GL drivers. In an implementation cannot
474    support multisampling in conjunction with multiple color attachments,
475    perhaps such an implementation could report FBO incomplete in this
476    situation, but this is less than desirable.
477
478   3) Should we support broadcast from gl_FragColor to all gl_FragData[x]
479    or should it be synonymous with gl_FragData[0]?
480
481    DISCUSSION: With NV_draw_buffers, writing to gl_FragColor writes to all
482    the enabled draw buffers (ie broadcast). In OpenGL ES 3.0 when using
483    ESSL 1.0, gl_FragColor is equivalent to writing a single output to
484    gl_FragData[0] and multiple outputs are not possible. When using ESSL 3.0,
485    only user-defined out variables may be used.
486
487    If broadcast is supported, some implementations may have to replace
488    writes to gl_FragColor with replicated writes to all possible gl_FragData
489    locations when this extension is enabled.
490
491    RESOLVED: Writes to gl_FragColor are broadcast to all enabled color
492    buffers. ES 3.0 using ESSL 1.0 doesn't support broadcast because
493    ESSL 1.0 was not extended to have multiple color outputs (but that is
494    what this extension adds). ESSL 3.0 doesn't support the broadcast because
495    it doesn't have the gl_FragColor variable at all, and only has user-
496    defined out variables. This extension extends ESSL 1.0 to have multiple
497    color outputs. Broadcasting from gl_FragColor to all enabled color
498    buffers is the most consistent with existing draw buffer extensions to
499    date (both NV_draw_buffers and desktop GL).
500
501   4) Should we allow DrawBuffersEXT to be called when the default FBO is
502    bound?
503
504    DISCUSSION: NV_draw_buffers specifies that DrawBuffersNV errors with
505    INVALID_OPERATION when the default FBO is bound. OpenGL ES 3.0 allows
506    DrawBuffers to toggle between BACK and NONE on the default FBO.
507
508    An implementation that does not natively support disabling the drawbuffer
509    on the default FBO could emulate this by disabling color writes.
510
511    RESOLVED: Allow DrawBuffersEXT to be called for the default FBO. This
512    is more forward looking and is compatible with ES 3.0.
513
514   5) What are the requirements on the color attachment sizes and formats?
515
516    RESOLVED: ES 2.0 requires that all color buffers attached to application-
517    created framebuffer objects must have the same number of bitplanes
518    (Chapter 4 overview p91). ES 2.0 also requires that all attached images
519    have the same width and height (Section 4.4.5 Framebuffer Completeness).
520    This extension does not lift those requirements, and failing to meet
521    them will result in an incomplete FBO (FRAMEBUFFER_UNSUPPORTED and
522    FRAMEBUFFER_INCOMPLETE_DIMENSIONS, respectively).
523
524   6) Does this have any interactions with glClear?
525
526    RESOLVED: Yes. When multiple color buffers are enabled for writing,
527    glClear clears all of the color buffers.  Added language clarifying
528    that glClear and glClearColor may affect multiple color buffers.
529
530   7) What is the behavior when n=0? In the ES 3.0 spec it says that
531    <n> must be one for the default FBO, but doesn't specify what happens
532    when it's not.  For user FBOs it states that the draw buffer for
533    fragment colors beyond <n> is set to NONE. (Bug 10059)
534
535    RESOLVED: For the default FBO, setting <n> to zero will result in
536    an INVALID_OPERATION. For user created FBOs, setting <n> to zero
537    sets all the draw buffers to NONE. The ES 3.0 spec will be updated
538    accordingly.
539
540   8) What value should gl_MaxDrawBuffers in the shading language report?
541
542    RESOLVE: It should match MAX_DRAW_BUFFERS_EXT from the API. None
543    of the API or GLSL specifications explicitly state the linkage
544    between API and SL constants, but it seems logical that one would
545    expect them to match, regardless of whether or not an extension
546    directive is used in the shading language.
547
548Revision History
549
550    07/12/2013  dgkoch  add issue 8
551    05/11/2013  dgkoch  add issue 7 and relevant clarifications
552                        minor clarification for issue 5.
553    01/30/2013  dgkoch  add issue 6 and clear interactions
554                        renamed to EXT_draw_buffers based on feedback
555                        changed resolution of issue 3.
556    01/23/2013  dgkoch  add resolutions to issues 2-4.
557                        add issue 5.
558                        Add Table 4.x and update various explicit
559                        references to COLOR_ATTACHMENT0.
560                        Add errors.
561    11/13/2012  dgkoch  add revision history
562                        add text from updated ES 3.0 spec
563                        add issues for discussion
564    10/16/2012  kbr     update name string
565    10/16/2012  kbr     remove restrition requiring draw buffer 0 to be non-NULL
566    10/12/2012  kbr     remove references to GetDoublev and ReadBuffer
567    10/11/2012  kbr     initial draft extension
568
569