3 <ratified href="WEBGL_draw_buffers/">
4 <name>WEBGL_draw_buffers</name>
6 <a href="https://www.khronos.org/webgl/public-mailing-list/">WebGL working group</a> (public_webgl 'at' khronos.org)
9 <contributor>Members of the WebGL working group</contributor>
15 <glsl version="300 es"/>
19 <mirrors href="https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers.txt" name="EXT_draw_buffers">
21 The implementation must support a minimum of 4 color attachments.
24 The value of the <code>MAX_COLOR_ATTACHMENTS_WEBGL</code> parameter must be greater than or
25 equal to that of the <code>MAX_DRAW_BUFFERS_WEBGL</code> parameter.
30 <li> A framebuffer's color attachments are all textures allocated with format <code>RGBA</code>
31 and type <code>UNSIGNED_BYTE</code>, and </li>
32 <li> The framebuffer has either:
34 <li> No depth or stencil attachment </li>
35 <li> A valid <code>DEPTH</code> or <code>DEPTH_STENCIL</code> attachment </li>
38 Then a call to <code>checkFramebufferStatus</code> against this framebuffer must not return
39 <code>FRAMEBUFFER_UNSUPPORTED</code>. (In other words, the implementation must support the
40 use of <code>RGBA/UNSIGNED_BYTE</code> textures as color attachments, plus either a
41 <code>DEPTH</code> or <code>DEPTH_STENCIL</code> attachment.)
44 Attaching <code>n</code> consecutive color attachments starting at COLOR_ATTACHMENT0_WEBGL,
45 where <code>n</code> is between 1 and <code>MAX_DRAW_BUFFERS_WEBGL</code>, must not return
46 <code>FRAMEBUFFER_UNSUPPORTED</code> from a call to <code>checkFramebufferStatus</code>. In
47 other words, if <code>MAX_DRAW_BUFFERS_WEBGL</code> is 4, then the implementation is
48 required to support the following combinations of color attachments:
51 <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code></li>
52 <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
53 <code>COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE</code><br/></li>
54 <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
55 <code>COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
56 <code>COLOR_ATTACHMENT2_WEBGL = RGBA/UNSIGNED_BYTE</code><br/></li>
57 <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
58 <code>COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
59 <code>COLOR_ATTACHMENT2_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
60 <code>COLOR_ATTACHMENT3_WEBGL = RGBA/UNSIGNED_BYTE</code><br/></li>
64 Although the extension name is prefixed with WEBGL the extension must be enabled with the
65 <code>#extension GL_EXT_draw_buffers</code> directive, as shown in the sample code, to use
66 the extension in a shader.
68 Likewise the shading language preprocessor <code>#define GL_EXT_draw_buffers</code>, will be defined to 1 if the extension is supported.
71 The value of <code>gl_MaxDrawBuffers</code> should match <code>MAX_DRAW_BUFFERS_WEBGL</code> from the API if the extension is enabled in a WebGL context; otherwise, the value should be 1. Whether or not the extension is enabled with the <code>#extension GL_EXT_draw_buffers</code> directive in a shader does not affect the value of <code>gl_MaxDrawBuffers</code>.
76 Adds support for multiple color buffers and color outputs from fragment shaders.
80 <idl xml:space="preserve">
82 interface WEBGL_draw_buffers {
83 const GLenum COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
84 const GLenum COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
85 const GLenum COLOR_ATTACHMENT2_WEBGL = 0x8CE2;
86 const GLenum COLOR_ATTACHMENT3_WEBGL = 0x8CE3;
87 const GLenum COLOR_ATTACHMENT4_WEBGL = 0x8CE4;
88 const GLenum COLOR_ATTACHMENT5_WEBGL = 0x8CE5;
89 const GLenum COLOR_ATTACHMENT6_WEBGL = 0x8CE6;
90 const GLenum COLOR_ATTACHMENT7_WEBGL = 0x8CE7;
91 const GLenum COLOR_ATTACHMENT8_WEBGL = 0x8CE8;
92 const GLenum COLOR_ATTACHMENT9_WEBGL = 0x8CE9;
93 const GLenum COLOR_ATTACHMENT10_WEBGL = 0x8CEA;
94 const GLenum COLOR_ATTACHMENT11_WEBGL = 0x8CEB;
95 const GLenum COLOR_ATTACHMENT12_WEBGL = 0x8CEC;
96 const GLenum COLOR_ATTACHMENT13_WEBGL = 0x8CED;
97 const GLenum COLOR_ATTACHMENT14_WEBGL = 0x8CEE;
98 const GLenum COLOR_ATTACHMENT15_WEBGL = 0x8CEF;
100 const GLenum DRAW_BUFFER0_WEBGL = 0x8825;
101 const GLenum DRAW_BUFFER1_WEBGL = 0x8826;
102 const GLenum DRAW_BUFFER2_WEBGL = 0x8827;
103 const GLenum DRAW_BUFFER3_WEBGL = 0x8828;
104 const GLenum DRAW_BUFFER4_WEBGL = 0x8829;
105 const GLenum DRAW_BUFFER5_WEBGL = 0x882A;
106 const GLenum DRAW_BUFFER6_WEBGL = 0x882B;
107 const GLenum DRAW_BUFFER7_WEBGL = 0x882C;
108 const GLenum DRAW_BUFFER8_WEBGL = 0x882D;
109 const GLenum DRAW_BUFFER9_WEBGL = 0x882E;
110 const GLenum DRAW_BUFFER10_WEBGL = 0x882F;
111 const GLenum DRAW_BUFFER11_WEBGL = 0x8830;
112 const GLenum DRAW_BUFFER12_WEBGL = 0x8831;
113 const GLenum DRAW_BUFFER13_WEBGL = 0x8832;
114 const GLenum DRAW_BUFFER14_WEBGL = 0x8833;
115 const GLenum DRAW_BUFFER15_WEBGL = 0x8834;
117 const GLenum MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF;
118 const GLenum MAX_DRAW_BUFFERS_WEBGL = 0x8824;
120 void drawBuffersWEBGL(sequence<GLenum> buffers);
123 <samplecode xml:space="preserve">
125 #extension GL_EXT_draw_buffers : require
126 precision mediump float;
128 gl_FragData[0] = vec4(1.0, 0.0, 0.0, 1.0);
129 gl_FragData[1] = vec4(0.0, 1.0, 0.0, 1.0);
130 gl_FragData[2] = vec4(0.0, 0.0, 1.0, 1.0);
131 gl_FragData[3] = vec4(1.0, 1.0, 1.0, 1.0);
136 <revision date="2012/10/16">
137 <change>Initial revision.</change>
139 <revision date="2012/11/05">
140 <change>Corrected typo in drawBuffersWEBGL. Changed referenced spec version to 1.0 to fix broken link.</change>
142 <revision date="2013/02/02">
143 <change>Renamed to EXT_draw_buffers per plan of OpenGL ES working group. Moved to draft status. Assigned number.</change>
145 <revision date="2013/03/05">
146 <change>Renamed to WEBGL_draw_buffers per discussion on public_webgl list. Added guarantees to make it easier for developers to use the extension.</change>
148 <revision date="2013/06/07">
149 <change>Clarified naming of shader directives.</change>
151 <revision date="2014/07/15">
152 <change>Added NoInterfaceObject extended attribute.</change>
154 <revision date="2014/08/08">
155 <change>Ratified by Khronos Board of Promoters.</change>