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