1/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/.
5 *
6 * The source for this IDL is found at https://www.khronos.org/registry/webgl/specs/latest/2.0
7 * This IDL depends on WebGLRenderingContext.webidl
8 */
9
10typedef long long GLint64;
11typedef unsigned long long GLuint64;
12
13[Pref="webgl.enable-webgl2"]
14interface WebGLSampler {
15};
16
17[Pref="webgl.enable-webgl2"]
18interface WebGLSync {
19};
20
21[Pref="webgl.enable-webgl2"]
22interface WebGLTransformFeedback {
23};
24
25typedef (Uint32Array or sequence<GLuint>) Uint32List;
26
27// WebGL2 spec has this as an empty interface that pulls in everything
28// via WebGL2RenderingContextBase.
29[Exposed=(Window,Worker),
30 Pref="webgl.enable-webgl2"]
31interface WebGL2RenderingContext
32{
33};
34
35interface mixin WebGL2RenderingContextBase
36{
37    const GLenum READ_BUFFER                                   = 0x0C02;
38    const GLenum UNPACK_ROW_LENGTH                             = 0x0CF2;
39    const GLenum UNPACK_SKIP_ROWS                              = 0x0CF3;
40    const GLenum UNPACK_SKIP_PIXELS                            = 0x0CF4;
41    const GLenum PACK_ROW_LENGTH                               = 0x0D02;
42    const GLenum PACK_SKIP_ROWS                                = 0x0D03;
43    const GLenum PACK_SKIP_PIXELS                              = 0x0D04;
44    const GLenum COLOR                                         = 0x1800;
45    const GLenum DEPTH                                         = 0x1801;
46    const GLenum STENCIL                                       = 0x1802;
47    const GLenum RED                                           = 0x1903;
48    const GLenum RGB8                                          = 0x8051;
49    const GLenum RGBA8                                         = 0x8058;
50    const GLenum RGB10_A2                                      = 0x8059;
51    const GLenum TEXTURE_BINDING_3D                            = 0x806A;
52    const GLenum UNPACK_SKIP_IMAGES                            = 0x806D;
53    const GLenum UNPACK_IMAGE_HEIGHT                           = 0x806E;
54    const GLenum TEXTURE_3D                                    = 0x806F;
55    const GLenum TEXTURE_WRAP_R                                = 0x8072;
56    const GLenum MAX_3D_TEXTURE_SIZE                           = 0x8073;
57    const GLenum UNSIGNED_INT_2_10_10_10_REV                   = 0x8368;
58    const GLenum MAX_ELEMENTS_VERTICES                         = 0x80E8;
59    const GLenum MAX_ELEMENTS_INDICES                          = 0x80E9;
60    const GLenum TEXTURE_MIN_LOD                               = 0x813A;
61    const GLenum TEXTURE_MAX_LOD                               = 0x813B;
62    const GLenum TEXTURE_BASE_LEVEL                            = 0x813C;
63    const GLenum TEXTURE_MAX_LEVEL                             = 0x813D;
64    const GLenum MIN                                           = 0x8007;
65    const GLenum MAX                                           = 0x8008;
66    const GLenum DEPTH_COMPONENT24                             = 0x81A6;
67    const GLenum MAX_TEXTURE_LOD_BIAS                          = 0x84FD;
68    const GLenum TEXTURE_COMPARE_MODE                          = 0x884C;
69    const GLenum TEXTURE_COMPARE_FUNC                          = 0x884D;
70    const GLenum CURRENT_QUERY                                 = 0x8865;
71    const GLenum QUERY_RESULT                                  = 0x8866;
72    const GLenum QUERY_RESULT_AVAILABLE                        = 0x8867;
73    const GLenum STREAM_READ                                   = 0x88E1;
74    const GLenum STREAM_COPY                                   = 0x88E2;
75    const GLenum STATIC_READ                                   = 0x88E5;
76    const GLenum STATIC_COPY                                   = 0x88E6;
77    const GLenum DYNAMIC_READ                                  = 0x88E9;
78    const GLenum DYNAMIC_COPY                                  = 0x88EA;
79    const GLenum MAX_DRAW_BUFFERS                              = 0x8824;
80    const GLenum DRAW_BUFFER0                                  = 0x8825;
81    const GLenum DRAW_BUFFER1                                  = 0x8826;
82    const GLenum DRAW_BUFFER2                                  = 0x8827;
83    const GLenum DRAW_BUFFER3                                  = 0x8828;
84    const GLenum DRAW_BUFFER4                                  = 0x8829;
85    const GLenum DRAW_BUFFER5                                  = 0x882A;
86    const GLenum DRAW_BUFFER6                                  = 0x882B;
87    const GLenum DRAW_BUFFER7                                  = 0x882C;
88    const GLenum DRAW_BUFFER8                                  = 0x882D;
89    const GLenum DRAW_BUFFER9                                  = 0x882E;
90    const GLenum DRAW_BUFFER10                                 = 0x882F;
91    const GLenum DRAW_BUFFER11                                 = 0x8830;
92    const GLenum DRAW_BUFFER12                                 = 0x8831;
93    const GLenum DRAW_BUFFER13                                 = 0x8832;
94    const GLenum DRAW_BUFFER14                                 = 0x8833;
95    const GLenum DRAW_BUFFER15                                 = 0x8834;
96    const GLenum MAX_FRAGMENT_UNIFORM_COMPONENTS               = 0x8B49;
97    const GLenum MAX_VERTEX_UNIFORM_COMPONENTS                 = 0x8B4A;
98    const GLenum SAMPLER_3D                                    = 0x8B5F;
99    const GLenum SAMPLER_2D_SHADOW                             = 0x8B62;
100    const GLenum FRAGMENT_SHADER_DERIVATIVE_HINT               = 0x8B8B;
101    const GLenum PIXEL_PACK_BUFFER                             = 0x88EB;
102    const GLenum PIXEL_UNPACK_BUFFER                           = 0x88EC;
103    const GLenum PIXEL_PACK_BUFFER_BINDING                     = 0x88ED;
104    const GLenum PIXEL_UNPACK_BUFFER_BINDING                   = 0x88EF;
105    const GLenum FLOAT_MAT2x3                                  = 0x8B65;
106    const GLenum FLOAT_MAT2x4                                  = 0x8B66;
107    const GLenum FLOAT_MAT3x2                                  = 0x8B67;
108    const GLenum FLOAT_MAT3x4                                  = 0x8B68;
109    const GLenum FLOAT_MAT4x2                                  = 0x8B69;
110    const GLenum FLOAT_MAT4x3                                  = 0x8B6A;
111    const GLenum SRGB                                          = 0x8C40;
112    const GLenum SRGB8                                         = 0x8C41;
113    const GLenum SRGB8_ALPHA8                                  = 0x8C43;
114    const GLenum COMPARE_REF_TO_TEXTURE                        = 0x884E;
115    const GLenum RGBA32F                                       = 0x8814;
116    const GLenum RGB32F                                        = 0x8815;
117    const GLenum RGBA16F                                       = 0x881A;
118    const GLenum RGB16F                                        = 0x881B;
119    const GLenum VERTEX_ATTRIB_ARRAY_INTEGER                   = 0x88FD;
120    const GLenum MAX_ARRAY_TEXTURE_LAYERS                      = 0x88FF;
121    const GLenum MIN_PROGRAM_TEXEL_OFFSET                      = 0x8904;
122    const GLenum MAX_PROGRAM_TEXEL_OFFSET                      = 0x8905;
123    const GLenum MAX_VARYING_COMPONENTS                        = 0x8B4B;
124    const GLenum TEXTURE_2D_ARRAY                              = 0x8C1A;
125    const GLenum TEXTURE_BINDING_2D_ARRAY                      = 0x8C1D;
126    const GLenum R11F_G11F_B10F                                = 0x8C3A;
127    const GLenum UNSIGNED_INT_10F_11F_11F_REV                  = 0x8C3B;
128    const GLenum RGB9_E5                                       = 0x8C3D;
129    const GLenum UNSIGNED_INT_5_9_9_9_REV                      = 0x8C3E;
130    const GLenum TRANSFORM_FEEDBACK_BUFFER_MODE                = 0x8C7F;
131    const GLenum MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS    = 0x8C80;
132    const GLenum TRANSFORM_FEEDBACK_VARYINGS                   = 0x8C83;
133    const GLenum TRANSFORM_FEEDBACK_BUFFER_START               = 0x8C84;
134    const GLenum TRANSFORM_FEEDBACK_BUFFER_SIZE                = 0x8C85;
135    const GLenum TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN         = 0x8C88;
136    const GLenum RASTERIZER_DISCARD                            = 0x8C89;
137    const GLenum MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A;
138    const GLenum MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS       = 0x8C8B;
139    const GLenum INTERLEAVED_ATTRIBS                           = 0x8C8C;
140    const GLenum SEPARATE_ATTRIBS                              = 0x8C8D;
141    const GLenum TRANSFORM_FEEDBACK_BUFFER                     = 0x8C8E;
142    const GLenum TRANSFORM_FEEDBACK_BUFFER_BINDING             = 0x8C8F;
143    const GLenum RGBA32UI                                      = 0x8D70;
144    const GLenum RGB32UI                                       = 0x8D71;
145    const GLenum RGBA16UI                                      = 0x8D76;
146    const GLenum RGB16UI                                       = 0x8D77;
147    const GLenum RGBA8UI                                       = 0x8D7C;
148    const GLenum RGB8UI                                        = 0x8D7D;
149    const GLenum RGBA32I                                       = 0x8D82;
150    const GLenum RGB32I                                        = 0x8D83;
151    const GLenum RGBA16I                                       = 0x8D88;
152    const GLenum RGB16I                                        = 0x8D89;
153    const GLenum RGBA8I                                        = 0x8D8E;
154    const GLenum RGB8I                                         = 0x8D8F;
155    const GLenum RED_INTEGER                                   = 0x8D94;
156    const GLenum RGB_INTEGER                                   = 0x8D98;
157    const GLenum RGBA_INTEGER                                  = 0x8D99;
158    const GLenum SAMPLER_2D_ARRAY                              = 0x8DC1;
159    const GLenum SAMPLER_2D_ARRAY_SHADOW                       = 0x8DC4;
160    const GLenum SAMPLER_CUBE_SHADOW                           = 0x8DC5;
161    const GLenum UNSIGNED_INT_VEC2                             = 0x8DC6;
162    const GLenum UNSIGNED_INT_VEC3                             = 0x8DC7;
163    const GLenum UNSIGNED_INT_VEC4                             = 0x8DC8;
164    const GLenum INT_SAMPLER_2D                                = 0x8DCA;
165    const GLenum INT_SAMPLER_3D                                = 0x8DCB;
166    const GLenum INT_SAMPLER_CUBE                              = 0x8DCC;
167    const GLenum INT_SAMPLER_2D_ARRAY                          = 0x8DCF;
168    const GLenum UNSIGNED_INT_SAMPLER_2D                       = 0x8DD2;
169    const GLenum UNSIGNED_INT_SAMPLER_3D                       = 0x8DD3;
170    const GLenum UNSIGNED_INT_SAMPLER_CUBE                     = 0x8DD4;
171    const GLenum UNSIGNED_INT_SAMPLER_2D_ARRAY                 = 0x8DD7;
172    const GLenum DEPTH_COMPONENT32F                            = 0x8CAC;
173    const GLenum DEPTH32F_STENCIL8                             = 0x8CAD;
174    const GLenum FLOAT_32_UNSIGNED_INT_24_8_REV                = 0x8DAD;
175    const GLenum FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING         = 0x8210;
176    const GLenum FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE         = 0x8211;
177    const GLenum FRAMEBUFFER_ATTACHMENT_RED_SIZE               = 0x8212;
178    const GLenum FRAMEBUFFER_ATTACHMENT_GREEN_SIZE             = 0x8213;
179    const GLenum FRAMEBUFFER_ATTACHMENT_BLUE_SIZE              = 0x8214;
180    const GLenum FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE             = 0x8215;
181    const GLenum FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE             = 0x8216;
182    const GLenum FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE           = 0x8217;
183    const GLenum FRAMEBUFFER_DEFAULT                           = 0x8218;
184    const GLenum UNSIGNED_INT_24_8                             = 0x84FA;
185    const GLenum DEPTH24_STENCIL8                              = 0x88F0;
186    const GLenum UNSIGNED_NORMALIZED                           = 0x8C17;
187    const GLenum DRAW_FRAMEBUFFER_BINDING                      = 0x8CA6; /* Same as FRAMEBUFFER_BINDING */
188    const GLenum READ_FRAMEBUFFER                              = 0x8CA8;
189    const GLenum DRAW_FRAMEBUFFER                              = 0x8CA9;
190    const GLenum READ_FRAMEBUFFER_BINDING                      = 0x8CAA;
191    const GLenum RENDERBUFFER_SAMPLES                          = 0x8CAB;
192    const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER          = 0x8CD4;
193    const GLenum MAX_COLOR_ATTACHMENTS                         = 0x8CDF;
194    const GLenum COLOR_ATTACHMENT1                             = 0x8CE1;
195    const GLenum COLOR_ATTACHMENT2                             = 0x8CE2;
196    const GLenum COLOR_ATTACHMENT3                             = 0x8CE3;
197    const GLenum COLOR_ATTACHMENT4                             = 0x8CE4;
198    const GLenum COLOR_ATTACHMENT5                             = 0x8CE5;
199    const GLenum COLOR_ATTACHMENT6                             = 0x8CE6;
200    const GLenum COLOR_ATTACHMENT7                             = 0x8CE7;
201    const GLenum COLOR_ATTACHMENT8                             = 0x8CE8;
202    const GLenum COLOR_ATTACHMENT9                             = 0x8CE9;
203    const GLenum COLOR_ATTACHMENT10                            = 0x8CEA;
204    const GLenum COLOR_ATTACHMENT11                            = 0x8CEB;
205    const GLenum COLOR_ATTACHMENT12                            = 0x8CEC;
206    const GLenum COLOR_ATTACHMENT13                            = 0x8CED;
207    const GLenum COLOR_ATTACHMENT14                            = 0x8CEE;
208    const GLenum COLOR_ATTACHMENT15                            = 0x8CEF;
209    const GLenum FRAMEBUFFER_INCOMPLETE_MULTISAMPLE            = 0x8D56;
210    const GLenum MAX_SAMPLES                                   = 0x8D57;
211    const GLenum HALF_FLOAT                                    = 0x140B;
212    const GLenum RG                                            = 0x8227;
213    const GLenum RG_INTEGER                                    = 0x8228;
214    const GLenum R8                                            = 0x8229;
215    const GLenum RG8                                           = 0x822B;
216    const GLenum R16F                                          = 0x822D;
217    const GLenum R32F                                          = 0x822E;
218    const GLenum RG16F                                         = 0x822F;
219    const GLenum RG32F                                         = 0x8230;
220    const GLenum R8I                                           = 0x8231;
221    const GLenum R8UI                                          = 0x8232;
222    const GLenum R16I                                          = 0x8233;
223    const GLenum R16UI                                         = 0x8234;
224    const GLenum R32I                                          = 0x8235;
225    const GLenum R32UI                                         = 0x8236;
226    const GLenum RG8I                                          = 0x8237;
227    const GLenum RG8UI                                         = 0x8238;
228    const GLenum RG16I                                         = 0x8239;
229    const GLenum RG16UI                                        = 0x823A;
230    const GLenum RG32I                                         = 0x823B;
231    const GLenum RG32UI                                        = 0x823C;
232    const GLenum VERTEX_ARRAY_BINDING                          = 0x85B5;
233    const GLenum R8_SNORM                                      = 0x8F94;
234    const GLenum RG8_SNORM                                     = 0x8F95;
235    const GLenum RGB8_SNORM                                    = 0x8F96;
236    const GLenum RGBA8_SNORM                                   = 0x8F97;
237    const GLenum SIGNED_NORMALIZED                             = 0x8F9C;
238    const GLenum COPY_READ_BUFFER                              = 0x8F36;
239    const GLenum COPY_WRITE_BUFFER                             = 0x8F37;
240    const GLenum COPY_READ_BUFFER_BINDING                      = 0x8F36; /* Same as COPY_READ_BUFFER */
241    const GLenum COPY_WRITE_BUFFER_BINDING                     = 0x8F37; /* Same as COPY_WRITE_BUFFER */
242    const GLenum UNIFORM_BUFFER                                = 0x8A11;
243    const GLenum UNIFORM_BUFFER_BINDING                        = 0x8A28;
244    const GLenum UNIFORM_BUFFER_START                          = 0x8A29;
245    const GLenum UNIFORM_BUFFER_SIZE                           = 0x8A2A;
246    const GLenum MAX_VERTEX_UNIFORM_BLOCKS                     = 0x8A2B;
247    const GLenum MAX_FRAGMENT_UNIFORM_BLOCKS                   = 0x8A2D;
248    const GLenum MAX_COMBINED_UNIFORM_BLOCKS                   = 0x8A2E;
249    const GLenum MAX_UNIFORM_BUFFER_BINDINGS                   = 0x8A2F;
250    const GLenum MAX_UNIFORM_BLOCK_SIZE                        = 0x8A30;
251    const GLenum MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS        = 0x8A31;
252    const GLenum MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS      = 0x8A33;
253    const GLenum UNIFORM_BUFFER_OFFSET_ALIGNMENT               = 0x8A34;
254    const GLenum ACTIVE_UNIFORM_BLOCKS                         = 0x8A36;
255    const GLenum UNIFORM_TYPE                                  = 0x8A37;
256    const GLenum UNIFORM_SIZE                                  = 0x8A38;
257    const GLenum UNIFORM_BLOCK_INDEX                           = 0x8A3A;
258    const GLenum UNIFORM_OFFSET                                = 0x8A3B;
259    const GLenum UNIFORM_ARRAY_STRIDE                          = 0x8A3C;
260    const GLenum UNIFORM_MATRIX_STRIDE                         = 0x8A3D;
261    const GLenum UNIFORM_IS_ROW_MAJOR                          = 0x8A3E;
262    const GLenum UNIFORM_BLOCK_BINDING                         = 0x8A3F;
263    const GLenum UNIFORM_BLOCK_DATA_SIZE                       = 0x8A40;
264    const GLenum UNIFORM_BLOCK_ACTIVE_UNIFORMS                 = 0x8A42;
265    const GLenum UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES          = 0x8A43;
266    const GLenum UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER     = 0x8A44;
267    const GLenum UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER   = 0x8A46;
268    const GLenum INVALID_INDEX                                 = 0xFFFFFFFF;
269    const GLenum MAX_VERTEX_OUTPUT_COMPONENTS                  = 0x9122;
270    const GLenum MAX_FRAGMENT_INPUT_COMPONENTS                 = 0x9125;
271    const GLenum MAX_SERVER_WAIT_TIMEOUT                       = 0x9111;
272    const GLenum OBJECT_TYPE                                   = 0x9112;
273    const GLenum SYNC_CONDITION                                = 0x9113;
274    const GLenum SYNC_STATUS                                   = 0x9114;
275    const GLenum SYNC_FLAGS                                    = 0x9115;
276    const GLenum SYNC_FENCE                                    = 0x9116;
277    const GLenum SYNC_GPU_COMMANDS_COMPLETE                    = 0x9117;
278    const GLenum UNSIGNALED                                    = 0x9118;
279    const GLenum SIGNALED                                      = 0x9119;
280    const GLenum ALREADY_SIGNALED                              = 0x911A;
281    const GLenum TIMEOUT_EXPIRED                               = 0x911B;
282    const GLenum CONDITION_SATISFIED                           = 0x911C;
283    [NeedsWindowsUndef]
284    const GLenum WAIT_FAILED                                   = 0x911D;
285    const GLenum SYNC_FLUSH_COMMANDS_BIT                       = 0x00000001;
286    const GLenum VERTEX_ATTRIB_ARRAY_DIVISOR                   = 0x88FE;
287    const GLenum ANY_SAMPLES_PASSED                            = 0x8C2F;
288    const GLenum ANY_SAMPLES_PASSED_CONSERVATIVE               = 0x8D6A;
289    const GLenum SAMPLER_BINDING                               = 0x8919;
290    const GLenum RGB10_A2UI                                    = 0x906F;
291    const GLenum INT_2_10_10_10_REV                            = 0x8D9F;
292    const GLenum TRANSFORM_FEEDBACK                            = 0x8E22;
293    const GLenum TRANSFORM_FEEDBACK_PAUSED                     = 0x8E23;
294    const GLenum TRANSFORM_FEEDBACK_ACTIVE                     = 0x8E24;
295    const GLenum TRANSFORM_FEEDBACK_BINDING                    = 0x8E25;
296    const GLenum TEXTURE_IMMUTABLE_FORMAT                      = 0x912F;
297    const GLenum MAX_ELEMENT_INDEX                             = 0x8D6B;
298    const GLenum TEXTURE_IMMUTABLE_LEVELS                      = 0x82DF;
299
300    const GLint64 TIMEOUT_IGNORED                              = -1;
301
302    /* WebGL-specific enums */
303    const GLenum MAX_CLIENT_WAIT_TIMEOUT_WEBGL                 = 0x9247;
304
305    /* Buffer objects */
306    // WebGL1:
307    undefined bufferData(GLenum target, GLsizeiptr size, GLenum usage);
308    undefined bufferData(GLenum target, ArrayBuffer? srcData, GLenum usage);
309    undefined bufferData(GLenum target, ArrayBufferView srcData, GLenum usage);
310    undefined bufferSubData(GLenum target, GLintptr offset, ArrayBuffer srcData);
311    undefined bufferSubData(GLenum target, GLintptr offset, ArrayBufferView srcData);
312    // WebGL2:
313    undefined bufferData(GLenum target, ArrayBufferView srcData, GLenum usage,
314                    GLuint srcOffset, optional GLuint length = 0);
315    undefined bufferSubData(GLenum target, GLintptr dstByteOffset, ArrayBufferView srcData,
316                       GLuint srcOffset, optional GLuint length = 0);
317
318    undefined copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
319                           GLintptr writeOffset, GLsizeiptr size);
320    // MapBufferRange, in particular its read-only and write-only modes,
321    // can not be exposed safely to JavaScript. GetBufferSubData
322    // replaces it for the purpose of fetching data back from the GPU.
323    undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, ArrayBufferView dstData,
324                          optional GLuint dstOffset = 0, optional GLuint length = 0);
325
326    /* Framebuffer objects */
327    undefined blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
328                         GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
329    undefined framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level,
330                                 GLint layer);
331
332    [Throws]
333    undefined invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
334
335    [Throws]
336    undefined invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments,
337                                  GLint x, GLint y, GLsizei width, GLsizei height);
338
339    undefined readBuffer(GLenum src);
340
341    /* Renderbuffer objects */
342    [Throws]
343    any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname);
344    undefined renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat,
345                                        GLsizei width, GLsizei height);
346
347    /* Texture objects */
348    undefined texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
349                      GLsizei height);
350    undefined texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
351                      GLsizei height, GLsizei depth);
352
353    // WebGL1 legacy entrypoints:
354    [Throws] // Another overhead throws.
355    undefined texImage2D(GLenum target, GLint level, GLint internalformat,
356                    GLsizei width, GLsizei height, GLint border, GLenum format,
357                    GLenum type, ArrayBufferView? pixels);
358    [Throws]
359    undefined texImage2D(GLenum target, GLint level, GLint internalformat,
360                    GLenum format, GLenum type, HTMLCanvasElement source); // May throw DOMException
361    [Throws]
362    undefined texImage2D(GLenum target, GLint level, GLint internalformat,
363                    GLenum format, GLenum type, HTMLImageElement source); // May throw DOMException
364    [Throws]
365    undefined texImage2D(GLenum target, GLint level, GLint internalformat,
366                    GLenum format, GLenum type, HTMLVideoElement source); // May throw DOMException
367    [Throws] // Another overhead throws.
368    undefined texImage2D(GLenum target, GLint level, GLint internalformat,
369                    GLenum format, GLenum type, ImageBitmap source);
370    [Throws] // Another overhead throws.
371    undefined texImage2D(GLenum target, GLint level, GLint internalformat,
372                    GLenum format, GLenum type, ImageData source);
373
374    [Throws] // Another overhead throws.
375    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
376                       GLsizei width, GLsizei height,
377                       GLenum format, GLenum type, ArrayBufferView? pixels);
378    [Throws]
379    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
380                       GLenum format, GLenum type, HTMLCanvasElement source); // May throw DOMException
381    [Throws]
382    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
383                       GLenum format, GLenum type, HTMLImageElement source); // May throw DOMException
384    [Throws]
385    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
386                       GLenum format, GLenum type, HTMLVideoElement source); // May throw DOMException
387    [Throws] // Another overhead throws.
388    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
389                       GLenum format, GLenum type, ImageBitmap source);
390    [Throws] // Another overhead throws.
391    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
392                       GLenum format, GLenum type, ImageData source);
393
394    // WebGL2 entrypoints:
395    [Throws] // Another overhead throws.
396    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
397                    GLint border, GLenum format, GLenum type, GLintptr pboOffset);
398    [Throws]
399    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
400                    GLint border, GLenum format, GLenum type,
401                    HTMLCanvasElement source); // May throw DOMException
402    [Throws]
403    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
404                    GLint border, GLenum format, GLenum type,
405                    HTMLImageElement source); // May throw DOMException
406    [Throws]
407    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
408                    GLint border, GLenum format, GLenum type,
409                    HTMLVideoElement source); // May throw DOMException
410    [Throws] // Another overhead throws.
411    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
412                    GLint border, GLenum format, GLenum type,
413                    ImageBitmap source);
414    [Throws] // Another overhead throws.
415    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
416                    GLint border, GLenum format, GLenum type,
417                    ImageData source);
418    [Throws] // Another overhead throws.
419    undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
420                    GLint border, GLenum format, GLenum type, ArrayBufferView srcData,
421                    GLuint srcOffset);
422
423    [Throws] // Another overhead throws.
424    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
425                    GLsizei depth, GLint border, GLenum format, GLenum type, GLintptr pboOffset);
426    [Throws]
427    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
428                    GLsizei depth, GLint border, GLenum format, GLenum type,
429                    HTMLCanvasElement source); // May throw DOMException
430    [Throws]
431    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
432                    GLsizei depth, GLint border, GLenum format, GLenum type,
433                    HTMLImageElement source); // May throw DOMException
434    [Throws]
435    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
436                    GLsizei depth, GLint border, GLenum format, GLenum type,
437                    HTMLVideoElement source); // May throw DOMException
438    [Throws] // Another overhead throws.
439    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
440                    GLsizei depth, GLint border, GLenum format, GLenum type,
441                    ImageBitmap source);
442    [Throws] // Another overhead throws.
443    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
444                    GLsizei depth, GLint border, GLenum format, GLenum type,
445                    ImageData source);
446    [Throws] // Another overhead throws.
447    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
448                    GLsizei depth, GLint border, GLenum format, GLenum type, ArrayBufferView? srcData);
449    [Throws] // Another overhead throws.
450    undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
451                    GLsizei depth, GLint border, GLenum format, GLenum type, ArrayBufferView srcData,
452                    GLuint srcOffset);
453
454    [Throws] // Another overhead throws.
455    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
456                       GLsizei height, GLenum format, GLenum type, GLintptr pboOffset);
457    [Throws]
458    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
459                       GLsizei height, GLenum format, GLenum type,
460                       HTMLCanvasElement source); // May throw DOMException
461    [Throws]
462    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
463                       GLsizei height, GLenum format, GLenum type,
464                       HTMLImageElement source); // May throw DOMException
465    [Throws]
466    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
467                       GLsizei height, GLenum format, GLenum type,
468                       HTMLVideoElement source); // May throw DOMException
469    [Throws] // Another overhead throws.
470    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
471                       GLsizei height, GLenum format, GLenum type,
472                       ImageBitmap source);
473    [Throws] // Another overhead throws.
474    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
475                       GLsizei height, GLenum format, GLenum type,
476                       ImageData source);
477    [Throws] // Another overhead throws.
478    undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
479                       GLsizei height, GLenum format, GLenum type, ArrayBufferView srcData,
480                       GLuint srcOffset);
481
482    [Throws] // Another overhead throws.
483    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
484                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
485                       GLintptr pboOffset);
486    [Throws]
487    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
488                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
489                       HTMLCanvasElement source); // May throw DOMException
490    [Throws]
491    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
492                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
493                       HTMLImageElement source); // May throw DOMException
494    [Throws]
495    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
496                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
497                       HTMLVideoElement source); // May throw DOMException
498    [Throws] // Another overhead throws.
499    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
500                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
501                       ImageBitmap source);
502    [Throws] // Another overhead throws.
503    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
504                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
505                       ImageData source);
506    [Throws] // Another overhead throws.
507    undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
508                       GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
509                       ArrayBufferView? srcData, optional GLuint srcOffset = 0);
510
511    undefined copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
512                           GLint x, GLint y, GLsizei width, GLsizei height);
513
514    undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
515                              GLsizei height, GLint border, GLsizei imageSize,  GLintptr offset);
516    undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
517                              GLsizei height, GLint border, ArrayBufferView srcData,
518                              optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
519
520    undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
521                              GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset);
522    undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
523                              GLsizei height, GLsizei depth, GLint border, ArrayBufferView srcData,
524                              optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
525
526    undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
527                                 GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLintptr offset);
528    undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
529                                 GLsizei width, GLsizei height, GLenum format,
530                                 ArrayBufferView srcData,
531                                 optional GLuint srcOffset = 0,
532                                 optional GLuint srcLengthOverride = 0);
533
534    undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
535                                 GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
536                                 GLenum format, GLsizei imageSize, GLintptr offset);
537    undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
538                                 GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
539                                 GLenum format, ArrayBufferView srcData,
540                                 optional GLuint srcOffset = 0,
541                                 optional GLuint srcLengthOverride = 0);
542
543    /* Programs and shaders */
544    [WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name);
545
546    /* Uniforms */
547    undefined uniform1ui(WebGLUniformLocation? location, GLuint v0);
548    undefined uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
549    undefined uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
550    undefined uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
551
552    undefined uniform1fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
553                    optional GLuint srcLength = 0);
554    undefined uniform2fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
555                    optional GLuint srcLength = 0);
556    undefined uniform3fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
557                    optional GLuint srcLength = 0);
558    undefined uniform4fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
559                    optional GLuint srcLength = 0);
560
561    undefined uniform1iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
562                    optional GLuint srcLength = 0);
563    undefined uniform2iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
564                    optional GLuint srcLength = 0);
565    undefined uniform3iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
566                    optional GLuint srcLength = 0);
567    undefined uniform4iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
568                    optional GLuint srcLength = 0);
569
570    undefined uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
571                    optional GLuint srcLength = 0);
572    undefined uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
573                    optional GLuint srcLength = 0);
574    undefined uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
575                    optional GLuint srcLength = 0);
576    undefined uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
577                    optional GLuint srcLength = 0);
578
579    undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
580                          optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
581    undefined uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
582                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
583    undefined uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
584                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
585
586    undefined uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
587                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
588    undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
589                          optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
590    undefined uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
591                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
592
593    undefined uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
594                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
595    undefined uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
596                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
597    undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
598                          optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
599
600    /* Vertex attribs */
601    undefined vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
602    undefined vertexAttribI4iv(GLuint index, Int32List values);
603    undefined vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
604    undefined vertexAttribI4uiv(GLuint index, Uint32List values);
605    undefined vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
606
607    /* Writing to the drawing buffer */
608    undefined vertexAttribDivisor(GLuint index, GLuint divisor);
609    undefined drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
610    undefined drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
611    undefined drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);
612
613    /* Reading back pixels */
614    // WebGL1:
615    [Throws, NeedsCallerType] // Throws on readback in a write-only context.
616    undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
617                    ArrayBufferView? dstData);
618    // WebGL2:
619    [Throws, NeedsCallerType] // Throws on readback in a write-only context.
620    undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
621                    GLintptr offset);
622    [Throws, NeedsCallerType] // Throws on readback in a write-only context.
623    undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
624                    ArrayBufferView dstData, GLuint dstOffset);
625
626    /* Multiple Render Targets */
627    undefined drawBuffers(sequence<GLenum> buffers);
628
629    undefined clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values,
630                       optional GLuint srcOffset = 0);
631    undefined clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values,
632                       optional GLuint srcOffset = 0);
633    undefined clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values,
634                        optional GLuint srcOffset = 0);
635
636    undefined clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
637
638    /* Query Objects */
639    WebGLQuery? createQuery();
640    undefined deleteQuery(WebGLQuery? query);
641    [WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query);
642    undefined beginQuery(GLenum target, WebGLQuery query);
643    undefined endQuery(GLenum target);
644    any getQuery(GLenum target, GLenum pname);
645    any getQueryParameter(WebGLQuery query, GLenum pname);
646
647    /* Sampler Objects */
648    WebGLSampler? createSampler();
649    undefined deleteSampler(WebGLSampler? sampler);
650    [WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler);
651    undefined bindSampler(GLuint unit, WebGLSampler? sampler);
652    undefined samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
653    undefined samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
654    any getSamplerParameter(WebGLSampler sampler, GLenum pname);
655
656    /* Sync objects */
657    WebGLSync? fenceSync(GLenum condition, GLbitfield flags);
658    [WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync);
659    undefined deleteSync(WebGLSync? sync);
660    GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout);
661    undefined waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
662    any getSyncParameter(WebGLSync sync, GLenum pname);
663
664    /* Transform Feedback */
665    WebGLTransformFeedback? createTransformFeedback();
666    undefined deleteTransformFeedback(WebGLTransformFeedback? tf);
667    [WebGLHandlesContextLoss] GLboolean isTransformFeedback(WebGLTransformFeedback? tf);
668    undefined bindTransformFeedback(GLenum target, WebGLTransformFeedback? tf);
669    undefined beginTransformFeedback(GLenum primitiveMode);
670    undefined endTransformFeedback();
671    undefined transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
672    [NewObject]
673    WebGLActiveInfo? getTransformFeedbackVarying(WebGLProgram program, GLuint index);
674    undefined pauseTransformFeedback();
675    undefined resumeTransformFeedback();
676
677    /* Uniform Buffer Objects and Transform Feedback Buffers */
678    undefined bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
679    undefined bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
680    [Throws] // GetOrCreateDOMReflector can fail.
681    any getIndexedParameter(GLenum target, GLuint index);
682    sequence<GLuint>? getUniformIndices(WebGLProgram program, sequence<DOMString> uniformNames);
683    any getActiveUniforms(WebGLProgram program, sequence<GLuint> uniformIndices, GLenum pname);
684    GLuint getUniformBlockIndex(WebGLProgram program, DOMString uniformBlockName);
685    [Throws] // Creating a Uint32Array can fail.
686    any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, GLenum pname);
687    DOMString? getActiveUniformBlockName(WebGLProgram program, GLuint uniformBlockIndex);
688    undefined uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
689
690    /* Vertex Array Objects */
691    WebGLVertexArrayObject? createVertexArray();
692    undefined deleteVertexArray(WebGLVertexArrayObject? vertexArray);
693    [WebGLHandlesContextLoss] GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray);
694    undefined bindVertexArray(WebGLVertexArrayObject? array);
695};
696
697WebGL2RenderingContextBase includes WebGLRenderingContextBase;
698WebGL2RenderingContext includes WebGL2RenderingContextBase;
699
700[NoInterfaceObject]
701interface EXT_color_buffer_float {
702};
703