xref: /aosp_15_r20/external/deqp/framework/opengl/wrapper/glwImpl.inl (revision 35238bce31c2a825756842865a792f8cf7f89930)
1/* WARNING: This is auto-generated file. Do not modify, since changes will
2 * be lost! Modify the generating script instead.
3 *
4 * Generated from Khronos GL API description (gl.xml) revision d8371b44919d61c02e60f446a4b5461fda910f71.
5 */
6
7void glwActiveShaderProgram (GLuint pipeline, GLuint program)
8{
9    const glw::Functions* gl = glw::getCurrentThreadFunctions();
10    if (!gl)
11        return;
12    gl->activeShaderProgram(pipeline, program);
13}
14
15void glwActiveTexture (GLenum texture)
16{
17    const glw::Functions* gl = glw::getCurrentThreadFunctions();
18    if (!gl)
19        return;
20    gl->activeTexture(texture);
21}
22
23void glwAttachShader (GLuint program, GLuint shader)
24{
25    const glw::Functions* gl = glw::getCurrentThreadFunctions();
26    if (!gl)
27        return;
28    gl->attachShader(program, shader);
29}
30
31void glwBeginConditionalRender (GLuint id, GLenum mode)
32{
33    const glw::Functions* gl = glw::getCurrentThreadFunctions();
34    if (!gl)
35        return;
36    gl->beginConditionalRender(id, mode);
37}
38
39void glwBeginQuery (GLenum target, GLuint id)
40{
41    const glw::Functions* gl = glw::getCurrentThreadFunctions();
42    if (!gl)
43        return;
44    gl->beginQuery(target, id);
45}
46
47void glwBeginQueryIndexed (GLenum target, GLuint index, GLuint id)
48{
49    const glw::Functions* gl = glw::getCurrentThreadFunctions();
50    if (!gl)
51        return;
52    gl->beginQueryIndexed(target, index, id);
53}
54
55void glwBeginTransformFeedback (GLenum primitiveMode)
56{
57    const glw::Functions* gl = glw::getCurrentThreadFunctions();
58    if (!gl)
59        return;
60    gl->beginTransformFeedback(primitiveMode);
61}
62
63void glwBindAttribLocation (GLuint program, GLuint index, const GLchar *name)
64{
65    const glw::Functions* gl = glw::getCurrentThreadFunctions();
66    if (!gl)
67        return;
68    gl->bindAttribLocation(program, index, name);
69}
70
71void glwBindBuffer (GLenum target, GLuint buffer)
72{
73    const glw::Functions* gl = glw::getCurrentThreadFunctions();
74    if (!gl)
75        return;
76    gl->bindBuffer(target, buffer);
77}
78
79void glwBindBufferBase (GLenum target, GLuint index, GLuint buffer)
80{
81    const glw::Functions* gl = glw::getCurrentThreadFunctions();
82    if (!gl)
83        return;
84    gl->bindBufferBase(target, index, buffer);
85}
86
87void glwBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
88{
89    const glw::Functions* gl = glw::getCurrentThreadFunctions();
90    if (!gl)
91        return;
92    gl->bindBufferRange(target, index, buffer, offset, size);
93}
94
95void glwBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers)
96{
97    const glw::Functions* gl = glw::getCurrentThreadFunctions();
98    if (!gl)
99        return;
100    gl->bindBuffersBase(target, first, count, buffers);
101}
102
103void glwBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes)
104{
105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
106    if (!gl)
107        return;
108    gl->bindBuffersRange(target, first, count, buffers, offsets, sizes);
109}
110
111void glwBindFragDataLocation (GLuint program, GLuint color, const GLchar *name)
112{
113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
114    if (!gl)
115        return;
116    gl->bindFragDataLocation(program, color, name);
117}
118
119void glwBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name)
120{
121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
122    if (!gl)
123        return;
124    gl->bindFragDataLocationIndexed(program, colorNumber, index, name);
125}
126
127void glwBindFramebuffer (GLenum target, GLuint framebuffer)
128{
129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
130    if (!gl)
131        return;
132    gl->bindFramebuffer(target, framebuffer);
133}
134
135void glwBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
136{
137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
138    if (!gl)
139        return;
140    gl->bindImageTexture(unit, texture, level, layered, layer, access, format);
141}
142
143void glwBindImageTextures (GLuint first, GLsizei count, const GLuint *textures)
144{
145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
146    if (!gl)
147        return;
148    gl->bindImageTextures(first, count, textures);
149}
150
151void glwBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture)
152{
153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
154    if (!gl)
155        return;
156    gl->bindMultiTextureEXT(texunit, target, texture);
157}
158
159void glwBindProgramPipeline (GLuint pipeline)
160{
161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
162    if (!gl)
163        return;
164    gl->bindProgramPipeline(pipeline);
165}
166
167void glwBindRenderbuffer (GLenum target, GLuint renderbuffer)
168{
169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
170    if (!gl)
171        return;
172    gl->bindRenderbuffer(target, renderbuffer);
173}
174
175void glwBindSampler (GLuint unit, GLuint sampler)
176{
177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
178    if (!gl)
179        return;
180    gl->bindSampler(unit, sampler);
181}
182
183void glwBindSamplers (GLuint first, GLsizei count, const GLuint *samplers)
184{
185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
186    if (!gl)
187        return;
188    gl->bindSamplers(first, count, samplers);
189}
190
191void glwBindTexture (GLenum target, GLuint texture)
192{
193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
194    if (!gl)
195        return;
196    gl->bindTexture(target, texture);
197}
198
199void glwBindTextureUnit (GLuint unit, GLuint texture)
200{
201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
202    if (!gl)
203        return;
204    gl->bindTextureUnit(unit, texture);
205}
206
207void glwBindTextures (GLuint first, GLsizei count, const GLuint *textures)
208{
209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
210    if (!gl)
211        return;
212    gl->bindTextures(first, count, textures);
213}
214
215void glwBindTransformFeedback (GLenum target, GLuint id)
216{
217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
218    if (!gl)
219        return;
220    gl->bindTransformFeedback(target, id);
221}
222
223void glwBindVertexArray (GLuint array)
224{
225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
226    if (!gl)
227        return;
228    gl->bindVertexArray(array);
229}
230
231void glwBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
232{
233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
234    if (!gl)
235        return;
236    gl->bindVertexBuffer(bindingindex, buffer, offset, stride);
237}
238
239void glwBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
240{
241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
242    if (!gl)
243        return;
244    gl->bindVertexBuffers(first, count, buffers, offsets, strides);
245}
246
247void glwBlendBarrier (void)
248{
249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
250    if (!gl)
251        return;
252    gl->blendBarrier();
253}
254
255void glwBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
256{
257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
258    if (!gl)
259        return;
260    gl->blendColor(red, green, blue, alpha);
261}
262
263void glwBlendEquation (GLenum mode)
264{
265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
266    if (!gl)
267        return;
268    gl->blendEquation(mode);
269}
270
271void glwBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
272{
273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
274    if (!gl)
275        return;
276    gl->blendEquationSeparate(modeRGB, modeAlpha);
277}
278
279void glwBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha)
280{
281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
282    if (!gl)
283        return;
284    gl->blendEquationSeparatei(buf, modeRGB, modeAlpha);
285}
286
287void glwBlendEquationi (GLuint buf, GLenum mode)
288{
289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
290    if (!gl)
291        return;
292    gl->blendEquationi(buf, mode);
293}
294
295void glwBlendFunc (GLenum sfactor, GLenum dfactor)
296{
297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
298    if (!gl)
299        return;
300    gl->blendFunc(sfactor, dfactor);
301}
302
303void glwBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
304{
305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
306    if (!gl)
307        return;
308    gl->blendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
309}
310
311void glwBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
312{
313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
314    if (!gl)
315        return;
316    gl->blendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
317}
318
319void glwBlendFunci (GLuint buf, GLenum src, GLenum dst)
320{
321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
322    if (!gl)
323        return;
324    gl->blendFunci(buf, src, dst);
325}
326
327void glwBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
328{
329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
330    if (!gl)
331        return;
332    gl->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
333}
334
335void glwBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
336{
337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
338    if (!gl)
339        return;
340    gl->blitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
341}
342
343void glwBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage)
344{
345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
346    if (!gl)
347        return;
348    gl->bufferData(target, size, data, usage);
349}
350
351void glwBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit)
352{
353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
354    if (!gl)
355        return;
356    gl->bufferPageCommitmentARB(target, offset, size, commit);
357}
358
359void glwBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags)
360{
361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
362    if (!gl)
363        return;
364    gl->bufferStorage(target, size, data, flags);
365}
366
367void glwBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data)
368{
369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
370    if (!gl)
371        return;
372    gl->bufferSubData(target, offset, size, data);
373}
374
375GLenum glwCheckFramebufferStatus (GLenum target)
376{
377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
378    if (!gl)
379        return (GLenum)0;
380    return gl->checkFramebufferStatus(target);
381}
382
383GLenum glwCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target)
384{
385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
386    if (!gl)
387        return (GLenum)0;
388    return gl->checkNamedFramebufferStatus(framebuffer, target);
389}
390
391GLenum glwCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target)
392{
393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
394    if (!gl)
395        return (GLenum)0;
396    return gl->checkNamedFramebufferStatusEXT(framebuffer, target);
397}
398
399void glwClampColor (GLenum target, GLenum clamp)
400{
401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
402    if (!gl)
403        return;
404    gl->clampColor(target, clamp);
405}
406
407void glwClear (GLbitfield mask)
408{
409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
410    if (!gl)
411        return;
412    gl->clear(mask);
413}
414
415void glwClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data)
416{
417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
418    if (!gl)
419        return;
420    gl->clearBufferData(target, internalformat, format, type, data);
421}
422
423void glwClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data)
424{
425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
426    if (!gl)
427        return;
428    gl->clearBufferSubData(target, internalformat, offset, size, format, type, data);
429}
430
431void glwClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
432{
433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
434    if (!gl)
435        return;
436    gl->clearBufferfi(buffer, drawbuffer, depth, stencil);
437}
438
439void glwClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value)
440{
441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
442    if (!gl)
443        return;
444    gl->clearBufferfv(buffer, drawbuffer, value);
445}
446
447void glwClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value)
448{
449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
450    if (!gl)
451        return;
452    gl->clearBufferiv(buffer, drawbuffer, value);
453}
454
455void glwClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value)
456{
457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
458    if (!gl)
459        return;
460    gl->clearBufferuiv(buffer, drawbuffer, value);
461}
462
463void glwClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
464{
465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
466    if (!gl)
467        return;
468    gl->clearColor(red, green, blue, alpha);
469}
470
471void glwClearDepth (GLdouble depth)
472{
473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
474    if (!gl)
475        return;
476    gl->clearDepth(depth);
477}
478
479void glwClearDepthf (GLfloat d)
480{
481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
482    if (!gl)
483        return;
484    gl->clearDepthf(d);
485}
486
487void glwClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data)
488{
489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
490    if (!gl)
491        return;
492    gl->clearNamedBufferData(buffer, internalformat, format, type, data);
493}
494
495void glwClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data)
496{
497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
498    if (!gl)
499        return;
500    gl->clearNamedBufferDataEXT(buffer, internalformat, format, type, data);
501}
502
503void glwClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data)
504{
505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
506    if (!gl)
507        return;
508    gl->clearNamedBufferSubData(buffer, internalformat, offset, size, format, type, data);
509}
510
511void glwClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data)
512{
513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
514    if (!gl)
515        return;
516    gl->clearNamedBufferSubDataEXT(buffer, internalformat, offset, size, format, type, data);
517}
518
519void glwClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
520{
521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
522    if (!gl)
523        return;
524    gl->clearNamedFramebufferfi(framebuffer, buffer, drawbuffer, depth, stencil);
525}
526
527void glwClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)
528{
529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
530    if (!gl)
531        return;
532    gl->clearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value);
533}
534
535void glwClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value)
536{
537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
538    if (!gl)
539        return;
540    gl->clearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value);
541}
542
543void glwClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value)
544{
545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
546    if (!gl)
547        return;
548    gl->clearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value);
549}
550
551void glwClearStencil (GLint s)
552{
553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
554    if (!gl)
555        return;
556    gl->clearStencil(s);
557}
558
559void glwClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data)
560{
561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
562    if (!gl)
563        return;
564    gl->clearTexImage(texture, level, format, type, data);
565}
566
567void glwClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data)
568{
569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
570    if (!gl)
571        return;
572    gl->clearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
573}
574
575void glwClientAttribDefaultEXT (GLbitfield mask)
576{
577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
578    if (!gl)
579        return;
580    gl->clientAttribDefaultEXT(mask);
581}
582
583GLenum glwClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout)
584{
585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
586    if (!gl)
587        return (GLenum)0;
588    return gl->clientWaitSync(sync, flags, timeout);
589}
590
591void glwClipControl (GLenum origin, GLenum depth)
592{
593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
594    if (!gl)
595        return;
596    gl->clipControl(origin, depth);
597}
598
599void glwColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
600{
601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
602    if (!gl)
603        return;
604    gl->colorMask(red, green, blue, alpha);
605}
606
607void glwColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
608{
609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
610    if (!gl)
611        return;
612    gl->colorMaski(index, r, g, b, a);
613}
614
615void glwCompileShader (GLuint shader)
616{
617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
618    if (!gl)
619        return;
620    gl->compileShader(shader);
621}
622
623void glwCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits)
624{
625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
626    if (!gl)
627        return;
628    gl->compressedMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, imageSize, bits);
629}
630
631void glwCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits)
632{
633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
634    if (!gl)
635        return;
636    gl->compressedMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, imageSize, bits);
637}
638
639void glwCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits)
640{
641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
642    if (!gl)
643        return;
644    gl->compressedMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, imageSize, bits);
645}
646
647void glwCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits)
648{
649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
650    if (!gl)
651        return;
652    gl->compressedMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, imageSize, bits);
653}
654
655void glwCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits)
656{
657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
658    if (!gl)
659        return;
660    gl->compressedMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits);
661}
662
663void glwCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits)
664{
665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
666    if (!gl)
667        return;
668    gl->compressedMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
669}
670
671void glwCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data)
672{
673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
674    if (!gl)
675        return;
676    gl->compressedTexImage1D(target, level, internalformat, width, border, imageSize, data);
677}
678
679void glwCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data)
680{
681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
682    if (!gl)
683        return;
684    gl->compressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
685}
686
687void glwCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
688{
689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
690    if (!gl)
691        return;
692    gl->compressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
693}
694
695void glwCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
696{
697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
698    if (!gl)
699        return;
700    gl->compressedTexImage3DOES(target, level, internalformat, width, height, depth, border, imageSize, data);
701}
702
703void glwCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data)
704{
705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
706    if (!gl)
707        return;
708    gl->compressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);
709}
710
711void glwCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data)
712{
713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
714    if (!gl)
715        return;
716    gl->compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
717}
718
719void glwCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
720{
721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
722    if (!gl)
723        return;
724    gl->compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
725}
726
727void glwCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
728{
729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
730    if (!gl)
731        return;
732    gl->compressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
733}
734
735void glwCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits)
736{
737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
738    if (!gl)
739        return;
740    gl->compressedTextureImage1DEXT(texture, target, level, internalformat, width, border, imageSize, bits);
741}
742
743void glwCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits)
744{
745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
746    if (!gl)
747        return;
748    gl->compressedTextureImage2DEXT(texture, target, level, internalformat, width, height, border, imageSize, bits);
749}
750
751void glwCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits)
752{
753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
754    if (!gl)
755        return;
756    gl->compressedTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, imageSize, bits);
757}
758
759void glwCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data)
760{
761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
762    if (!gl)
763        return;
764    gl->compressedTextureSubImage1D(texture, level, xoffset, width, format, imageSize, data);
765}
766
767void glwCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits)
768{
769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
770    if (!gl)
771        return;
772    gl->compressedTextureSubImage1DEXT(texture, target, level, xoffset, width, format, imageSize, bits);
773}
774
775void glwCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data)
776{
777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
778    if (!gl)
779        return;
780    gl->compressedTextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, imageSize, data);
781}
782
783void glwCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits)
784{
785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
786    if (!gl)
787        return;
788    gl->compressedTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits);
789}
790
791void glwCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
792{
793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
794    if (!gl)
795        return;
796    gl->compressedTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
797}
798
799void glwCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits)
800{
801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
802    if (!gl)
803        return;
804    gl->compressedTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
805}
806
807void glwCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
808{
809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
810    if (!gl)
811        return;
812    gl->copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
813}
814
815void glwCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth)
816{
817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
818    if (!gl)
819        return;
820    gl->copyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
821}
822
823void glwCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
824{
825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
826    if (!gl)
827        return;
828    gl->copyMultiTexImage1DEXT(texunit, target, level, internalformat, x, y, width, border);
829}
830
831void glwCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
832{
833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
834    if (!gl)
835        return;
836    gl->copyMultiTexImage2DEXT(texunit, target, level, internalformat, x, y, width, height, border);
837}
838
839void glwCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
840{
841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
842    if (!gl)
843        return;
844    gl->copyMultiTexSubImage1DEXT(texunit, target, level, xoffset, x, y, width);
845}
846
847void glwCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
848{
849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
850    if (!gl)
851        return;
852    gl->copyMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, x, y, width, height);
853}
854
855void glwCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
856{
857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
858    if (!gl)
859        return;
860    gl->copyMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height);
861}
862
863void glwCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
864{
865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
866    if (!gl)
867        return;
868    gl->copyNamedBufferSubData(readBuffer, writeBuffer, readOffset, writeOffset, size);
869}
870
871void glwCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
872{
873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
874    if (!gl)
875        return;
876    gl->copyTexImage1D(target, level, internalformat, x, y, width, border);
877}
878
879void glwCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
880{
881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
882    if (!gl)
883        return;
884    gl->copyTexImage2D(target, level, internalformat, x, y, width, height, border);
885}
886
887void glwCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
888{
889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
890    if (!gl)
891        return;
892    gl->copyTexSubImage1D(target, level, xoffset, x, y, width);
893}
894
895void glwCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
896{
897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
898    if (!gl)
899        return;
900    gl->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
901}
902
903void glwCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
904{
905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
906    if (!gl)
907        return;
908    gl->copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
909}
910
911void glwCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
912{
913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
914    if (!gl)
915        return;
916    gl->copyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
917}
918
919void glwCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
920{
921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
922    if (!gl)
923        return;
924    gl->copyTextureImage1DEXT(texture, target, level, internalformat, x, y, width, border);
925}
926
927void glwCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
928{
929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
930    if (!gl)
931        return;
932    gl->copyTextureImage2DEXT(texture, target, level, internalformat, x, y, width, height, border);
933}
934
935void glwCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
936{
937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
938    if (!gl)
939        return;
940    gl->copyTextureSubImage1D(texture, level, xoffset, x, y, width);
941}
942
943void glwCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
944{
945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
946    if (!gl)
947        return;
948    gl->copyTextureSubImage1DEXT(texture, target, level, xoffset, x, y, width);
949}
950
951void glwCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
952{
953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
954    if (!gl)
955        return;
956    gl->copyTextureSubImage2D(texture, level, xoffset, yoffset, x, y, width, height);
957}
958
959void glwCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
960{
961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
962    if (!gl)
963        return;
964    gl->copyTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, x, y, width, height);
965}
966
967void glwCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
968{
969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
970    if (!gl)
971        return;
972    gl->copyTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, x, y, width, height);
973}
974
975void glwCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
976{
977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
978    if (!gl)
979        return;
980    gl->copyTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, x, y, width, height);
981}
982
983void glwCreateBuffers (GLsizei n, GLuint *buffers)
984{
985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
986    if (!gl)
987        return;
988    gl->createBuffers(n, buffers);
989}
990
991void glwCreateFramebuffers (GLsizei n, GLuint *framebuffers)
992{
993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
994    if (!gl)
995        return;
996    gl->createFramebuffers(n, framebuffers);
997}
998
999GLuint glwCreateProgram (void)
1000{
1001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1002    if (!gl)
1003        return (GLuint)0;
1004    return gl->createProgram();
1005}
1006
1007void glwCreateProgramPipelines (GLsizei n, GLuint *pipelines)
1008{
1009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1010    if (!gl)
1011        return;
1012    gl->createProgramPipelines(n, pipelines);
1013}
1014
1015void glwCreateQueries (GLenum target, GLsizei n, GLuint *ids)
1016{
1017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1018    if (!gl)
1019        return;
1020    gl->createQueries(target, n, ids);
1021}
1022
1023void glwCreateRenderbuffers (GLsizei n, GLuint *renderbuffers)
1024{
1025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1026    if (!gl)
1027        return;
1028    gl->createRenderbuffers(n, renderbuffers);
1029}
1030
1031void glwCreateSamplers (GLsizei n, GLuint *samplers)
1032{
1033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1034    if (!gl)
1035        return;
1036    gl->createSamplers(n, samplers);
1037}
1038
1039GLuint glwCreateShader (GLenum type)
1040{
1041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1042    if (!gl)
1043        return (GLuint)0;
1044    return gl->createShader(type);
1045}
1046
1047GLuint glwCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings)
1048{
1049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1050    if (!gl)
1051        return (GLuint)0;
1052    return gl->createShaderProgramv(type, count, strings);
1053}
1054
1055void glwCreateTextures (GLenum target, GLsizei n, GLuint *textures)
1056{
1057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1058    if (!gl)
1059        return;
1060    gl->createTextures(target, n, textures);
1061}
1062
1063void glwCreateTransformFeedbacks (GLsizei n, GLuint *ids)
1064{
1065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1066    if (!gl)
1067        return;
1068    gl->createTransformFeedbacks(n, ids);
1069}
1070
1071void glwCreateVertexArrays (GLsizei n, GLuint *arrays)
1072{
1073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1074    if (!gl)
1075        return;
1076    gl->createVertexArrays(n, arrays);
1077}
1078
1079void glwCullFace (GLenum mode)
1080{
1081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1082    if (!gl)
1083        return;
1084    gl->cullFace(mode);
1085}
1086
1087void glwDebugMessageCallback (GLDEBUGPROC callback, const void *userParam)
1088{
1089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1090    if (!gl)
1091        return;
1092    gl->debugMessageCallback(callback, userParam);
1093}
1094
1095void glwDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled)
1096{
1097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1098    if (!gl)
1099        return;
1100    gl->debugMessageControl(source, type, severity, count, ids, enabled);
1101}
1102
1103void glwDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf)
1104{
1105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1106    if (!gl)
1107        return;
1108    gl->debugMessageInsert(source, type, id, severity, length, buf);
1109}
1110
1111void glwDeleteBuffers (GLsizei n, const GLuint *buffers)
1112{
1113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1114    if (!gl)
1115        return;
1116    gl->deleteBuffers(n, buffers);
1117}
1118
1119void glwDeleteFramebuffers (GLsizei n, const GLuint *framebuffers)
1120{
1121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1122    if (!gl)
1123        return;
1124    gl->deleteFramebuffers(n, framebuffers);
1125}
1126
1127void glwDeleteProgram (GLuint program)
1128{
1129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1130    if (!gl)
1131        return;
1132    gl->deleteProgram(program);
1133}
1134
1135void glwDeleteProgramPipelines (GLsizei n, const GLuint *pipelines)
1136{
1137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1138    if (!gl)
1139        return;
1140    gl->deleteProgramPipelines(n, pipelines);
1141}
1142
1143void glwDeleteQueries (GLsizei n, const GLuint *ids)
1144{
1145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1146    if (!gl)
1147        return;
1148    gl->deleteQueries(n, ids);
1149}
1150
1151void glwDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers)
1152{
1153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1154    if (!gl)
1155        return;
1156    gl->deleteRenderbuffers(n, renderbuffers);
1157}
1158
1159void glwDeleteSamplers (GLsizei count, const GLuint *samplers)
1160{
1161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1162    if (!gl)
1163        return;
1164    gl->deleteSamplers(count, samplers);
1165}
1166
1167void glwDeleteShader (GLuint shader)
1168{
1169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1170    if (!gl)
1171        return;
1172    gl->deleteShader(shader);
1173}
1174
1175void glwDeleteSync (GLsync sync)
1176{
1177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1178    if (!gl)
1179        return;
1180    gl->deleteSync(sync);
1181}
1182
1183void glwDeleteTextures (GLsizei n, const GLuint *textures)
1184{
1185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1186    if (!gl)
1187        return;
1188    gl->deleteTextures(n, textures);
1189}
1190
1191void glwDeleteTransformFeedbacks (GLsizei n, const GLuint *ids)
1192{
1193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1194    if (!gl)
1195        return;
1196    gl->deleteTransformFeedbacks(n, ids);
1197}
1198
1199void glwDeleteVertexArrays (GLsizei n, const GLuint *arrays)
1200{
1201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1202    if (!gl)
1203        return;
1204    gl->deleteVertexArrays(n, arrays);
1205}
1206
1207void glwDepthBoundsEXT (GLclampd zmin, GLclampd zmax)
1208{
1209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1210    if (!gl)
1211        return;
1212    gl->depthBoundsEXT(zmin, zmax);
1213}
1214
1215void glwDepthFunc (GLenum func)
1216{
1217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1218    if (!gl)
1219        return;
1220    gl->depthFunc(func);
1221}
1222
1223void glwDepthMask (GLboolean flag)
1224{
1225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1226    if (!gl)
1227        return;
1228    gl->depthMask(flag);
1229}
1230
1231void glwDepthRange (GLdouble n, GLdouble f)
1232{
1233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1234    if (!gl)
1235        return;
1236    gl->depthRange(n, f);
1237}
1238
1239void glwDepthRangeArrayfvOES (GLuint first, GLsizei count, const GLfloat *v)
1240{
1241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1242    if (!gl)
1243        return;
1244    gl->depthRangeArrayfvOES(first, count, v);
1245}
1246
1247void glwDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v)
1248{
1249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1250    if (!gl)
1251        return;
1252    gl->depthRangeArrayv(first, count, v);
1253}
1254
1255void glwDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f)
1256{
1257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1258    if (!gl)
1259        return;
1260    gl->depthRangeIndexed(index, n, f);
1261}
1262
1263void glwDepthRangeIndexedfOES (GLuint index, GLfloat n, GLfloat f)
1264{
1265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1266    if (!gl)
1267        return;
1268    gl->depthRangeIndexedfOES(index, n, f);
1269}
1270
1271void glwDepthRangef (GLfloat n, GLfloat f)
1272{
1273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1274    if (!gl)
1275        return;
1276    gl->depthRangef(n, f);
1277}
1278
1279void glwDetachShader (GLuint program, GLuint shader)
1280{
1281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1282    if (!gl)
1283        return;
1284    gl->detachShader(program, shader);
1285}
1286
1287void glwDisable (GLenum cap)
1288{
1289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1290    if (!gl)
1291        return;
1292    gl->disable(cap);
1293}
1294
1295void glwDisableClientStateIndexedEXT (GLenum array, GLuint index)
1296{
1297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1298    if (!gl)
1299        return;
1300    gl->disableClientStateIndexedEXT(array, index);
1301}
1302
1303void glwDisableClientStateiEXT (GLenum array, GLuint index)
1304{
1305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1306    if (!gl)
1307        return;
1308    gl->disableClientStateiEXT(array, index);
1309}
1310
1311void glwDisableVertexArrayAttrib (GLuint vaobj, GLuint index)
1312{
1313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1314    if (!gl)
1315        return;
1316    gl->disableVertexArrayAttrib(vaobj, index);
1317}
1318
1319void glwDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index)
1320{
1321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1322    if (!gl)
1323        return;
1324    gl->disableVertexArrayAttribEXT(vaobj, index);
1325}
1326
1327void glwDisableVertexArrayEXT (GLuint vaobj, GLenum array)
1328{
1329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1330    if (!gl)
1331        return;
1332    gl->disableVertexArrayEXT(vaobj, array);
1333}
1334
1335void glwDisableVertexAttribArray (GLuint index)
1336{
1337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1338    if (!gl)
1339        return;
1340    gl->disableVertexAttribArray(index);
1341}
1342
1343void glwDisablei (GLenum target, GLuint index)
1344{
1345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1346    if (!gl)
1347        return;
1348    gl->disablei(target, index);
1349}
1350
1351void glwDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
1352{
1353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1354    if (!gl)
1355        return;
1356    gl->dispatchCompute(num_groups_x, num_groups_y, num_groups_z);
1357}
1358
1359void glwDispatchComputeIndirect (GLintptr indirect)
1360{
1361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1362    if (!gl)
1363        return;
1364    gl->dispatchComputeIndirect(indirect);
1365}
1366
1367void glwDrawArrays (GLenum mode, GLint first, GLsizei count)
1368{
1369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1370    if (!gl)
1371        return;
1372    gl->drawArrays(mode, first, count);
1373}
1374
1375void glwDrawArraysIndirect (GLenum mode, const void *indirect)
1376{
1377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1378    if (!gl)
1379        return;
1380    gl->drawArraysIndirect(mode, indirect);
1381}
1382
1383void glwDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
1384{
1385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1386    if (!gl)
1387        return;
1388    gl->drawArraysInstanced(mode, first, count, instancecount);
1389}
1390
1391void glwDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance)
1392{
1393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1394    if (!gl)
1395        return;
1396    gl->drawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance);
1397}
1398
1399void glwDrawBuffer (GLenum buf)
1400{
1401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1402    if (!gl)
1403        return;
1404    gl->drawBuffer(buf);
1405}
1406
1407void glwDrawBuffers (GLsizei n, const GLenum *bufs)
1408{
1409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1410    if (!gl)
1411        return;
1412    gl->drawBuffers(n, bufs);
1413}
1414
1415void glwDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices)
1416{
1417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1418    if (!gl)
1419        return;
1420    gl->drawElements(mode, count, type, indices);
1421}
1422
1423void glwDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex)
1424{
1425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1426    if (!gl)
1427        return;
1428    gl->drawElementsBaseVertex(mode, count, type, indices, basevertex);
1429}
1430
1431void glwDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect)
1432{
1433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1434    if (!gl)
1435        return;
1436    gl->drawElementsIndirect(mode, type, indirect);
1437}
1438
1439void glwDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount)
1440{
1441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1442    if (!gl)
1443        return;
1444    gl->drawElementsInstanced(mode, count, type, indices, instancecount);
1445}
1446
1447void glwDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance)
1448{
1449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1450    if (!gl)
1451        return;
1452    gl->drawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance);
1453}
1454
1455void glwDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex)
1456{
1457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1458    if (!gl)
1459        return;
1460    gl->drawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex);
1461}
1462
1463void glwDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance)
1464{
1465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1466    if (!gl)
1467        return;
1468    gl->drawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance);
1469}
1470
1471void glwDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
1472{
1473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1474    if (!gl)
1475        return;
1476    gl->drawRangeElements(mode, start, end, count, type, indices);
1477}
1478
1479void glwDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex)
1480{
1481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1482    if (!gl)
1483        return;
1484    gl->drawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
1485}
1486
1487void glwDrawTransformFeedback (GLenum mode, GLuint id)
1488{
1489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1490    if (!gl)
1491        return;
1492    gl->drawTransformFeedback(mode, id);
1493}
1494
1495void glwDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount)
1496{
1497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1498    if (!gl)
1499        return;
1500    gl->drawTransformFeedbackInstanced(mode, id, instancecount);
1501}
1502
1503void glwDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream)
1504{
1505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1506    if (!gl)
1507        return;
1508    gl->drawTransformFeedbackStream(mode, id, stream);
1509}
1510
1511void glwDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount)
1512{
1513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1514    if (!gl)
1515        return;
1516    gl->drawTransformFeedbackStreamInstanced(mode, id, stream, instancecount);
1517}
1518
1519void glwEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image)
1520{
1521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1522    if (!gl)
1523        return;
1524    gl->eglImageTargetRenderbufferStorageOES(target, image);
1525}
1526
1527void glwEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
1528{
1529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1530    if (!gl)
1531        return;
1532    gl->eglImageTargetTexture2DOES(target, image);
1533}
1534
1535void glwEnable (GLenum cap)
1536{
1537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1538    if (!gl)
1539        return;
1540    gl->enable(cap);
1541}
1542
1543void glwEnableClientStateIndexedEXT (GLenum array, GLuint index)
1544{
1545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1546    if (!gl)
1547        return;
1548    gl->enableClientStateIndexedEXT(array, index);
1549}
1550
1551void glwEnableClientStateiEXT (GLenum array, GLuint index)
1552{
1553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1554    if (!gl)
1555        return;
1556    gl->enableClientStateiEXT(array, index);
1557}
1558
1559void glwEnableVertexArrayAttrib (GLuint vaobj, GLuint index)
1560{
1561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1562    if (!gl)
1563        return;
1564    gl->enableVertexArrayAttrib(vaobj, index);
1565}
1566
1567void glwEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index)
1568{
1569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1570    if (!gl)
1571        return;
1572    gl->enableVertexArrayAttribEXT(vaobj, index);
1573}
1574
1575void glwEnableVertexArrayEXT (GLuint vaobj, GLenum array)
1576{
1577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1578    if (!gl)
1579        return;
1580    gl->enableVertexArrayEXT(vaobj, array);
1581}
1582
1583void glwEnableVertexAttribArray (GLuint index)
1584{
1585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1586    if (!gl)
1587        return;
1588    gl->enableVertexAttribArray(index);
1589}
1590
1591void glwEnablei (GLenum target, GLuint index)
1592{
1593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1594    if (!gl)
1595        return;
1596    gl->enablei(target, index);
1597}
1598
1599void glwEndConditionalRender (void)
1600{
1601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1602    if (!gl)
1603        return;
1604    gl->endConditionalRender();
1605}
1606
1607void glwEndQuery (GLenum target)
1608{
1609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1610    if (!gl)
1611        return;
1612    gl->endQuery(target);
1613}
1614
1615void glwEndQueryIndexed (GLenum target, GLuint index)
1616{
1617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1618    if (!gl)
1619        return;
1620    gl->endQueryIndexed(target, index);
1621}
1622
1623void glwEndTransformFeedback (void)
1624{
1625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1626    if (!gl)
1627        return;
1628    gl->endTransformFeedback();
1629}
1630
1631GLsync glwFenceSync (GLenum condition, GLbitfield flags)
1632{
1633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1634    if (!gl)
1635        return (GLsync)0;
1636    return gl->fenceSync(condition, flags);
1637}
1638
1639void glwFinish (void)
1640{
1641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1642    if (!gl)
1643        return;
1644    gl->finish();
1645}
1646
1647void glwFlush (void)
1648{
1649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1650    if (!gl)
1651        return;
1652    gl->flush();
1653}
1654
1655void glwFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length)
1656{
1657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1658    if (!gl)
1659        return;
1660    gl->flushMappedBufferRange(target, offset, length);
1661}
1662
1663void glwFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length)
1664{
1665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1666    if (!gl)
1667        return;
1668    gl->flushMappedNamedBufferRange(buffer, offset, length);
1669}
1670
1671void glwFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length)
1672{
1673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1674    if (!gl)
1675        return;
1676    gl->flushMappedNamedBufferRangeEXT(buffer, offset, length);
1677}
1678
1679void glwFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode)
1680{
1681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1682    if (!gl)
1683        return;
1684    gl->framebufferDrawBufferEXT(framebuffer, mode);
1685}
1686
1687void glwFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs)
1688{
1689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1690    if (!gl)
1691        return;
1692    gl->framebufferDrawBuffersEXT(framebuffer, n, bufs);
1693}
1694
1695void glwFramebufferParameteri (GLenum target, GLenum pname, GLint param)
1696{
1697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1698    if (!gl)
1699        return;
1700    gl->framebufferParameteri(target, pname, param);
1701}
1702
1703void glwFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode)
1704{
1705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1706    if (!gl)
1707        return;
1708    gl->framebufferReadBufferEXT(framebuffer, mode);
1709}
1710
1711void glwFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
1712{
1713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1714    if (!gl)
1715        return;
1716    gl->framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
1717}
1718
1719void glwFramebufferShadingRateEXT (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight)
1720{
1721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1722    if (!gl)
1723        return;
1724    gl->framebufferShadingRateEXT(target, attachment, texture, baseLayer, numLayers, texelWidth, texelHeight);
1725}
1726
1727void glwFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level)
1728{
1729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1730    if (!gl)
1731        return;
1732    gl->framebufferTexture(target, attachment, texture, level);
1733}
1734
1735void glwFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
1736{
1737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1738    if (!gl)
1739        return;
1740    gl->framebufferTexture1D(target, attachment, textarget, texture, level);
1741}
1742
1743void glwFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
1744{
1745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1746    if (!gl)
1747        return;
1748    gl->framebufferTexture2D(target, attachment, textarget, texture, level);
1749}
1750
1751void glwFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
1752{
1753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1754    if (!gl)
1755        return;
1756    gl->framebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples);
1757}
1758
1759void glwFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
1760{
1761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1762    if (!gl)
1763        return;
1764    gl->framebufferTexture3D(target, attachment, textarget, texture, level, zoffset);
1765}
1766
1767void glwFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
1768{
1769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1770    if (!gl)
1771        return;
1772    gl->framebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
1773}
1774
1775void glwFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1776{
1777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1778    if (!gl)
1779        return;
1780    gl->framebufferTextureLayer(target, attachment, texture, level, layer);
1781}
1782
1783void glwFramebufferTextureMultisampleMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews)
1784{
1785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1786    if (!gl)
1787        return;
1788    gl->framebufferTextureMultisampleMultiviewOVR(target, attachment, texture, level, samples, baseViewIndex, numViews);
1789}
1790
1791void glwFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews)
1792{
1793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1794    if (!gl)
1795        return;
1796    gl->framebufferTextureMultiviewOVR(target, attachment, texture, level, baseViewIndex, numViews);
1797}
1798
1799void glwFrontFace (GLenum mode)
1800{
1801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1802    if (!gl)
1803        return;
1804    gl->frontFace(mode);
1805}
1806
1807void glwGenBuffers (GLsizei n, GLuint *buffers)
1808{
1809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1810    if (!gl)
1811        return;
1812    gl->genBuffers(n, buffers);
1813}
1814
1815void glwGenFramebuffers (GLsizei n, GLuint *framebuffers)
1816{
1817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1818    if (!gl)
1819        return;
1820    gl->genFramebuffers(n, framebuffers);
1821}
1822
1823void glwGenProgramPipelines (GLsizei n, GLuint *pipelines)
1824{
1825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1826    if (!gl)
1827        return;
1828    gl->genProgramPipelines(n, pipelines);
1829}
1830
1831void glwGenQueries (GLsizei n, GLuint *ids)
1832{
1833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1834    if (!gl)
1835        return;
1836    gl->genQueries(n, ids);
1837}
1838
1839void glwGenRenderbuffers (GLsizei n, GLuint *renderbuffers)
1840{
1841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1842    if (!gl)
1843        return;
1844    gl->genRenderbuffers(n, renderbuffers);
1845}
1846
1847void glwGenSamplers (GLsizei count, GLuint *samplers)
1848{
1849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1850    if (!gl)
1851        return;
1852    gl->genSamplers(count, samplers);
1853}
1854
1855void glwGenTextures (GLsizei n, GLuint *textures)
1856{
1857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1858    if (!gl)
1859        return;
1860    gl->genTextures(n, textures);
1861}
1862
1863void glwGenTransformFeedbacks (GLsizei n, GLuint *ids)
1864{
1865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1866    if (!gl)
1867        return;
1868    gl->genTransformFeedbacks(n, ids);
1869}
1870
1871void glwGenVertexArrays (GLsizei n, GLuint *arrays)
1872{
1873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1874    if (!gl)
1875        return;
1876    gl->genVertexArrays(n, arrays);
1877}
1878
1879void glwGenerateMipmap (GLenum target)
1880{
1881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1882    if (!gl)
1883        return;
1884    gl->generateMipmap(target);
1885}
1886
1887void glwGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target)
1888{
1889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1890    if (!gl)
1891        return;
1892    gl->generateMultiTexMipmapEXT(texunit, target);
1893}
1894
1895void glwGenerateTextureMipmap (GLuint texture)
1896{
1897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1898    if (!gl)
1899        return;
1900    gl->generateTextureMipmap(texture);
1901}
1902
1903void glwGenerateTextureMipmapEXT (GLuint texture, GLenum target)
1904{
1905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1906    if (!gl)
1907        return;
1908    gl->generateTextureMipmapEXT(texture, target);
1909}
1910
1911void glwGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params)
1912{
1913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1914    if (!gl)
1915        return;
1916    gl->getActiveAtomicCounterBufferiv(program, bufferIndex, pname, params);
1917}
1918
1919void glwGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
1920{
1921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1922    if (!gl)
1923        return;
1924    gl->getActiveAttrib(program, index, bufSize, length, size, type, name);
1925}
1926
1927void glwGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name)
1928{
1929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1930    if (!gl)
1931        return;
1932    gl->getActiveSubroutineName(program, shadertype, index, bufSize, length, name);
1933}
1934
1935void glwGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name)
1936{
1937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1938    if (!gl)
1939        return;
1940    gl->getActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name);
1941}
1942
1943void glwGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values)
1944{
1945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1946    if (!gl)
1947        return;
1948    gl->getActiveSubroutineUniformiv(program, shadertype, index, pname, values);
1949}
1950
1951void glwGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
1952{
1953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1954    if (!gl)
1955        return;
1956    gl->getActiveUniform(program, index, bufSize, length, size, type, name);
1957}
1958
1959void glwGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
1960{
1961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1962    if (!gl)
1963        return;
1964    gl->getActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
1965}
1966
1967void glwGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
1968{
1969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1970    if (!gl)
1971        return;
1972    gl->getActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
1973}
1974
1975void glwGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName)
1976{
1977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1978    if (!gl)
1979        return;
1980    gl->getActiveUniformName(program, uniformIndex, bufSize, length, uniformName);
1981}
1982
1983void glwGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)
1984{
1985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1986    if (!gl)
1987        return;
1988    gl->getActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
1989}
1990
1991void glwGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders)
1992{
1993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
1994    if (!gl)
1995        return;
1996    gl->getAttachedShaders(program, maxCount, count, shaders);
1997}
1998
1999GLint glwGetAttribLocation (GLuint program, const GLchar *name)
2000{
2001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2002    if (!gl)
2003        return (GLint)0;
2004    return gl->getAttribLocation(program, name);
2005}
2006
2007void glwGetBooleani_v (GLenum target, GLuint index, GLboolean *data)
2008{
2009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2010    if (!gl)
2011        return;
2012    gl->getBooleani_v(target, index, data);
2013}
2014
2015void glwGetBooleanv (GLenum pname, GLboolean *data)
2016{
2017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2018    if (!gl)
2019        return;
2020    gl->getBooleanv(pname, data);
2021}
2022
2023void glwGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params)
2024{
2025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2026    if (!gl)
2027        return;
2028    gl->getBufferParameteri64v(target, pname, params);
2029}
2030
2031void glwGetBufferParameteriv (GLenum target, GLenum pname, GLint *params)
2032{
2033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2034    if (!gl)
2035        return;
2036    gl->getBufferParameteriv(target, pname, params);
2037}
2038
2039void glwGetBufferPointerv (GLenum target, GLenum pname, void **params)
2040{
2041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2042    if (!gl)
2043        return;
2044    gl->getBufferPointerv(target, pname, params);
2045}
2046
2047void glwGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data)
2048{
2049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2050    if (!gl)
2051        return;
2052    gl->getBufferSubData(target, offset, size, data);
2053}
2054
2055void glwGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img)
2056{
2057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2058    if (!gl)
2059        return;
2060    gl->getCompressedMultiTexImageEXT(texunit, target, lod, img);
2061}
2062
2063void glwGetCompressedTexImage (GLenum target, GLint level, void *img)
2064{
2065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2066    if (!gl)
2067        return;
2068    gl->getCompressedTexImage(target, level, img);
2069}
2070
2071void glwGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels)
2072{
2073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2074    if (!gl)
2075        return;
2076    gl->getCompressedTextureImage(texture, level, bufSize, pixels);
2077}
2078
2079void glwGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img)
2080{
2081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2082    if (!gl)
2083        return;
2084    gl->getCompressedTextureImageEXT(texture, target, lod, img);
2085}
2086
2087void glwGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels)
2088{
2089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2090    if (!gl)
2091        return;
2092    gl->getCompressedTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels);
2093}
2094
2095GLuint glwGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog)
2096{
2097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2098    if (!gl)
2099        return (GLuint)0;
2100    return gl->getDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths, messageLog);
2101}
2102
2103void glwGetDoublei_v (GLenum target, GLuint index, GLdouble *data)
2104{
2105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2106    if (!gl)
2107        return;
2108    gl->getDoublei_v(target, index, data);
2109}
2110
2111void glwGetDoublev (GLenum pname, GLdouble *data)
2112{
2113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2114    if (!gl)
2115        return;
2116    gl->getDoublev(pname, data);
2117}
2118
2119GLenum glwGetError (void)
2120{
2121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2122    if (!gl)
2123        return GL_INVALID_OPERATION;
2124    return gl->getError();
2125}
2126
2127void glwGetFloati_v (GLenum target, GLuint index, GLfloat *data)
2128{
2129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2130    if (!gl)
2131        return;
2132    gl->getFloati_v(target, index, data);
2133}
2134
2135void glwGetFloatv (GLenum pname, GLfloat *data)
2136{
2137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2138    if (!gl)
2139        return;
2140    gl->getFloatv(pname, data);
2141}
2142
2143GLint glwGetFragDataIndex (GLuint program, const GLchar *name)
2144{
2145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2146    if (!gl)
2147        return (GLint)0;
2148    return gl->getFragDataIndex(program, name);
2149}
2150
2151GLint glwGetFragDataLocation (GLuint program, const GLchar *name)
2152{
2153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2154    if (!gl)
2155        return (GLint)0;
2156    return gl->getFragDataLocation(program, name);
2157}
2158
2159void glwGetFragmentShadingRatesEXT (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates)
2160{
2161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2162    if (!gl)
2163        return;
2164    gl->getFragmentShadingRatesEXT(samples, maxCount, count, shadingRates);
2165}
2166
2167void glwGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params)
2168{
2169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2170    if (!gl)
2171        return;
2172    gl->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
2173}
2174
2175void glwGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params)
2176{
2177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2178    if (!gl)
2179        return;
2180    gl->getFramebufferParameteriv(target, pname, params);
2181}
2182
2183void glwGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params)
2184{
2185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2186    if (!gl)
2187        return;
2188    gl->getFramebufferParameterivEXT(framebuffer, pname, params);
2189}
2190
2191GLenum glwGetGraphicsResetStatus (void)
2192{
2193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2194    if (!gl)
2195        return (GLenum)0;
2196    return gl->getGraphicsResetStatus();
2197}
2198
2199void glwGetInteger64i_v (GLenum target, GLuint index, GLint64 *data)
2200{
2201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2202    if (!gl)
2203        return;
2204    gl->getInteger64i_v(target, index, data);
2205}
2206
2207void glwGetInteger64v (GLenum pname, GLint64 *data)
2208{
2209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2210    if (!gl)
2211        return;
2212    gl->getInteger64v(pname, data);
2213}
2214
2215void glwGetIntegeri_v (GLenum target, GLuint index, GLint *data)
2216{
2217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2218    if (!gl)
2219        return;
2220    gl->getIntegeri_v(target, index, data);
2221}
2222
2223void glwGetIntegerv (GLenum pname, GLint *data)
2224{
2225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2226    if (!gl)
2227        return;
2228    gl->getIntegerv(pname, data);
2229}
2230
2231void glwGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params)
2232{
2233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2234    if (!gl)
2235        return;
2236    gl->getInternalformatSampleivNV(target, internalformat, samples, pname, count, params);
2237}
2238
2239void glwGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params)
2240{
2241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2242    if (!gl)
2243        return;
2244    gl->getInternalformati64v(target, internalformat, pname, count, params);
2245}
2246
2247void glwGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params)
2248{
2249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2250    if (!gl)
2251        return;
2252    gl->getInternalformativ(target, internalformat, pname, count, params);
2253}
2254
2255void glwGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params)
2256{
2257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2258    if (!gl)
2259        return;
2260    gl->getMultiTexEnvfvEXT(texunit, target, pname, params);
2261}
2262
2263void glwGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params)
2264{
2265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2266    if (!gl)
2267        return;
2268    gl->getMultiTexEnvivEXT(texunit, target, pname, params);
2269}
2270
2271void glwGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params)
2272{
2273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2274    if (!gl)
2275        return;
2276    gl->getMultiTexGendvEXT(texunit, coord, pname, params);
2277}
2278
2279void glwGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params)
2280{
2281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2282    if (!gl)
2283        return;
2284    gl->getMultiTexGenfvEXT(texunit, coord, pname, params);
2285}
2286
2287void glwGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params)
2288{
2289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2290    if (!gl)
2291        return;
2292    gl->getMultiTexGenivEXT(texunit, coord, pname, params);
2293}
2294
2295void glwGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
2296{
2297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2298    if (!gl)
2299        return;
2300    gl->getMultiTexImageEXT(texunit, target, level, format, type, pixels);
2301}
2302
2303void glwGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params)
2304{
2305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2306    if (!gl)
2307        return;
2308    gl->getMultiTexLevelParameterfvEXT(texunit, target, level, pname, params);
2309}
2310
2311void glwGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params)
2312{
2313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2314    if (!gl)
2315        return;
2316    gl->getMultiTexLevelParameterivEXT(texunit, target, level, pname, params);
2317}
2318
2319void glwGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params)
2320{
2321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2322    if (!gl)
2323        return;
2324    gl->getMultiTexParameterIivEXT(texunit, target, pname, params);
2325}
2326
2327void glwGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params)
2328{
2329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2330    if (!gl)
2331        return;
2332    gl->getMultiTexParameterIuivEXT(texunit, target, pname, params);
2333}
2334
2335void glwGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params)
2336{
2337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2338    if (!gl)
2339        return;
2340    gl->getMultiTexParameterfvEXT(texunit, target, pname, params);
2341}
2342
2343void glwGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params)
2344{
2345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2346    if (!gl)
2347        return;
2348    gl->getMultiTexParameterivEXT(texunit, target, pname, params);
2349}
2350
2351void glwGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val)
2352{
2353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2354    if (!gl)
2355        return;
2356    gl->getMultisamplefv(pname, index, val);
2357}
2358
2359void glwGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params)
2360{
2361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2362    if (!gl)
2363        return;
2364    gl->getNamedBufferParameteri64v(buffer, pname, params);
2365}
2366
2367void glwGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params)
2368{
2369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2370    if (!gl)
2371        return;
2372    gl->getNamedBufferParameteriv(buffer, pname, params);
2373}
2374
2375void glwGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params)
2376{
2377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2378    if (!gl)
2379        return;
2380    gl->getNamedBufferParameterivEXT(buffer, pname, params);
2381}
2382
2383void glwGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params)
2384{
2385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2386    if (!gl)
2387        return;
2388    gl->getNamedBufferPointerv(buffer, pname, params);
2389}
2390
2391void glwGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params)
2392{
2393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2394    if (!gl)
2395        return;
2396    gl->getNamedBufferPointervEXT(buffer, pname, params);
2397}
2398
2399void glwGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data)
2400{
2401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2402    if (!gl)
2403        return;
2404    gl->getNamedBufferSubData(buffer, offset, size, data);
2405}
2406
2407void glwGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data)
2408{
2409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2410    if (!gl)
2411        return;
2412    gl->getNamedBufferSubDataEXT(buffer, offset, size, data);
2413}
2414
2415void glwGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params)
2416{
2417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2418    if (!gl)
2419        return;
2420    gl->getNamedFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params);
2421}
2422
2423void glwGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params)
2424{
2425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2426    if (!gl)
2427        return;
2428    gl->getNamedFramebufferAttachmentParameterivEXT(framebuffer, attachment, pname, params);
2429}
2430
2431void glwGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param)
2432{
2433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2434    if (!gl)
2435        return;
2436    gl->getNamedFramebufferParameteriv(framebuffer, pname, param);
2437}
2438
2439void glwGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params)
2440{
2441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2442    if (!gl)
2443        return;
2444    gl->getNamedFramebufferParameterivEXT(framebuffer, pname, params);
2445}
2446
2447void glwGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params)
2448{
2449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2450    if (!gl)
2451        return;
2452    gl->getNamedProgramLocalParameterIivEXT(program, target, index, params);
2453}
2454
2455void glwGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params)
2456{
2457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2458    if (!gl)
2459        return;
2460    gl->getNamedProgramLocalParameterIuivEXT(program, target, index, params);
2461}
2462
2463void glwGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params)
2464{
2465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2466    if (!gl)
2467        return;
2468    gl->getNamedProgramLocalParameterdvEXT(program, target, index, params);
2469}
2470
2471void glwGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params)
2472{
2473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2474    if (!gl)
2475        return;
2476    gl->getNamedProgramLocalParameterfvEXT(program, target, index, params);
2477}
2478
2479void glwGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string)
2480{
2481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2482    if (!gl)
2483        return;
2484    gl->getNamedProgramStringEXT(program, target, pname, string);
2485}
2486
2487void glwGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params)
2488{
2489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2490    if (!gl)
2491        return;
2492    gl->getNamedProgramivEXT(program, target, pname, params);
2493}
2494
2495void glwGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params)
2496{
2497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2498    if (!gl)
2499        return;
2500    gl->getNamedRenderbufferParameteriv(renderbuffer, pname, params);
2501}
2502
2503void glwGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params)
2504{
2505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2506    if (!gl)
2507        return;
2508    gl->getNamedRenderbufferParameterivEXT(renderbuffer, pname, params);
2509}
2510
2511void glwGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label)
2512{
2513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2514    if (!gl)
2515        return;
2516    gl->getObjectLabel(identifier, name, bufSize, length, label);
2517}
2518
2519void glwGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label)
2520{
2521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2522    if (!gl)
2523        return;
2524    gl->getObjectPtrLabel(ptr, bufSize, length, label);
2525}
2526
2527void glwGetPointerIndexedvEXT (GLenum target, GLuint index, void **data)
2528{
2529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2530    if (!gl)
2531        return;
2532    gl->getPointerIndexedvEXT(target, index, data);
2533}
2534
2535void glwGetPointeri_vEXT (GLenum pname, GLuint index, void **params)
2536{
2537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2538    if (!gl)
2539        return;
2540    gl->getPointeri_vEXT(pname, index, params);
2541}
2542
2543void glwGetPointerv (GLenum pname, void **params)
2544{
2545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2546    if (!gl)
2547        return;
2548    gl->getPointerv(pname, params);
2549}
2550
2551void glwGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
2552{
2553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2554    if (!gl)
2555        return;
2556    gl->getProgramBinary(program, bufSize, length, binaryFormat, binary);
2557}
2558
2559void glwGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
2560{
2561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2562    if (!gl)
2563        return;
2564    gl->getProgramInfoLog(program, bufSize, length, infoLog);
2565}
2566
2567void glwGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params)
2568{
2569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2570    if (!gl)
2571        return;
2572    gl->getProgramInterfaceiv(program, programInterface, pname, params);
2573}
2574
2575void glwGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
2576{
2577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2578    if (!gl)
2579        return;
2580    gl->getProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
2581}
2582
2583void glwGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params)
2584{
2585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2586    if (!gl)
2587        return;
2588    gl->getProgramPipelineiv(pipeline, pname, params);
2589}
2590
2591GLuint glwGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name)
2592{
2593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2594    if (!gl)
2595        return (GLuint)0;
2596    return gl->getProgramResourceIndex(program, programInterface, name);
2597}
2598
2599GLint glwGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name)
2600{
2601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2602    if (!gl)
2603        return (GLint)0;
2604    return gl->getProgramResourceLocation(program, programInterface, name);
2605}
2606
2607GLint glwGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name)
2608{
2609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2610    if (!gl)
2611        return (GLint)0;
2612    return gl->getProgramResourceLocationIndex(program, programInterface, name);
2613}
2614
2615void glwGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name)
2616{
2617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2618    if (!gl)
2619        return;
2620    gl->getProgramResourceName(program, programInterface, index, bufSize, length, name);
2621}
2622
2623void glwGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params)
2624{
2625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2626    if (!gl)
2627        return;
2628    gl->getProgramResourceiv(program, programInterface, index, propCount, props, count, length, params);
2629}
2630
2631void glwGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values)
2632{
2633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2634    if (!gl)
2635        return;
2636    gl->getProgramStageiv(program, shadertype, pname, values);
2637}
2638
2639void glwGetProgramiv (GLuint program, GLenum pname, GLint *params)
2640{
2641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2642    if (!gl)
2643        return;
2644    gl->getProgramiv(program, pname, params);
2645}
2646
2647void glwGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
2648{
2649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2650    if (!gl)
2651        return;
2652    gl->getQueryBufferObjecti64v(id, buffer, pname, offset);
2653}
2654
2655void glwGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
2656{
2657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2658    if (!gl)
2659        return;
2660    gl->getQueryBufferObjectiv(id, buffer, pname, offset);
2661}
2662
2663void glwGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
2664{
2665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2666    if (!gl)
2667        return;
2668    gl->getQueryBufferObjectui64v(id, buffer, pname, offset);
2669}
2670
2671void glwGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset)
2672{
2673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2674    if (!gl)
2675        return;
2676    gl->getQueryBufferObjectuiv(id, buffer, pname, offset);
2677}
2678
2679void glwGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params)
2680{
2681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2682    if (!gl)
2683        return;
2684    gl->getQueryIndexediv(target, index, pname, params);
2685}
2686
2687void glwGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params)
2688{
2689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2690    if (!gl)
2691        return;
2692    gl->getQueryObjecti64v(id, pname, params);
2693}
2694
2695void glwGetQueryObjectiv (GLuint id, GLenum pname, GLint *params)
2696{
2697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2698    if (!gl)
2699        return;
2700    gl->getQueryObjectiv(id, pname, params);
2701}
2702
2703void glwGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params)
2704{
2705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2706    if (!gl)
2707        return;
2708    gl->getQueryObjectui64v(id, pname, params);
2709}
2710
2711void glwGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params)
2712{
2713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2714    if (!gl)
2715        return;
2716    gl->getQueryObjectuiv(id, pname, params);
2717}
2718
2719void glwGetQueryiv (GLenum target, GLenum pname, GLint *params)
2720{
2721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2722    if (!gl)
2723        return;
2724    gl->getQueryiv(target, pname, params);
2725}
2726
2727void glwGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params)
2728{
2729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2730    if (!gl)
2731        return;
2732    gl->getRenderbufferParameteriv(target, pname, params);
2733}
2734
2735void glwGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params)
2736{
2737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2738    if (!gl)
2739        return;
2740    gl->getSamplerParameterIiv(sampler, pname, params);
2741}
2742
2743void glwGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params)
2744{
2745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2746    if (!gl)
2747        return;
2748    gl->getSamplerParameterIuiv(sampler, pname, params);
2749}
2750
2751void glwGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params)
2752{
2753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2754    if (!gl)
2755        return;
2756    gl->getSamplerParameterfv(sampler, pname, params);
2757}
2758
2759void glwGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params)
2760{
2761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2762    if (!gl)
2763        return;
2764    gl->getSamplerParameteriv(sampler, pname, params);
2765}
2766
2767void glwGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
2768{
2769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2770    if (!gl)
2771        return;
2772    gl->getShaderInfoLog(shader, bufSize, length, infoLog);
2773}
2774
2775void glwGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision)
2776{
2777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2778    if (!gl)
2779        return;
2780    gl->getShaderPrecisionFormat(shadertype, precisiontype, range, precision);
2781}
2782
2783void glwGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
2784{
2785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2786    if (!gl)
2787        return;
2788    gl->getShaderSource(shader, bufSize, length, source);
2789}
2790
2791void glwGetShaderiv (GLuint shader, GLenum pname, GLint *params)
2792{
2793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2794    if (!gl)
2795        return;
2796    gl->getShaderiv(shader, pname, params);
2797}
2798
2799const GLubyte * glwGetString (GLenum name)
2800{
2801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2802    if (!gl)
2803        return (const GLubyte *)0;
2804    return gl->getString(name);
2805}
2806
2807const GLubyte * glwGetStringi (GLenum name, GLuint index)
2808{
2809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2810    if (!gl)
2811        return (const GLubyte *)0;
2812    return gl->getStringi(name, index);
2813}
2814
2815GLuint glwGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name)
2816{
2817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2818    if (!gl)
2819        return (GLuint)0;
2820    return gl->getSubroutineIndex(program, shadertype, name);
2821}
2822
2823GLint glwGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name)
2824{
2825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2826    if (!gl)
2827        return (GLint)0;
2828    return gl->getSubroutineUniformLocation(program, shadertype, name);
2829}
2830
2831void glwGetSynciv (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values)
2832{
2833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2834    if (!gl)
2835        return;
2836    gl->getSynciv(sync, pname, count, length, values);
2837}
2838
2839void glwGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
2840{
2841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2842    if (!gl)
2843        return;
2844    gl->getTexImage(target, level, format, type, pixels);
2845}
2846
2847void glwGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params)
2848{
2849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2850    if (!gl)
2851        return;
2852    gl->getTexLevelParameterfv(target, level, pname, params);
2853}
2854
2855void glwGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params)
2856{
2857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2858    if (!gl)
2859        return;
2860    gl->getTexLevelParameteriv(target, level, pname, params);
2861}
2862
2863void glwGetTexParameterIiv (GLenum target, GLenum pname, GLint *params)
2864{
2865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2866    if (!gl)
2867        return;
2868    gl->getTexParameterIiv(target, pname, params);
2869}
2870
2871void glwGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params)
2872{
2873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2874    if (!gl)
2875        return;
2876    gl->getTexParameterIuiv(target, pname, params);
2877}
2878
2879void glwGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params)
2880{
2881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2882    if (!gl)
2883        return;
2884    gl->getTexParameterfv(target, pname, params);
2885}
2886
2887void glwGetTexParameteriv (GLenum target, GLenum pname, GLint *params)
2888{
2889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2890    if (!gl)
2891        return;
2892    gl->getTexParameteriv(target, pname, params);
2893}
2894
2895void glwGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels)
2896{
2897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2898    if (!gl)
2899        return;
2900    gl->getTextureImage(texture, level, format, type, bufSize, pixels);
2901}
2902
2903void glwGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
2904{
2905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2906    if (!gl)
2907        return;
2908    gl->getTextureImageEXT(texture, target, level, format, type, pixels);
2909}
2910
2911void glwGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params)
2912{
2913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2914    if (!gl)
2915        return;
2916    gl->getTextureLevelParameterfv(texture, level, pname, params);
2917}
2918
2919void glwGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params)
2920{
2921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2922    if (!gl)
2923        return;
2924    gl->getTextureLevelParameterfvEXT(texture, target, level, pname, params);
2925}
2926
2927void glwGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params)
2928{
2929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2930    if (!gl)
2931        return;
2932    gl->getTextureLevelParameteriv(texture, level, pname, params);
2933}
2934
2935void glwGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params)
2936{
2937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2938    if (!gl)
2939        return;
2940    gl->getTextureLevelParameterivEXT(texture, target, level, pname, params);
2941}
2942
2943void glwGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params)
2944{
2945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2946    if (!gl)
2947        return;
2948    gl->getTextureParameterIiv(texture, pname, params);
2949}
2950
2951void glwGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params)
2952{
2953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2954    if (!gl)
2955        return;
2956    gl->getTextureParameterIivEXT(texture, target, pname, params);
2957}
2958
2959void glwGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params)
2960{
2961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2962    if (!gl)
2963        return;
2964    gl->getTextureParameterIuiv(texture, pname, params);
2965}
2966
2967void glwGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params)
2968{
2969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2970    if (!gl)
2971        return;
2972    gl->getTextureParameterIuivEXT(texture, target, pname, params);
2973}
2974
2975void glwGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params)
2976{
2977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2978    if (!gl)
2979        return;
2980    gl->getTextureParameterfv(texture, pname, params);
2981}
2982
2983void glwGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params)
2984{
2985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2986    if (!gl)
2987        return;
2988    gl->getTextureParameterfvEXT(texture, target, pname, params);
2989}
2990
2991void glwGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params)
2992{
2993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
2994    if (!gl)
2995        return;
2996    gl->getTextureParameteriv(texture, pname, params);
2997}
2998
2999void glwGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params)
3000{
3001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3002    if (!gl)
3003        return;
3004    gl->getTextureParameterivEXT(texture, target, pname, params);
3005}
3006
3007void glwGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels)
3008{
3009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3010    if (!gl)
3011        return;
3012    gl->getTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels);
3013}
3014
3015void glwGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
3016{
3017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3018    if (!gl)
3019        return;
3020    gl->getTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
3021}
3022
3023void glwGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param)
3024{
3025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3026    if (!gl)
3027        return;
3028    gl->getTransformFeedbacki64_v(xfb, pname, index, param);
3029}
3030
3031void glwGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param)
3032{
3033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3034    if (!gl)
3035        return;
3036    gl->getTransformFeedbacki_v(xfb, pname, index, param);
3037}
3038
3039void glwGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param)
3040{
3041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3042    if (!gl)
3043        return;
3044    gl->getTransformFeedbackiv(xfb, pname, param);
3045}
3046
3047GLuint glwGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName)
3048{
3049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3050    if (!gl)
3051        return (GLuint)0;
3052    return gl->getUniformBlockIndex(program, uniformBlockName);
3053}
3054
3055void glwGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)
3056{
3057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3058    if (!gl)
3059        return;
3060    gl->getUniformIndices(program, uniformCount, uniformNames, uniformIndices);
3061}
3062
3063GLint glwGetUniformLocation (GLuint program, const GLchar *name)
3064{
3065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3066    if (!gl)
3067        return (GLint)0;
3068    return gl->getUniformLocation(program, name);
3069}
3070
3071void glwGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params)
3072{
3073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3074    if (!gl)
3075        return;
3076    gl->getUniformSubroutineuiv(shadertype, location, params);
3077}
3078
3079void glwGetUniformdv (GLuint program, GLint location, GLdouble *params)
3080{
3081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3082    if (!gl)
3083        return;
3084    gl->getUniformdv(program, location, params);
3085}
3086
3087void glwGetUniformfv (GLuint program, GLint location, GLfloat *params)
3088{
3089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3090    if (!gl)
3091        return;
3092    gl->getUniformfv(program, location, params);
3093}
3094
3095void glwGetUniformiv (GLuint program, GLint location, GLint *params)
3096{
3097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3098    if (!gl)
3099        return;
3100    gl->getUniformiv(program, location, params);
3101}
3102
3103void glwGetUniformuiv (GLuint program, GLint location, GLuint *params)
3104{
3105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3106    if (!gl)
3107        return;
3108    gl->getUniformuiv(program, location, params);
3109}
3110
3111void glwGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param)
3112{
3113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3114    if (!gl)
3115        return;
3116    gl->getVertexArrayIndexed64iv(vaobj, index, pname, param);
3117}
3118
3119void glwGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param)
3120{
3121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3122    if (!gl)
3123        return;
3124    gl->getVertexArrayIndexediv(vaobj, index, pname, param);
3125}
3126
3127void glwGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param)
3128{
3129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3130    if (!gl)
3131        return;
3132    gl->getVertexArrayIntegeri_vEXT(vaobj, index, pname, param);
3133}
3134
3135void glwGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param)
3136{
3137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3138    if (!gl)
3139        return;
3140    gl->getVertexArrayIntegervEXT(vaobj, pname, param);
3141}
3142
3143void glwGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param)
3144{
3145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3146    if (!gl)
3147        return;
3148    gl->getVertexArrayPointeri_vEXT(vaobj, index, pname, param);
3149}
3150
3151void glwGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param)
3152{
3153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3154    if (!gl)
3155        return;
3156    gl->getVertexArrayPointervEXT(vaobj, pname, param);
3157}
3158
3159void glwGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param)
3160{
3161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3162    if (!gl)
3163        return;
3164    gl->getVertexArrayiv(vaobj, pname, param);
3165}
3166
3167void glwGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params)
3168{
3169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3170    if (!gl)
3171        return;
3172    gl->getVertexAttribIiv(index, pname, params);
3173}
3174
3175void glwGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params)
3176{
3177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3178    if (!gl)
3179        return;
3180    gl->getVertexAttribIuiv(index, pname, params);
3181}
3182
3183void glwGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params)
3184{
3185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3186    if (!gl)
3187        return;
3188    gl->getVertexAttribLdv(index, pname, params);
3189}
3190
3191void glwGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer)
3192{
3193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3194    if (!gl)
3195        return;
3196    gl->getVertexAttribPointerv(index, pname, pointer);
3197}
3198
3199void glwGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params)
3200{
3201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3202    if (!gl)
3203        return;
3204    gl->getVertexAttribdv(index, pname, params);
3205}
3206
3207void glwGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params)
3208{
3209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3210    if (!gl)
3211        return;
3212    gl->getVertexAttribfv(index, pname, params);
3213}
3214
3215void glwGetVertexAttribiv (GLuint index, GLenum pname, GLint *params)
3216{
3217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3218    if (!gl)
3219        return;
3220    gl->getVertexAttribiv(index, pname, params);
3221}
3222
3223void glwGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels)
3224{
3225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3226    if (!gl)
3227        return;
3228    gl->getnCompressedTexImage(target, lod, bufSize, pixels);
3229}
3230
3231void glwGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels)
3232{
3233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3234    if (!gl)
3235        return;
3236    gl->getnTexImage(target, level, format, type, bufSize, pixels);
3237}
3238
3239void glwGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params)
3240{
3241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3242    if (!gl)
3243        return;
3244    gl->getnUniformdv(program, location, bufSize, params);
3245}
3246
3247void glwGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params)
3248{
3249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3250    if (!gl)
3251        return;
3252    gl->getnUniformfv(program, location, bufSize, params);
3253}
3254
3255void glwGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params)
3256{
3257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3258    if (!gl)
3259        return;
3260    gl->getnUniformiv(program, location, bufSize, params);
3261}
3262
3263void glwGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params)
3264{
3265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3266    if (!gl)
3267        return;
3268    gl->getnUniformuiv(program, location, bufSize, params);
3269}
3270
3271void glwHint (GLenum target, GLenum mode)
3272{
3273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3274    if (!gl)
3275        return;
3276    gl->hint(target, mode);
3277}
3278
3279void glwInsertEventMarkerEXT (GLsizei length, const GLchar *marker)
3280{
3281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3282    if (!gl)
3283        return;
3284    gl->insertEventMarkerEXT(length, marker);
3285}
3286
3287void glwInvalidateBufferData (GLuint buffer)
3288{
3289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3290    if (!gl)
3291        return;
3292    gl->invalidateBufferData(buffer);
3293}
3294
3295void glwInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length)
3296{
3297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3298    if (!gl)
3299        return;
3300    gl->invalidateBufferSubData(buffer, offset, length);
3301}
3302
3303void glwInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments)
3304{
3305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3306    if (!gl)
3307        return;
3308    gl->invalidateFramebuffer(target, numAttachments, attachments);
3309}
3310
3311void glwInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments)
3312{
3313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3314    if (!gl)
3315        return;
3316    gl->invalidateNamedFramebufferData(framebuffer, numAttachments, attachments);
3317}
3318
3319void glwInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
3320{
3321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3322    if (!gl)
3323        return;
3324    gl->invalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height);
3325}
3326
3327void glwInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
3328{
3329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3330    if (!gl)
3331        return;
3332    gl->invalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
3333}
3334
3335void glwInvalidateTexImage (GLuint texture, GLint level)
3336{
3337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3338    if (!gl)
3339        return;
3340    gl->invalidateTexImage(texture, level);
3341}
3342
3343void glwInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth)
3344{
3345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3346    if (!gl)
3347        return;
3348    gl->invalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth);
3349}
3350
3351GLboolean glwIsBuffer (GLuint buffer)
3352{
3353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3354    if (!gl)
3355        return (GLboolean)0;
3356    return gl->isBuffer(buffer);
3357}
3358
3359GLboolean glwIsEnabled (GLenum cap)
3360{
3361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3362    if (!gl)
3363        return (GLboolean)0;
3364    return gl->isEnabled(cap);
3365}
3366
3367GLboolean glwIsEnabledi (GLenum target, GLuint index)
3368{
3369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3370    if (!gl)
3371        return (GLboolean)0;
3372    return gl->isEnabledi(target, index);
3373}
3374
3375GLboolean glwIsFramebuffer (GLuint framebuffer)
3376{
3377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3378    if (!gl)
3379        return (GLboolean)0;
3380    return gl->isFramebuffer(framebuffer);
3381}
3382
3383GLboolean glwIsProgram (GLuint program)
3384{
3385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3386    if (!gl)
3387        return (GLboolean)0;
3388    return gl->isProgram(program);
3389}
3390
3391GLboolean glwIsProgramPipeline (GLuint pipeline)
3392{
3393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3394    if (!gl)
3395        return (GLboolean)0;
3396    return gl->isProgramPipeline(pipeline);
3397}
3398
3399GLboolean glwIsQuery (GLuint id)
3400{
3401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3402    if (!gl)
3403        return (GLboolean)0;
3404    return gl->isQuery(id);
3405}
3406
3407GLboolean glwIsRenderbuffer (GLuint renderbuffer)
3408{
3409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3410    if (!gl)
3411        return (GLboolean)0;
3412    return gl->isRenderbuffer(renderbuffer);
3413}
3414
3415GLboolean glwIsSampler (GLuint sampler)
3416{
3417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3418    if (!gl)
3419        return (GLboolean)0;
3420    return gl->isSampler(sampler);
3421}
3422
3423GLboolean glwIsShader (GLuint shader)
3424{
3425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3426    if (!gl)
3427        return (GLboolean)0;
3428    return gl->isShader(shader);
3429}
3430
3431GLboolean glwIsSync (GLsync sync)
3432{
3433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3434    if (!gl)
3435        return (GLboolean)0;
3436    return gl->isSync(sync);
3437}
3438
3439GLboolean glwIsTexture (GLuint texture)
3440{
3441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3442    if (!gl)
3443        return (GLboolean)0;
3444    return gl->isTexture(texture);
3445}
3446
3447GLboolean glwIsTransformFeedback (GLuint id)
3448{
3449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3450    if (!gl)
3451        return (GLboolean)0;
3452    return gl->isTransformFeedback(id);
3453}
3454
3455GLboolean glwIsVertexArray (GLuint array)
3456{
3457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3458    if (!gl)
3459        return (GLboolean)0;
3460    return gl->isVertexArray(array);
3461}
3462
3463void glwLineWidth (GLfloat width)
3464{
3465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3466    if (!gl)
3467        return;
3468    gl->lineWidth(width);
3469}
3470
3471void glwLinkProgram (GLuint program)
3472{
3473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3474    if (!gl)
3475        return;
3476    gl->linkProgram(program);
3477}
3478
3479void glwLogicOp (GLenum opcode)
3480{
3481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3482    if (!gl)
3483        return;
3484    gl->logicOp(opcode);
3485}
3486
3487void * glwMapBuffer (GLenum target, GLenum access)
3488{
3489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3490    if (!gl)
3491        return (void *)0;
3492    return gl->mapBuffer(target, access);
3493}
3494
3495void * glwMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
3496{
3497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3498    if (!gl)
3499        return (void *)0;
3500    return gl->mapBufferRange(target, offset, length, access);
3501}
3502
3503void * glwMapNamedBuffer (GLuint buffer, GLenum access)
3504{
3505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3506    if (!gl)
3507        return (void *)0;
3508    return gl->mapNamedBuffer(buffer, access);
3509}
3510
3511void * glwMapNamedBufferEXT (GLuint buffer, GLenum access)
3512{
3513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3514    if (!gl)
3515        return (void *)0;
3516    return gl->mapNamedBufferEXT(buffer, access);
3517}
3518
3519void * glwMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access)
3520{
3521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3522    if (!gl)
3523        return (void *)0;
3524    return gl->mapNamedBufferRange(buffer, offset, length, access);
3525}
3526
3527void * glwMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access)
3528{
3529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3530    if (!gl)
3531        return (void *)0;
3532    return gl->mapNamedBufferRangeEXT(buffer, offset, length, access);
3533}
3534
3535void glwMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
3536{
3537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3538    if (!gl)
3539        return;
3540    gl->matrixFrustumEXT(mode, left, right, bottom, top, zNear, zFar);
3541}
3542
3543void glwMatrixLoadIdentityEXT (GLenum mode)
3544{
3545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3546    if (!gl)
3547        return;
3548    gl->matrixLoadIdentityEXT(mode);
3549}
3550
3551void glwMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m)
3552{
3553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3554    if (!gl)
3555        return;
3556    gl->matrixLoadTransposedEXT(mode, m);
3557}
3558
3559void glwMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m)
3560{
3561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3562    if (!gl)
3563        return;
3564    gl->matrixLoadTransposefEXT(mode, m);
3565}
3566
3567void glwMatrixLoaddEXT (GLenum mode, const GLdouble *m)
3568{
3569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3570    if (!gl)
3571        return;
3572    gl->matrixLoaddEXT(mode, m);
3573}
3574
3575void glwMatrixLoadfEXT (GLenum mode, const GLfloat *m)
3576{
3577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3578    if (!gl)
3579        return;
3580    gl->matrixLoadfEXT(mode, m);
3581}
3582
3583void glwMatrixMultTransposedEXT (GLenum mode, const GLdouble *m)
3584{
3585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3586    if (!gl)
3587        return;
3588    gl->matrixMultTransposedEXT(mode, m);
3589}
3590
3591void glwMatrixMultTransposefEXT (GLenum mode, const GLfloat *m)
3592{
3593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3594    if (!gl)
3595        return;
3596    gl->matrixMultTransposefEXT(mode, m);
3597}
3598
3599void glwMatrixMultdEXT (GLenum mode, const GLdouble *m)
3600{
3601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3602    if (!gl)
3603        return;
3604    gl->matrixMultdEXT(mode, m);
3605}
3606
3607void glwMatrixMultfEXT (GLenum mode, const GLfloat *m)
3608{
3609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3610    if (!gl)
3611        return;
3612    gl->matrixMultfEXT(mode, m);
3613}
3614
3615void glwMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
3616{
3617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3618    if (!gl)
3619        return;
3620    gl->matrixOrthoEXT(mode, left, right, bottom, top, zNear, zFar);
3621}
3622
3623void glwMatrixPopEXT (GLenum mode)
3624{
3625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3626    if (!gl)
3627        return;
3628    gl->matrixPopEXT(mode);
3629}
3630
3631void glwMatrixPushEXT (GLenum mode)
3632{
3633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3634    if (!gl)
3635        return;
3636    gl->matrixPushEXT(mode);
3637}
3638
3639void glwMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
3640{
3641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3642    if (!gl)
3643        return;
3644    gl->matrixRotatedEXT(mode, angle, x, y, z);
3645}
3646
3647void glwMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
3648{
3649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3650    if (!gl)
3651        return;
3652    gl->matrixRotatefEXT(mode, angle, x, y, z);
3653}
3654
3655void glwMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z)
3656{
3657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3658    if (!gl)
3659        return;
3660    gl->matrixScaledEXT(mode, x, y, z);
3661}
3662
3663void glwMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z)
3664{
3665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3666    if (!gl)
3667        return;
3668    gl->matrixScalefEXT(mode, x, y, z);
3669}
3670
3671void glwMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z)
3672{
3673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3674    if (!gl)
3675        return;
3676    gl->matrixTranslatedEXT(mode, x, y, z);
3677}
3678
3679void glwMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z)
3680{
3681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3682    if (!gl)
3683        return;
3684    gl->matrixTranslatefEXT(mode, x, y, z);
3685}
3686
3687void glwMaxShaderCompilerThreadsKHR (GLuint count)
3688{
3689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3690    if (!gl)
3691        return;
3692    gl->maxShaderCompilerThreadsKHR(count);
3693}
3694
3695void glwMemoryBarrier (GLbitfield barriers)
3696{
3697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3698    if (!gl)
3699        return;
3700    gl->memoryBarrier(barriers);
3701}
3702
3703void glwMemoryBarrierByRegion (GLbitfield barriers)
3704{
3705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3706    if (!gl)
3707        return;
3708    gl->memoryBarrierByRegion(barriers);
3709}
3710
3711void glwMinSampleShading (GLfloat value)
3712{
3713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3714    if (!gl)
3715        return;
3716    gl->minSampleShading(value);
3717}
3718
3719void glwMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount)
3720{
3721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3722    if (!gl)
3723        return;
3724    gl->multiDrawArrays(mode, first, count, drawcount);
3725}
3726
3727void glwMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride)
3728{
3729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3730    if (!gl)
3731        return;
3732    gl->multiDrawArraysIndirect(mode, indirect, drawcount, stride);
3733}
3734
3735void glwMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride)
3736{
3737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3738    if (!gl)
3739        return;
3740    gl->multiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride);
3741}
3742
3743void glwMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount)
3744{
3745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3746    if (!gl)
3747        return;
3748    gl->multiDrawElements(mode, count, type, indices, drawcount);
3749}
3750
3751void glwMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex)
3752{
3753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3754    if (!gl)
3755        return;
3756    gl->multiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex);
3757}
3758
3759void glwMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride)
3760{
3761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3762    if (!gl)
3763        return;
3764    gl->multiDrawElementsIndirect(mode, type, indirect, drawcount, stride);
3765}
3766
3767void glwMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride)
3768{
3769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3770    if (!gl)
3771        return;
3772    gl->multiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride);
3773}
3774
3775void glwMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer)
3776{
3777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3778    if (!gl)
3779        return;
3780    gl->multiTexBufferEXT(texunit, target, internalformat, buffer);
3781}
3782
3783void glwMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer)
3784{
3785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3786    if (!gl)
3787        return;
3788    gl->multiTexCoordPointerEXT(texunit, size, type, stride, pointer);
3789}
3790
3791void glwMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param)
3792{
3793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3794    if (!gl)
3795        return;
3796    gl->multiTexEnvfEXT(texunit, target, pname, param);
3797}
3798
3799void glwMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params)
3800{
3801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3802    if (!gl)
3803        return;
3804    gl->multiTexEnvfvEXT(texunit, target, pname, params);
3805}
3806
3807void glwMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param)
3808{
3809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3810    if (!gl)
3811        return;
3812    gl->multiTexEnviEXT(texunit, target, pname, param);
3813}
3814
3815void glwMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params)
3816{
3817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3818    if (!gl)
3819        return;
3820    gl->multiTexEnvivEXT(texunit, target, pname, params);
3821}
3822
3823void glwMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param)
3824{
3825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3826    if (!gl)
3827        return;
3828    gl->multiTexGendEXT(texunit, coord, pname, param);
3829}
3830
3831void glwMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params)
3832{
3833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3834    if (!gl)
3835        return;
3836    gl->multiTexGendvEXT(texunit, coord, pname, params);
3837}
3838
3839void glwMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param)
3840{
3841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3842    if (!gl)
3843        return;
3844    gl->multiTexGenfEXT(texunit, coord, pname, param);
3845}
3846
3847void glwMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params)
3848{
3849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3850    if (!gl)
3851        return;
3852    gl->multiTexGenfvEXT(texunit, coord, pname, params);
3853}
3854
3855void glwMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param)
3856{
3857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3858    if (!gl)
3859        return;
3860    gl->multiTexGeniEXT(texunit, coord, pname, param);
3861}
3862
3863void glwMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params)
3864{
3865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3866    if (!gl)
3867        return;
3868    gl->multiTexGenivEXT(texunit, coord, pname, params);
3869}
3870
3871void glwMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
3872{
3873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3874    if (!gl)
3875        return;
3876    gl->multiTexImage1DEXT(texunit, target, level, internalformat, width, border, format, type, pixels);
3877}
3878
3879void glwMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
3880{
3881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3882    if (!gl)
3883        return;
3884    gl->multiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, format, type, pixels);
3885}
3886
3887void glwMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)
3888{
3889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3890    if (!gl)
3891        return;
3892    gl->multiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, format, type, pixels);
3893}
3894
3895void glwMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params)
3896{
3897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3898    if (!gl)
3899        return;
3900    gl->multiTexParameterIivEXT(texunit, target, pname, params);
3901}
3902
3903void glwMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params)
3904{
3905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3906    if (!gl)
3907        return;
3908    gl->multiTexParameterIuivEXT(texunit, target, pname, params);
3909}
3910
3911void glwMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param)
3912{
3913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3914    if (!gl)
3915        return;
3916    gl->multiTexParameterfEXT(texunit, target, pname, param);
3917}
3918
3919void glwMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params)
3920{
3921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3922    if (!gl)
3923        return;
3924    gl->multiTexParameterfvEXT(texunit, target, pname, params);
3925}
3926
3927void glwMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param)
3928{
3929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3930    if (!gl)
3931        return;
3932    gl->multiTexParameteriEXT(texunit, target, pname, param);
3933}
3934
3935void glwMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params)
3936{
3937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3938    if (!gl)
3939        return;
3940    gl->multiTexParameterivEXT(texunit, target, pname, params);
3941}
3942
3943void glwMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer)
3944{
3945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3946    if (!gl)
3947        return;
3948    gl->multiTexRenderbufferEXT(texunit, target, renderbuffer);
3949}
3950
3951void glwMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
3952{
3953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3954    if (!gl)
3955        return;
3956    gl->multiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, type, pixels);
3957}
3958
3959void glwMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
3960{
3961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3962    if (!gl)
3963        return;
3964    gl->multiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, type, pixels);
3965}
3966
3967void glwMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)
3968{
3969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3970    if (!gl)
3971        return;
3972    gl->multiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
3973}
3974
3975void glwMulticastBarrierNV (void)
3976{
3977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3978    if (!gl)
3979        return;
3980    gl->multicastBarrierNV();
3981}
3982
3983void glwMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
3984{
3985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3986    if (!gl)
3987        return;
3988    gl->multicastBlitFramebufferNV(srcGpu, dstGpu, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
3989}
3990
3991void glwMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data)
3992{
3993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
3994    if (!gl)
3995        return;
3996    gl->multicastBufferSubDataNV(gpuMask, buffer, offset, size, data);
3997}
3998
3999void glwMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
4000{
4001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4002    if (!gl)
4003        return;
4004    gl->multicastCopyBufferSubDataNV(readGpu, writeGpuMask, readBuffer, writeBuffer, readOffset, writeOffset, size);
4005}
4006
4007void glwMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth)
4008{
4009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4010    if (!gl)
4011        return;
4012    gl->multicastCopyImageSubDataNV(srcGpu, dstGpuMask, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
4013}
4014
4015void glwMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v)
4016{
4017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4018    if (!gl)
4019        return;
4020    gl->multicastFramebufferSampleLocationsfvNV(gpu, framebuffer, start, count, v);
4021}
4022
4023void glwMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params)
4024{
4025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4026    if (!gl)
4027        return;
4028    gl->multicastGetQueryObjecti64vNV(gpu, id, pname, params);
4029}
4030
4031void glwMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params)
4032{
4033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4034    if (!gl)
4035        return;
4036    gl->multicastGetQueryObjectivNV(gpu, id, pname, params);
4037}
4038
4039void glwMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params)
4040{
4041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4042    if (!gl)
4043        return;
4044    gl->multicastGetQueryObjectui64vNV(gpu, id, pname, params);
4045}
4046
4047void glwMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params)
4048{
4049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4050    if (!gl)
4051        return;
4052    gl->multicastGetQueryObjectuivNV(gpu, id, pname, params);
4053}
4054
4055void glwMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask)
4056{
4057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4058    if (!gl)
4059        return;
4060    gl->multicastWaitSyncNV(signalGpu, waitGpuMask);
4061}
4062
4063void glwNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage)
4064{
4065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4066    if (!gl)
4067        return;
4068    gl->namedBufferData(buffer, size, data, usage);
4069}
4070
4071void glwNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage)
4072{
4073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4074    if (!gl)
4075        return;
4076    gl->namedBufferDataEXT(buffer, size, data, usage);
4077}
4078
4079void glwNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit)
4080{
4081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4082    if (!gl)
4083        return;
4084    gl->namedBufferPageCommitmentARB(buffer, offset, size, commit);
4085}
4086
4087void glwNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit)
4088{
4089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4090    if (!gl)
4091        return;
4092    gl->namedBufferPageCommitmentEXT(buffer, offset, size, commit);
4093}
4094
4095void glwNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags)
4096{
4097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4098    if (!gl)
4099        return;
4100    gl->namedBufferStorage(buffer, size, data, flags);
4101}
4102
4103void glwNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data)
4104{
4105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4106    if (!gl)
4107        return;
4108    gl->namedBufferSubData(buffer, offset, size, data);
4109}
4110
4111void glwNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
4112{
4113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4114    if (!gl)
4115        return;
4116    gl->namedCopyBufferSubDataEXT(readBuffer, writeBuffer, readOffset, writeOffset, size);
4117}
4118
4119void glwNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf)
4120{
4121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4122    if (!gl)
4123        return;
4124    gl->namedFramebufferDrawBuffer(framebuffer, buf);
4125}
4126
4127void glwNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs)
4128{
4129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4130    if (!gl)
4131        return;
4132    gl->namedFramebufferDrawBuffers(framebuffer, n, bufs);
4133}
4134
4135void glwNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param)
4136{
4137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4138    if (!gl)
4139        return;
4140    gl->namedFramebufferParameteri(framebuffer, pname, param);
4141}
4142
4143void glwNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param)
4144{
4145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4146    if (!gl)
4147        return;
4148    gl->namedFramebufferParameteriEXT(framebuffer, pname, param);
4149}
4150
4151void glwNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src)
4152{
4153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4154    if (!gl)
4155        return;
4156    gl->namedFramebufferReadBuffer(framebuffer, src);
4157}
4158
4159void glwNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
4160{
4161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4162    if (!gl)
4163        return;
4164    gl->namedFramebufferRenderbuffer(framebuffer, attachment, renderbuffertarget, renderbuffer);
4165}
4166
4167void glwNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
4168{
4169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4170    if (!gl)
4171        return;
4172    gl->namedFramebufferRenderbufferEXT(framebuffer, attachment, renderbuffertarget, renderbuffer);
4173}
4174
4175void glwNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level)
4176{
4177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4178    if (!gl)
4179        return;
4180    gl->namedFramebufferTexture(framebuffer, attachment, texture, level);
4181}
4182
4183void glwNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
4184{
4185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4186    if (!gl)
4187        return;
4188    gl->namedFramebufferTexture1DEXT(framebuffer, attachment, textarget, texture, level);
4189}
4190
4191void glwNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
4192{
4193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4194    if (!gl)
4195        return;
4196    gl->namedFramebufferTexture2DEXT(framebuffer, attachment, textarget, texture, level);
4197}
4198
4199void glwNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
4200{
4201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4202    if (!gl)
4203        return;
4204    gl->namedFramebufferTexture3DEXT(framebuffer, attachment, textarget, texture, level, zoffset);
4205}
4206
4207void glwNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level)
4208{
4209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4210    if (!gl)
4211        return;
4212    gl->namedFramebufferTextureEXT(framebuffer, attachment, texture, level);
4213}
4214
4215void glwNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face)
4216{
4217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4218    if (!gl)
4219        return;
4220    gl->namedFramebufferTextureFaceEXT(framebuffer, attachment, texture, level, face);
4221}
4222
4223void glwNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer)
4224{
4225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4226    if (!gl)
4227        return;
4228    gl->namedFramebufferTextureLayer(framebuffer, attachment, texture, level, layer);
4229}
4230
4231void glwNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer)
4232{
4233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4234    if (!gl)
4235        return;
4236    gl->namedFramebufferTextureLayerEXT(framebuffer, attachment, texture, level, layer);
4237}
4238
4239void glwNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
4240{
4241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4242    if (!gl)
4243        return;
4244    gl->namedProgramLocalParameter4dEXT(program, target, index, x, y, z, w);
4245}
4246
4247void glwNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params)
4248{
4249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4250    if (!gl)
4251        return;
4252    gl->namedProgramLocalParameter4dvEXT(program, target, index, params);
4253}
4254
4255void glwNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
4256{
4257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4258    if (!gl)
4259        return;
4260    gl->namedProgramLocalParameter4fEXT(program, target, index, x, y, z, w);
4261}
4262
4263void glwNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params)
4264{
4265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4266    if (!gl)
4267        return;
4268    gl->namedProgramLocalParameter4fvEXT(program, target, index, params);
4269}
4270
4271void glwNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w)
4272{
4273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4274    if (!gl)
4275        return;
4276    gl->namedProgramLocalParameterI4iEXT(program, target, index, x, y, z, w);
4277}
4278
4279void glwNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params)
4280{
4281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4282    if (!gl)
4283        return;
4284    gl->namedProgramLocalParameterI4ivEXT(program, target, index, params);
4285}
4286
4287void glwNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
4288{
4289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4290    if (!gl)
4291        return;
4292    gl->namedProgramLocalParameterI4uiEXT(program, target, index, x, y, z, w);
4293}
4294
4295void glwNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params)
4296{
4297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4298    if (!gl)
4299        return;
4300    gl->namedProgramLocalParameterI4uivEXT(program, target, index, params);
4301}
4302
4303void glwNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params)
4304{
4305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4306    if (!gl)
4307        return;
4308    gl->namedProgramLocalParameters4fvEXT(program, target, index, count, params);
4309}
4310
4311void glwNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params)
4312{
4313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4314    if (!gl)
4315        return;
4316    gl->namedProgramLocalParametersI4ivEXT(program, target, index, count, params);
4317}
4318
4319void glwNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params)
4320{
4321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4322    if (!gl)
4323        return;
4324    gl->namedProgramLocalParametersI4uivEXT(program, target, index, count, params);
4325}
4326
4327void glwNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string)
4328{
4329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4330    if (!gl)
4331        return;
4332    gl->namedProgramStringEXT(program, target, format, len, string);
4333}
4334
4335void glwNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height)
4336{
4337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4338    if (!gl)
4339        return;
4340    gl->namedRenderbufferStorage(renderbuffer, internalformat, width, height);
4341}
4342
4343void glwNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height)
4344{
4345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4346    if (!gl)
4347        return;
4348    gl->namedRenderbufferStorageEXT(renderbuffer, internalformat, width, height);
4349}
4350
4351void glwNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
4352{
4353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4354    if (!gl)
4355        return;
4356    gl->namedRenderbufferStorageMultisample(renderbuffer, samples, internalformat, width, height);
4357}
4358
4359void glwNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height)
4360{
4361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4362    if (!gl)
4363        return;
4364    gl->namedRenderbufferStorageMultisampleCoverageEXT(renderbuffer, coverageSamples, colorSamples, internalformat, width, height);
4365}
4366
4367void glwNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
4368{
4369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4370    if (!gl)
4371        return;
4372    gl->namedRenderbufferStorageMultisampleEXT(renderbuffer, samples, internalformat, width, height);
4373}
4374
4375void glwObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label)
4376{
4377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4378    if (!gl)
4379        return;
4380    gl->objectLabel(identifier, name, length, label);
4381}
4382
4383void glwObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label)
4384{
4385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4386    if (!gl)
4387        return;
4388    gl->objectPtrLabel(ptr, length, label);
4389}
4390
4391void glwPatchParameterfv (GLenum pname, const GLfloat *values)
4392{
4393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4394    if (!gl)
4395        return;
4396    gl->patchParameterfv(pname, values);
4397}
4398
4399void glwPatchParameteri (GLenum pname, GLint value)
4400{
4401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4402    if (!gl)
4403        return;
4404    gl->patchParameteri(pname, value);
4405}
4406
4407void glwPauseTransformFeedback (void)
4408{
4409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4410    if (!gl)
4411        return;
4412    gl->pauseTransformFeedback();
4413}
4414
4415void glwPixelStoref (GLenum pname, GLfloat param)
4416{
4417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4418    if (!gl)
4419        return;
4420    gl->pixelStoref(pname, param);
4421}
4422
4423void glwPixelStorei (GLenum pname, GLint param)
4424{
4425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4426    if (!gl)
4427        return;
4428    gl->pixelStorei(pname, param);
4429}
4430
4431void glwPointParameterf (GLenum pname, GLfloat param)
4432{
4433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4434    if (!gl)
4435        return;
4436    gl->pointParameterf(pname, param);
4437}
4438
4439void glwPointParameterfv (GLenum pname, const GLfloat *params)
4440{
4441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4442    if (!gl)
4443        return;
4444    gl->pointParameterfv(pname, params);
4445}
4446
4447void glwPointParameteri (GLenum pname, GLint param)
4448{
4449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4450    if (!gl)
4451        return;
4452    gl->pointParameteri(pname, param);
4453}
4454
4455void glwPointParameteriv (GLenum pname, const GLint *params)
4456{
4457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4458    if (!gl)
4459        return;
4460    gl->pointParameteriv(pname, params);
4461}
4462
4463void glwPointSize (GLfloat size)
4464{
4465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4466    if (!gl)
4467        return;
4468    gl->pointSize(size);
4469}
4470
4471void glwPolygonMode (GLenum face, GLenum mode)
4472{
4473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4474    if (!gl)
4475        return;
4476    gl->polygonMode(face, mode);
4477}
4478
4479void glwPolygonOffset (GLfloat factor, GLfloat units)
4480{
4481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4482    if (!gl)
4483        return;
4484    gl->polygonOffset(factor, units);
4485}
4486
4487void glwPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp)
4488{
4489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4490    if (!gl)
4491        return;
4492    gl->polygonOffsetClamp(factor, units, clamp);
4493}
4494
4495void glwPopDebugGroup (void)
4496{
4497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4498    if (!gl)
4499        return;
4500    gl->popDebugGroup();
4501}
4502
4503void glwPopGroupMarkerEXT (void)
4504{
4505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4506    if (!gl)
4507        return;
4508    gl->popGroupMarkerEXT();
4509}
4510
4511void glwPrimitiveBoundingBox (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)
4512{
4513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4514    if (!gl)
4515        return;
4516    gl->primitiveBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
4517}
4518
4519void glwPrimitiveRestartIndex (GLuint index)
4520{
4521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4522    if (!gl)
4523        return;
4524    gl->primitiveRestartIndex(index);
4525}
4526
4527void glwProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)
4528{
4529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4530    if (!gl)
4531        return;
4532    gl->programBinary(program, binaryFormat, binary, length);
4533}
4534
4535void glwProgramParameteri (GLuint program, GLenum pname, GLint value)
4536{
4537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4538    if (!gl)
4539        return;
4540    gl->programParameteri(program, pname, value);
4541}
4542
4543void glwProgramUniform1d (GLuint program, GLint location, GLdouble v0)
4544{
4545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4546    if (!gl)
4547        return;
4548    gl->programUniform1d(program, location, v0);
4549}
4550
4551void glwProgramUniform1dEXT (GLuint program, GLint location, GLdouble x)
4552{
4553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4554    if (!gl)
4555        return;
4556    gl->programUniform1dEXT(program, location, x);
4557}
4558
4559void glwProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4560{
4561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4562    if (!gl)
4563        return;
4564    gl->programUniform1dv(program, location, count, value);
4565}
4566
4567void glwProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4568{
4569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4570    if (!gl)
4571        return;
4572    gl->programUniform1dvEXT(program, location, count, value);
4573}
4574
4575void glwProgramUniform1f (GLuint program, GLint location, GLfloat v0)
4576{
4577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4578    if (!gl)
4579        return;
4580    gl->programUniform1f(program, location, v0);
4581}
4582
4583void glwProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value)
4584{
4585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4586    if (!gl)
4587        return;
4588    gl->programUniform1fv(program, location, count, value);
4589}
4590
4591void glwProgramUniform1i (GLuint program, GLint location, GLint v0)
4592{
4593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4594    if (!gl)
4595        return;
4596    gl->programUniform1i(program, location, v0);
4597}
4598
4599void glwProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value)
4600{
4601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4602    if (!gl)
4603        return;
4604    gl->programUniform1iv(program, location, count, value);
4605}
4606
4607void glwProgramUniform1ui (GLuint program, GLint location, GLuint v0)
4608{
4609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4610    if (!gl)
4611        return;
4612    gl->programUniform1ui(program, location, v0);
4613}
4614
4615void glwProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value)
4616{
4617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4618    if (!gl)
4619        return;
4620    gl->programUniform1uiv(program, location, count, value);
4621}
4622
4623void glwProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1)
4624{
4625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4626    if (!gl)
4627        return;
4628    gl->programUniform2d(program, location, v0, v1);
4629}
4630
4631void glwProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y)
4632{
4633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4634    if (!gl)
4635        return;
4636    gl->programUniform2dEXT(program, location, x, y);
4637}
4638
4639void glwProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4640{
4641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4642    if (!gl)
4643        return;
4644    gl->programUniform2dv(program, location, count, value);
4645}
4646
4647void glwProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4648{
4649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4650    if (!gl)
4651        return;
4652    gl->programUniform2dvEXT(program, location, count, value);
4653}
4654
4655void glwProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1)
4656{
4657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4658    if (!gl)
4659        return;
4660    gl->programUniform2f(program, location, v0, v1);
4661}
4662
4663void glwProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value)
4664{
4665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4666    if (!gl)
4667        return;
4668    gl->programUniform2fv(program, location, count, value);
4669}
4670
4671void glwProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1)
4672{
4673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4674    if (!gl)
4675        return;
4676    gl->programUniform2i(program, location, v0, v1);
4677}
4678
4679void glwProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value)
4680{
4681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4682    if (!gl)
4683        return;
4684    gl->programUniform2iv(program, location, count, value);
4685}
4686
4687void glwProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1)
4688{
4689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4690    if (!gl)
4691        return;
4692    gl->programUniform2ui(program, location, v0, v1);
4693}
4694
4695void glwProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value)
4696{
4697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4698    if (!gl)
4699        return;
4700    gl->programUniform2uiv(program, location, count, value);
4701}
4702
4703void glwProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2)
4704{
4705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4706    if (!gl)
4707        return;
4708    gl->programUniform3d(program, location, v0, v1, v2);
4709}
4710
4711void glwProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z)
4712{
4713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4714    if (!gl)
4715        return;
4716    gl->programUniform3dEXT(program, location, x, y, z);
4717}
4718
4719void glwProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4720{
4721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4722    if (!gl)
4723        return;
4724    gl->programUniform3dv(program, location, count, value);
4725}
4726
4727void glwProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4728{
4729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4730    if (!gl)
4731        return;
4732    gl->programUniform3dvEXT(program, location, count, value);
4733}
4734
4735void glwProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
4736{
4737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4738    if (!gl)
4739        return;
4740    gl->programUniform3f(program, location, v0, v1, v2);
4741}
4742
4743void glwProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value)
4744{
4745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4746    if (!gl)
4747        return;
4748    gl->programUniform3fv(program, location, count, value);
4749}
4750
4751void glwProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
4752{
4753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4754    if (!gl)
4755        return;
4756    gl->programUniform3i(program, location, v0, v1, v2);
4757}
4758
4759void glwProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value)
4760{
4761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4762    if (!gl)
4763        return;
4764    gl->programUniform3iv(program, location, count, value);
4765}
4766
4767void glwProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
4768{
4769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4770    if (!gl)
4771        return;
4772    gl->programUniform3ui(program, location, v0, v1, v2);
4773}
4774
4775void glwProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value)
4776{
4777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4778    if (!gl)
4779        return;
4780    gl->programUniform3uiv(program, location, count, value);
4781}
4782
4783void glwProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3)
4784{
4785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4786    if (!gl)
4787        return;
4788    gl->programUniform4d(program, location, v0, v1, v2, v3);
4789}
4790
4791void glwProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
4792{
4793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4794    if (!gl)
4795        return;
4796    gl->programUniform4dEXT(program, location, x, y, z, w);
4797}
4798
4799void glwProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4800{
4801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4802    if (!gl)
4803        return;
4804    gl->programUniform4dv(program, location, count, value);
4805}
4806
4807void glwProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value)
4808{
4809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4810    if (!gl)
4811        return;
4812    gl->programUniform4dvEXT(program, location, count, value);
4813}
4814
4815void glwProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
4816{
4817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4818    if (!gl)
4819        return;
4820    gl->programUniform4f(program, location, v0, v1, v2, v3);
4821}
4822
4823void glwProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value)
4824{
4825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4826    if (!gl)
4827        return;
4828    gl->programUniform4fv(program, location, count, value);
4829}
4830
4831void glwProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
4832{
4833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4834    if (!gl)
4835        return;
4836    gl->programUniform4i(program, location, v0, v1, v2, v3);
4837}
4838
4839void glwProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value)
4840{
4841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4842    if (!gl)
4843        return;
4844    gl->programUniform4iv(program, location, count, value);
4845}
4846
4847void glwProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
4848{
4849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4850    if (!gl)
4851        return;
4852    gl->programUniform4ui(program, location, v0, v1, v2, v3);
4853}
4854
4855void glwProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value)
4856{
4857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4858    if (!gl)
4859        return;
4860    gl->programUniform4uiv(program, location, count, value);
4861}
4862
4863void glwProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4864{
4865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4866    if (!gl)
4867        return;
4868    gl->programUniformMatrix2dv(program, location, count, transpose, value);
4869}
4870
4871void glwProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4872{
4873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4874    if (!gl)
4875        return;
4876    gl->programUniformMatrix2dvEXT(program, location, count, transpose, value);
4877}
4878
4879void glwProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
4880{
4881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4882    if (!gl)
4883        return;
4884    gl->programUniformMatrix2fv(program, location, count, transpose, value);
4885}
4886
4887void glwProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4888{
4889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4890    if (!gl)
4891        return;
4892    gl->programUniformMatrix2x3dv(program, location, count, transpose, value);
4893}
4894
4895void glwProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4896{
4897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4898    if (!gl)
4899        return;
4900    gl->programUniformMatrix2x3dvEXT(program, location, count, transpose, value);
4901}
4902
4903void glwProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
4904{
4905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4906    if (!gl)
4907        return;
4908    gl->programUniformMatrix2x3fv(program, location, count, transpose, value);
4909}
4910
4911void glwProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4912{
4913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4914    if (!gl)
4915        return;
4916    gl->programUniformMatrix2x4dv(program, location, count, transpose, value);
4917}
4918
4919void glwProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4920{
4921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4922    if (!gl)
4923        return;
4924    gl->programUniformMatrix2x4dvEXT(program, location, count, transpose, value);
4925}
4926
4927void glwProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
4928{
4929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4930    if (!gl)
4931        return;
4932    gl->programUniformMatrix2x4fv(program, location, count, transpose, value);
4933}
4934
4935void glwProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4936{
4937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4938    if (!gl)
4939        return;
4940    gl->programUniformMatrix3dv(program, location, count, transpose, value);
4941}
4942
4943void glwProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4944{
4945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4946    if (!gl)
4947        return;
4948    gl->programUniformMatrix3dvEXT(program, location, count, transpose, value);
4949}
4950
4951void glwProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
4952{
4953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4954    if (!gl)
4955        return;
4956    gl->programUniformMatrix3fv(program, location, count, transpose, value);
4957}
4958
4959void glwProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4960{
4961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4962    if (!gl)
4963        return;
4964    gl->programUniformMatrix3x2dv(program, location, count, transpose, value);
4965}
4966
4967void glwProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4968{
4969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4970    if (!gl)
4971        return;
4972    gl->programUniformMatrix3x2dvEXT(program, location, count, transpose, value);
4973}
4974
4975void glwProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
4976{
4977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4978    if (!gl)
4979        return;
4980    gl->programUniformMatrix3x2fv(program, location, count, transpose, value);
4981}
4982
4983void glwProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4984{
4985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4986    if (!gl)
4987        return;
4988    gl->programUniformMatrix3x4dv(program, location, count, transpose, value);
4989}
4990
4991void glwProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
4992{
4993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
4994    if (!gl)
4995        return;
4996    gl->programUniformMatrix3x4dvEXT(program, location, count, transpose, value);
4997}
4998
4999void glwProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
5000{
5001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5002    if (!gl)
5003        return;
5004    gl->programUniformMatrix3x4fv(program, location, count, transpose, value);
5005}
5006
5007void glwProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
5008{
5009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5010    if (!gl)
5011        return;
5012    gl->programUniformMatrix4dv(program, location, count, transpose, value);
5013}
5014
5015void glwProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
5016{
5017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5018    if (!gl)
5019        return;
5020    gl->programUniformMatrix4dvEXT(program, location, count, transpose, value);
5021}
5022
5023void glwProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
5024{
5025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5026    if (!gl)
5027        return;
5028    gl->programUniformMatrix4fv(program, location, count, transpose, value);
5029}
5030
5031void glwProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
5032{
5033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5034    if (!gl)
5035        return;
5036    gl->programUniformMatrix4x2dv(program, location, count, transpose, value);
5037}
5038
5039void glwProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
5040{
5041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5042    if (!gl)
5043        return;
5044    gl->programUniformMatrix4x2dvEXT(program, location, count, transpose, value);
5045}
5046
5047void glwProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
5048{
5049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5050    if (!gl)
5051        return;
5052    gl->programUniformMatrix4x2fv(program, location, count, transpose, value);
5053}
5054
5055void glwProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
5056{
5057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5058    if (!gl)
5059        return;
5060    gl->programUniformMatrix4x3dv(program, location, count, transpose, value);
5061}
5062
5063void glwProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
5064{
5065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5066    if (!gl)
5067        return;
5068    gl->programUniformMatrix4x3dvEXT(program, location, count, transpose, value);
5069}
5070
5071void glwProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
5072{
5073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5074    if (!gl)
5075        return;
5076    gl->programUniformMatrix4x3fv(program, location, count, transpose, value);
5077}
5078
5079void glwProvokingVertex (GLenum mode)
5080{
5081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5082    if (!gl)
5083        return;
5084    gl->provokingVertex(mode);
5085}
5086
5087void glwPushClientAttribDefaultEXT (GLbitfield mask)
5088{
5089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5090    if (!gl)
5091        return;
5092    gl->pushClientAttribDefaultEXT(mask);
5093}
5094
5095void glwPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message)
5096{
5097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5098    if (!gl)
5099        return;
5100    gl->pushDebugGroup(source, id, length, message);
5101}
5102
5103void glwPushGroupMarkerEXT (GLsizei length, const GLchar *marker)
5104{
5105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5106    if (!gl)
5107        return;
5108    gl->pushGroupMarkerEXT(length, marker);
5109}
5110
5111void glwQueryCounter (GLuint id, GLenum target)
5112{
5113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5114    if (!gl)
5115        return;
5116    gl->queryCounter(id, target);
5117}
5118
5119void glwReadBuffer (GLenum src)
5120{
5121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5122    if (!gl)
5123        return;
5124    gl->readBuffer(src);
5125}
5126
5127void glwReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
5128{
5129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5130    if (!gl)
5131        return;
5132    gl->readPixels(x, y, width, height, format, type, pixels);
5133}
5134
5135void glwReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data)
5136{
5137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5138    if (!gl)
5139        return;
5140    gl->readnPixels(x, y, width, height, format, type, bufSize, data);
5141}
5142
5143void glwReleaseShaderCompiler (void)
5144{
5145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5146    if (!gl)
5147        return;
5148    gl->releaseShaderCompiler();
5149}
5150
5151void glwRenderGpuMaskNV (GLbitfield mask)
5152{
5153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5154    if (!gl)
5155        return;
5156    gl->renderGpuMaskNV(mask);
5157}
5158
5159void glwRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
5160{
5161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5162    if (!gl)
5163        return;
5164    gl->renderbufferStorage(target, internalformat, width, height);
5165}
5166
5167void glwRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
5168{
5169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5170    if (!gl)
5171        return;
5172    gl->renderbufferStorageMultisample(target, samples, internalformat, width, height);
5173}
5174
5175void glwRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
5176{
5177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5178    if (!gl)
5179        return;
5180    gl->renderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
5181}
5182
5183void glwResumeTransformFeedback (void)
5184{
5185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5186    if (!gl)
5187        return;
5188    gl->resumeTransformFeedback();
5189}
5190
5191void glwSampleCoverage (GLfloat value, GLboolean invert)
5192{
5193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5194    if (!gl)
5195        return;
5196    gl->sampleCoverage(value, invert);
5197}
5198
5199void glwSampleMaski (GLuint maskNumber, GLbitfield mask)
5200{
5201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5202    if (!gl)
5203        return;
5204    gl->sampleMaski(maskNumber, mask);
5205}
5206
5207void glwSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param)
5208{
5209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5210    if (!gl)
5211        return;
5212    gl->samplerParameterIiv(sampler, pname, param);
5213}
5214
5215void glwSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param)
5216{
5217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5218    if (!gl)
5219        return;
5220    gl->samplerParameterIuiv(sampler, pname, param);
5221}
5222
5223void glwSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param)
5224{
5225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5226    if (!gl)
5227        return;
5228    gl->samplerParameterf(sampler, pname, param);
5229}
5230
5231void glwSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param)
5232{
5233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5234    if (!gl)
5235        return;
5236    gl->samplerParameterfv(sampler, pname, param);
5237}
5238
5239void glwSamplerParameteri (GLuint sampler, GLenum pname, GLint param)
5240{
5241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5242    if (!gl)
5243        return;
5244    gl->samplerParameteri(sampler, pname, param);
5245}
5246
5247void glwSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param)
5248{
5249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5250    if (!gl)
5251        return;
5252    gl->samplerParameteriv(sampler, pname, param);
5253}
5254
5255void glwScissor (GLint x, GLint y, GLsizei width, GLsizei height)
5256{
5257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5258    if (!gl)
5259        return;
5260    gl->scissor(x, y, width, height);
5261}
5262
5263void glwScissorArrayv (GLuint first, GLsizei count, const GLint *v)
5264{
5265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5266    if (!gl)
5267        return;
5268    gl->scissorArrayv(first, count, v);
5269}
5270
5271void glwScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height)
5272{
5273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5274    if (!gl)
5275        return;
5276    gl->scissorIndexed(index, left, bottom, width, height);
5277}
5278
5279void glwScissorIndexedv (GLuint index, const GLint *v)
5280{
5281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5282    if (!gl)
5283        return;
5284    gl->scissorIndexedv(index, v);
5285}
5286
5287void glwShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length)
5288{
5289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5290    if (!gl)
5291        return;
5292    gl->shaderBinary(count, shaders, binaryFormat, binary, length);
5293}
5294
5295void glwShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length)
5296{
5297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5298    if (!gl)
5299        return;
5300    gl->shaderSource(shader, count, string, length);
5301}
5302
5303void glwShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding)
5304{
5305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5306    if (!gl)
5307        return;
5308    gl->shaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding);
5309}
5310
5311void glwShadingRateEXT (GLenum rate)
5312{
5313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5314    if (!gl)
5315        return;
5316    gl->shadingRateEXT(rate);
5317}
5318
5319void glwShadingRateCombinerOpsEXT (GLenum combinerOp0, GLenum combinerOp1)
5320{
5321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5322    if (!gl)
5323        return;
5324    gl->shadingRateCombinerOpsEXT(combinerOp0, combinerOp1);
5325}
5326
5327void glwSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue)
5328{
5329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5330    if (!gl)
5331        return;
5332    gl->specializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue);
5333}
5334
5335void glwStencilFunc (GLenum func, GLint ref, GLuint mask)
5336{
5337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5338    if (!gl)
5339        return;
5340    gl->stencilFunc(func, ref, mask);
5341}
5342
5343void glwStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask)
5344{
5345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5346    if (!gl)
5347        return;
5348    gl->stencilFuncSeparate(face, func, ref, mask);
5349}
5350
5351void glwStencilMask (GLuint mask)
5352{
5353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5354    if (!gl)
5355        return;
5356    gl->stencilMask(mask);
5357}
5358
5359void glwStencilMaskSeparate (GLenum face, GLuint mask)
5360{
5361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5362    if (!gl)
5363        return;
5364    gl->stencilMaskSeparate(face, mask);
5365}
5366
5367void glwStencilOp (GLenum fail, GLenum zfail, GLenum zpass)
5368{
5369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5370    if (!gl)
5371        return;
5372    gl->stencilOp(fail, zfail, zpass);
5373}
5374
5375void glwStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
5376{
5377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5378    if (!gl)
5379        return;
5380    gl->stencilOpSeparate(face, sfail, dpfail, dppass);
5381}
5382
5383void glwTexBuffer (GLenum target, GLenum internalformat, GLuint buffer)
5384{
5385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5386    if (!gl)
5387        return;
5388    gl->texBuffer(target, internalformat, buffer);
5389}
5390
5391void glwTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)
5392{
5393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5394    if (!gl)
5395        return;
5396    gl->texBufferRange(target, internalformat, buffer, offset, size);
5397}
5398
5399void glwTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
5400{
5401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5402    if (!gl)
5403        return;
5404    gl->texImage1D(target, level, internalformat, width, border, format, type, pixels);
5405}
5406
5407void glwTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
5408{
5409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5410    if (!gl)
5411        return;
5412    gl->texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
5413}
5414
5415void glwTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
5416{
5417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5418    if (!gl)
5419        return;
5420    gl->texImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
5421}
5422
5423void glwTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)
5424{
5425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5426    if (!gl)
5427        return;
5428    gl->texImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
5429}
5430
5431void glwTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
5432{
5433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5434    if (!gl)
5435        return;
5436    gl->texImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
5437}
5438
5439void glwTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)
5440{
5441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5442    if (!gl)
5443        return;
5444    gl->texImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels);
5445}
5446
5447void glwTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit)
5448{
5449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5450    if (!gl)
5451        return;
5452    gl->texPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit);
5453}
5454
5455void glwTexParameterIiv (GLenum target, GLenum pname, const GLint *params)
5456{
5457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5458    if (!gl)
5459        return;
5460    gl->texParameterIiv(target, pname, params);
5461}
5462
5463void glwTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params)
5464{
5465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5466    if (!gl)
5467        return;
5468    gl->texParameterIuiv(target, pname, params);
5469}
5470
5471void glwTexParameterf (GLenum target, GLenum pname, GLfloat param)
5472{
5473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5474    if (!gl)
5475        return;
5476    gl->texParameterf(target, pname, param);
5477}
5478
5479void glwTexParameterfv (GLenum target, GLenum pname, const GLfloat *params)
5480{
5481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5482    if (!gl)
5483        return;
5484    gl->texParameterfv(target, pname, params);
5485}
5486
5487void glwTexParameteri (GLenum target, GLenum pname, GLint param)
5488{
5489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5490    if (!gl)
5491        return;
5492    gl->texParameteri(target, pname, param);
5493}
5494
5495void glwTexParameteriv (GLenum target, GLenum pname, const GLint *params)
5496{
5497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5498    if (!gl)
5499        return;
5500    gl->texParameteriv(target, pname, params);
5501}
5502
5503void glwTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width)
5504{
5505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5506    if (!gl)
5507        return;
5508    gl->texStorage1D(target, levels, internalformat, width);
5509}
5510
5511void glwTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
5512{
5513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5514    if (!gl)
5515        return;
5516    gl->texStorage2D(target, levels, internalformat, width, height);
5517}
5518
5519void glwTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
5520{
5521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5522    if (!gl)
5523        return;
5524    gl->texStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
5525}
5526
5527void glwTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
5528{
5529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5530    if (!gl)
5531        return;
5532    gl->texStorage3D(target, levels, internalformat, width, height, depth);
5533}
5534
5535void glwTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
5536{
5537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5538    if (!gl)
5539        return;
5540    gl->texStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
5541}
5542
5543void glwTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
5544{
5545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5546    if (!gl)
5547        return;
5548    gl->texSubImage1D(target, level, xoffset, width, format, type, pixels);
5549}
5550
5551void glwTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
5552{
5553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5554    if (!gl)
5555        return;
5556    gl->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
5557}
5558
5559void glwTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)
5560{
5561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5562    if (!gl)
5563        return;
5564    gl->texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
5565}
5566
5567void glwTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)
5568{
5569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5570    if (!gl)
5571        return;
5572    gl->texSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
5573}
5574
5575void glwTextureBarrier (void)
5576{
5577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5578    if (!gl)
5579        return;
5580    gl->textureBarrier();
5581}
5582
5583void glwTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer)
5584{
5585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5586    if (!gl)
5587        return;
5588    gl->textureBuffer(texture, internalformat, buffer);
5589}
5590
5591void glwTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer)
5592{
5593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5594    if (!gl)
5595        return;
5596    gl->textureBufferEXT(texture, target, internalformat, buffer);
5597}
5598
5599void glwTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)
5600{
5601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5602    if (!gl)
5603        return;
5604    gl->textureBufferRange(texture, internalformat, buffer, offset, size);
5605}
5606
5607void glwTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)
5608{
5609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5610    if (!gl)
5611        return;
5612    gl->textureBufferRangeEXT(texture, target, internalformat, buffer, offset, size);
5613}
5614
5615void glwTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
5616{
5617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5618    if (!gl)
5619        return;
5620    gl->textureImage1DEXT(texture, target, level, internalformat, width, border, format, type, pixels);
5621}
5622
5623void glwTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
5624{
5625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5626    if (!gl)
5627        return;
5628    gl->textureImage2DEXT(texture, target, level, internalformat, width, height, border, format, type, pixels);
5629}
5630
5631void glwTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)
5632{
5633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5634    if (!gl)
5635        return;
5636    gl->textureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, format, type, pixels);
5637}
5638
5639void glwTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit)
5640{
5641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5642    if (!gl)
5643        return;
5644    gl->texturePageCommitmentEXT(texture, level, xoffset, yoffset, zoffset, width, height, depth, commit);
5645}
5646
5647void glwTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params)
5648{
5649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5650    if (!gl)
5651        return;
5652    gl->textureParameterIiv(texture, pname, params);
5653}
5654
5655void glwTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params)
5656{
5657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5658    if (!gl)
5659        return;
5660    gl->textureParameterIivEXT(texture, target, pname, params);
5661}
5662
5663void glwTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params)
5664{
5665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5666    if (!gl)
5667        return;
5668    gl->textureParameterIuiv(texture, pname, params);
5669}
5670
5671void glwTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params)
5672{
5673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5674    if (!gl)
5675        return;
5676    gl->textureParameterIuivEXT(texture, target, pname, params);
5677}
5678
5679void glwTextureParameterf (GLuint texture, GLenum pname, GLfloat param)
5680{
5681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5682    if (!gl)
5683        return;
5684    gl->textureParameterf(texture, pname, param);
5685}
5686
5687void glwTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param)
5688{
5689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5690    if (!gl)
5691        return;
5692    gl->textureParameterfEXT(texture, target, pname, param);
5693}
5694
5695void glwTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param)
5696{
5697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5698    if (!gl)
5699        return;
5700    gl->textureParameterfv(texture, pname, param);
5701}
5702
5703void glwTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params)
5704{
5705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5706    if (!gl)
5707        return;
5708    gl->textureParameterfvEXT(texture, target, pname, params);
5709}
5710
5711void glwTextureParameteri (GLuint texture, GLenum pname, GLint param)
5712{
5713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5714    if (!gl)
5715        return;
5716    gl->textureParameteri(texture, pname, param);
5717}
5718
5719void glwTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param)
5720{
5721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5722    if (!gl)
5723        return;
5724    gl->textureParameteriEXT(texture, target, pname, param);
5725}
5726
5727void glwTextureParameteriv (GLuint texture, GLenum pname, const GLint *param)
5728{
5729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5730    if (!gl)
5731        return;
5732    gl->textureParameteriv(texture, pname, param);
5733}
5734
5735void glwTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params)
5736{
5737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5738    if (!gl)
5739        return;
5740    gl->textureParameterivEXT(texture, target, pname, params);
5741}
5742
5743void glwTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer)
5744{
5745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5746    if (!gl)
5747        return;
5748    gl->textureRenderbufferEXT(texture, target, renderbuffer);
5749}
5750
5751void glwTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width)
5752{
5753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5754    if (!gl)
5755        return;
5756    gl->textureStorage1D(texture, levels, internalformat, width);
5757}
5758
5759void glwTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width)
5760{
5761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5762    if (!gl)
5763        return;
5764    gl->textureStorage1DEXT(texture, target, levels, internalformat, width);
5765}
5766
5767void glwTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
5768{
5769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5770    if (!gl)
5771        return;
5772    gl->textureStorage2D(texture, levels, internalformat, width, height);
5773}
5774
5775void glwTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
5776{
5777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5778    if (!gl)
5779        return;
5780    gl->textureStorage2DEXT(texture, target, levels, internalformat, width, height);
5781}
5782
5783void glwTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
5784{
5785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5786    if (!gl)
5787        return;
5788    gl->textureStorage2DMultisample(texture, samples, internalformat, width, height, fixedsamplelocations);
5789}
5790
5791void glwTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
5792{
5793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5794    if (!gl)
5795        return;
5796    gl->textureStorage2DMultisampleEXT(texture, target, samples, internalformat, width, height, fixedsamplelocations);
5797}
5798
5799void glwTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
5800{
5801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5802    if (!gl)
5803        return;
5804    gl->textureStorage3D(texture, levels, internalformat, width, height, depth);
5805}
5806
5807void glwTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
5808{
5809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5810    if (!gl)
5811        return;
5812    gl->textureStorage3DEXT(texture, target, levels, internalformat, width, height, depth);
5813}
5814
5815void glwTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
5816{
5817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5818    if (!gl)
5819        return;
5820    gl->textureStorage3DMultisample(texture, samples, internalformat, width, height, depth, fixedsamplelocations);
5821}
5822
5823void glwTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
5824{
5825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5826    if (!gl)
5827        return;
5828    gl->textureStorage3DMultisampleEXT(texture, target, samples, internalformat, width, height, depth, fixedsamplelocations);
5829}
5830
5831void glwTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
5832{
5833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5834    if (!gl)
5835        return;
5836    gl->textureSubImage1D(texture, level, xoffset, width, format, type, pixels);
5837}
5838
5839void glwTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
5840{
5841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5842    if (!gl)
5843        return;
5844    gl->textureSubImage1DEXT(texture, target, level, xoffset, width, format, type, pixels);
5845}
5846
5847void glwTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
5848{
5849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5850    if (!gl)
5851        return;
5852    gl->textureSubImage2D(texture, level, xoffset, yoffset, width, height, format, type, pixels);
5853}
5854
5855void glwTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
5856{
5857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5858    if (!gl)
5859        return;
5860    gl->textureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, type, pixels);
5861}
5862
5863void glwTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)
5864{
5865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5866    if (!gl)
5867        return;
5868    gl->textureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
5869}
5870
5871void glwTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)
5872{
5873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5874    if (!gl)
5875        return;
5876    gl->textureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
5877}
5878
5879void glwTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers)
5880{
5881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5882    if (!gl)
5883        return;
5884    gl->textureView(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);
5885}
5886
5887void glwTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer)
5888{
5889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5890    if (!gl)
5891        return;
5892    gl->transformFeedbackBufferBase(xfb, index, buffer);
5893}
5894
5895void glwTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
5896{
5897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5898    if (!gl)
5899        return;
5900    gl->transformFeedbackBufferRange(xfb, index, buffer, offset, size);
5901}
5902
5903void glwTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)
5904{
5905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5906    if (!gl)
5907        return;
5908    gl->transformFeedbackVaryings(program, count, varyings, bufferMode);
5909}
5910
5911void glwUniform1d (GLint location, GLdouble x)
5912{
5913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5914    if (!gl)
5915        return;
5916    gl->uniform1d(location, x);
5917}
5918
5919void glwUniform1dv (GLint location, GLsizei count, const GLdouble *value)
5920{
5921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5922    if (!gl)
5923        return;
5924    gl->uniform1dv(location, count, value);
5925}
5926
5927void glwUniform1f (GLint location, GLfloat v0)
5928{
5929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5930    if (!gl)
5931        return;
5932    gl->uniform1f(location, v0);
5933}
5934
5935void glwUniform1fv (GLint location, GLsizei count, const GLfloat *value)
5936{
5937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5938    if (!gl)
5939        return;
5940    gl->uniform1fv(location, count, value);
5941}
5942
5943void glwUniform1i (GLint location, GLint v0)
5944{
5945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5946    if (!gl)
5947        return;
5948    gl->uniform1i(location, v0);
5949}
5950
5951void glwUniform1iv (GLint location, GLsizei count, const GLint *value)
5952{
5953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5954    if (!gl)
5955        return;
5956    gl->uniform1iv(location, count, value);
5957}
5958
5959void glwUniform1ui (GLint location, GLuint v0)
5960{
5961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5962    if (!gl)
5963        return;
5964    gl->uniform1ui(location, v0);
5965}
5966
5967void glwUniform1uiv (GLint location, GLsizei count, const GLuint *value)
5968{
5969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5970    if (!gl)
5971        return;
5972    gl->uniform1uiv(location, count, value);
5973}
5974
5975void glwUniform2d (GLint location, GLdouble x, GLdouble y)
5976{
5977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5978    if (!gl)
5979        return;
5980    gl->uniform2d(location, x, y);
5981}
5982
5983void glwUniform2dv (GLint location, GLsizei count, const GLdouble *value)
5984{
5985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5986    if (!gl)
5987        return;
5988    gl->uniform2dv(location, count, value);
5989}
5990
5991void glwUniform2f (GLint location, GLfloat v0, GLfloat v1)
5992{
5993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
5994    if (!gl)
5995        return;
5996    gl->uniform2f(location, v0, v1);
5997}
5998
5999void glwUniform2fv (GLint location, GLsizei count, const GLfloat *value)
6000{
6001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6002    if (!gl)
6003        return;
6004    gl->uniform2fv(location, count, value);
6005}
6006
6007void glwUniform2i (GLint location, GLint v0, GLint v1)
6008{
6009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6010    if (!gl)
6011        return;
6012    gl->uniform2i(location, v0, v1);
6013}
6014
6015void glwUniform2iv (GLint location, GLsizei count, const GLint *value)
6016{
6017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6018    if (!gl)
6019        return;
6020    gl->uniform2iv(location, count, value);
6021}
6022
6023void glwUniform2ui (GLint location, GLuint v0, GLuint v1)
6024{
6025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6026    if (!gl)
6027        return;
6028    gl->uniform2ui(location, v0, v1);
6029}
6030
6031void glwUniform2uiv (GLint location, GLsizei count, const GLuint *value)
6032{
6033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6034    if (!gl)
6035        return;
6036    gl->uniform2uiv(location, count, value);
6037}
6038
6039void glwUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z)
6040{
6041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6042    if (!gl)
6043        return;
6044    gl->uniform3d(location, x, y, z);
6045}
6046
6047void glwUniform3dv (GLint location, GLsizei count, const GLdouble *value)
6048{
6049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6050    if (!gl)
6051        return;
6052    gl->uniform3dv(location, count, value);
6053}
6054
6055void glwUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
6056{
6057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6058    if (!gl)
6059        return;
6060    gl->uniform3f(location, v0, v1, v2);
6061}
6062
6063void glwUniform3fv (GLint location, GLsizei count, const GLfloat *value)
6064{
6065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6066    if (!gl)
6067        return;
6068    gl->uniform3fv(location, count, value);
6069}
6070
6071void glwUniform3i (GLint location, GLint v0, GLint v1, GLint v2)
6072{
6073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6074    if (!gl)
6075        return;
6076    gl->uniform3i(location, v0, v1, v2);
6077}
6078
6079void glwUniform3iv (GLint location, GLsizei count, const GLint *value)
6080{
6081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6082    if (!gl)
6083        return;
6084    gl->uniform3iv(location, count, value);
6085}
6086
6087void glwUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2)
6088{
6089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6090    if (!gl)
6091        return;
6092    gl->uniform3ui(location, v0, v1, v2);
6093}
6094
6095void glwUniform3uiv (GLint location, GLsizei count, const GLuint *value)
6096{
6097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6098    if (!gl)
6099        return;
6100    gl->uniform3uiv(location, count, value);
6101}
6102
6103void glwUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
6104{
6105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6106    if (!gl)
6107        return;
6108    gl->uniform4d(location, x, y, z, w);
6109}
6110
6111void glwUniform4dv (GLint location, GLsizei count, const GLdouble *value)
6112{
6113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6114    if (!gl)
6115        return;
6116    gl->uniform4dv(location, count, value);
6117}
6118
6119void glwUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
6120{
6121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6122    if (!gl)
6123        return;
6124    gl->uniform4f(location, v0, v1, v2, v3);
6125}
6126
6127void glwUniform4fv (GLint location, GLsizei count, const GLfloat *value)
6128{
6129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6130    if (!gl)
6131        return;
6132    gl->uniform4fv(location, count, value);
6133}
6134
6135void glwUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
6136{
6137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6138    if (!gl)
6139        return;
6140    gl->uniform4i(location, v0, v1, v2, v3);
6141}
6142
6143void glwUniform4iv (GLint location, GLsizei count, const GLint *value)
6144{
6145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6146    if (!gl)
6147        return;
6148    gl->uniform4iv(location, count, value);
6149}
6150
6151void glwUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
6152{
6153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6154    if (!gl)
6155        return;
6156    gl->uniform4ui(location, v0, v1, v2, v3);
6157}
6158
6159void glwUniform4uiv (GLint location, GLsizei count, const GLuint *value)
6160{
6161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6162    if (!gl)
6163        return;
6164    gl->uniform4uiv(location, count, value);
6165}
6166
6167void glwUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
6168{
6169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6170    if (!gl)
6171        return;
6172    gl->uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
6173}
6174
6175void glwUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6176{
6177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6178    if (!gl)
6179        return;
6180    gl->uniformMatrix2dv(location, count, transpose, value);
6181}
6182
6183void glwUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6184{
6185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6186    if (!gl)
6187        return;
6188    gl->uniformMatrix2fv(location, count, transpose, value);
6189}
6190
6191void glwUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6192{
6193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6194    if (!gl)
6195        return;
6196    gl->uniformMatrix2x3dv(location, count, transpose, value);
6197}
6198
6199void glwUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6200{
6201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6202    if (!gl)
6203        return;
6204    gl->uniformMatrix2x3fv(location, count, transpose, value);
6205}
6206
6207void glwUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6208{
6209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6210    if (!gl)
6211        return;
6212    gl->uniformMatrix2x4dv(location, count, transpose, value);
6213}
6214
6215void glwUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6216{
6217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6218    if (!gl)
6219        return;
6220    gl->uniformMatrix2x4fv(location, count, transpose, value);
6221}
6222
6223void glwUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6224{
6225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6226    if (!gl)
6227        return;
6228    gl->uniformMatrix3dv(location, count, transpose, value);
6229}
6230
6231void glwUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6232{
6233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6234    if (!gl)
6235        return;
6236    gl->uniformMatrix3fv(location, count, transpose, value);
6237}
6238
6239void glwUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6240{
6241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6242    if (!gl)
6243        return;
6244    gl->uniformMatrix3x2dv(location, count, transpose, value);
6245}
6246
6247void glwUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6248{
6249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6250    if (!gl)
6251        return;
6252    gl->uniformMatrix3x2fv(location, count, transpose, value);
6253}
6254
6255void glwUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6256{
6257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6258    if (!gl)
6259        return;
6260    gl->uniformMatrix3x4dv(location, count, transpose, value);
6261}
6262
6263void glwUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6264{
6265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6266    if (!gl)
6267        return;
6268    gl->uniformMatrix3x4fv(location, count, transpose, value);
6269}
6270
6271void glwUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6272{
6273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6274    if (!gl)
6275        return;
6276    gl->uniformMatrix4dv(location, count, transpose, value);
6277}
6278
6279void glwUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6280{
6281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6282    if (!gl)
6283        return;
6284    gl->uniformMatrix4fv(location, count, transpose, value);
6285}
6286
6287void glwUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6288{
6289    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6290    if (!gl)
6291        return;
6292    gl->uniformMatrix4x2dv(location, count, transpose, value);
6293}
6294
6295void glwUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6296{
6297    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6298    if (!gl)
6299        return;
6300    gl->uniformMatrix4x2fv(location, count, transpose, value);
6301}
6302
6303void glwUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value)
6304{
6305    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6306    if (!gl)
6307        return;
6308    gl->uniformMatrix4x3dv(location, count, transpose, value);
6309}
6310
6311void glwUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
6312{
6313    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6314    if (!gl)
6315        return;
6316    gl->uniformMatrix4x3fv(location, count, transpose, value);
6317}
6318
6319void glwUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices)
6320{
6321    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6322    if (!gl)
6323        return;
6324    gl->uniformSubroutinesuiv(shadertype, count, indices);
6325}
6326
6327GLboolean glwUnmapBuffer (GLenum target)
6328{
6329    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6330    if (!gl)
6331        return (GLboolean)0;
6332    return gl->unmapBuffer(target);
6333}
6334
6335GLboolean glwUnmapNamedBuffer (GLuint buffer)
6336{
6337    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6338    if (!gl)
6339        return (GLboolean)0;
6340    return gl->unmapNamedBuffer(buffer);
6341}
6342
6343GLboolean glwUnmapNamedBufferEXT (GLuint buffer)
6344{
6345    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6346    if (!gl)
6347        return (GLboolean)0;
6348    return gl->unmapNamedBufferEXT(buffer);
6349}
6350
6351void glwUseProgram (GLuint program)
6352{
6353    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6354    if (!gl)
6355        return;
6356    gl->useProgram(program);
6357}
6358
6359void glwUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program)
6360{
6361    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6362    if (!gl)
6363        return;
6364    gl->useProgramStages(pipeline, stages, program);
6365}
6366
6367void glwValidateProgram (GLuint program)
6368{
6369    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6370    if (!gl)
6371        return;
6372    gl->validateProgram(program);
6373}
6374
6375void glwValidateProgramPipeline (GLuint pipeline)
6376{
6377    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6378    if (!gl)
6379        return;
6380    gl->validateProgramPipeline(pipeline);
6381}
6382
6383void glwVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex)
6384{
6385    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6386    if (!gl)
6387        return;
6388    gl->vertexArrayAttribBinding(vaobj, attribindex, bindingindex);
6389}
6390
6391void glwVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
6392{
6393    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6394    if (!gl)
6395        return;
6396    gl->vertexArrayAttribFormat(vaobj, attribindex, size, type, normalized, relativeoffset);
6397}
6398
6399void glwVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
6400{
6401    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6402    if (!gl)
6403        return;
6404    gl->vertexArrayAttribIFormat(vaobj, attribindex, size, type, relativeoffset);
6405}
6406
6407void glwVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
6408{
6409    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6410    if (!gl)
6411        return;
6412    gl->vertexArrayAttribLFormat(vaobj, attribindex, size, type, relativeoffset);
6413}
6414
6415void glwVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
6416{
6417    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6418    if (!gl)
6419        return;
6420    gl->vertexArrayBindVertexBufferEXT(vaobj, bindingindex, buffer, offset, stride);
6421}
6422
6423void glwVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor)
6424{
6425    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6426    if (!gl)
6427        return;
6428    gl->vertexArrayBindingDivisor(vaobj, bindingindex, divisor);
6429}
6430
6431void glwVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6432{
6433    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6434    if (!gl)
6435        return;
6436    gl->vertexArrayColorOffsetEXT(vaobj, buffer, size, type, stride, offset);
6437}
6438
6439void glwVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset)
6440{
6441    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6442    if (!gl)
6443        return;
6444    gl->vertexArrayEdgeFlagOffsetEXT(vaobj, buffer, stride, offset);
6445}
6446
6447void glwVertexArrayElementBuffer (GLuint vaobj, GLuint buffer)
6448{
6449    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6450    if (!gl)
6451        return;
6452    gl->vertexArrayElementBuffer(vaobj, buffer);
6453}
6454
6455void glwVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset)
6456{
6457    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6458    if (!gl)
6459        return;
6460    gl->vertexArrayFogCoordOffsetEXT(vaobj, buffer, type, stride, offset);
6461}
6462
6463void glwVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset)
6464{
6465    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6466    if (!gl)
6467        return;
6468    gl->vertexArrayIndexOffsetEXT(vaobj, buffer, type, stride, offset);
6469}
6470
6471void glwVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6472{
6473    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6474    if (!gl)
6475        return;
6476    gl->vertexArrayMultiTexCoordOffsetEXT(vaobj, buffer, texunit, size, type, stride, offset);
6477}
6478
6479void glwVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset)
6480{
6481    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6482    if (!gl)
6483        return;
6484    gl->vertexArrayNormalOffsetEXT(vaobj, buffer, type, stride, offset);
6485}
6486
6487void glwVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6488{
6489    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6490    if (!gl)
6491        return;
6492    gl->vertexArraySecondaryColorOffsetEXT(vaobj, buffer, size, type, stride, offset);
6493}
6494
6495void glwVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6496{
6497    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6498    if (!gl)
6499        return;
6500    gl->vertexArrayTexCoordOffsetEXT(vaobj, buffer, size, type, stride, offset);
6501}
6502
6503void glwVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex)
6504{
6505    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6506    if (!gl)
6507        return;
6508    gl->vertexArrayVertexAttribBindingEXT(vaobj, attribindex, bindingindex);
6509}
6510
6511void glwVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor)
6512{
6513    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6514    if (!gl)
6515        return;
6516    gl->vertexArrayVertexAttribDivisorEXT(vaobj, index, divisor);
6517}
6518
6519void glwVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
6520{
6521    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6522    if (!gl)
6523        return;
6524    gl->vertexArrayVertexAttribFormatEXT(vaobj, attribindex, size, type, normalized, relativeoffset);
6525}
6526
6527void glwVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
6528{
6529    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6530    if (!gl)
6531        return;
6532    gl->vertexArrayVertexAttribIFormatEXT(vaobj, attribindex, size, type, relativeoffset);
6533}
6534
6535void glwVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6536{
6537    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6538    if (!gl)
6539        return;
6540    gl->vertexArrayVertexAttribIOffsetEXT(vaobj, buffer, index, size, type, stride, offset);
6541}
6542
6543void glwVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
6544{
6545    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6546    if (!gl)
6547        return;
6548    gl->vertexArrayVertexAttribLFormatEXT(vaobj, attribindex, size, type, relativeoffset);
6549}
6550
6551void glwVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6552{
6553    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6554    if (!gl)
6555        return;
6556    gl->vertexArrayVertexAttribLOffsetEXT(vaobj, buffer, index, size, type, stride, offset);
6557}
6558
6559void glwVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset)
6560{
6561    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6562    if (!gl)
6563        return;
6564    gl->vertexArrayVertexAttribOffsetEXT(vaobj, buffer, index, size, type, normalized, stride, offset);
6565}
6566
6567void glwVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor)
6568{
6569    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6570    if (!gl)
6571        return;
6572    gl->vertexArrayVertexBindingDivisorEXT(vaobj, bindingindex, divisor);
6573}
6574
6575void glwVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
6576{
6577    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6578    if (!gl)
6579        return;
6580    gl->vertexArrayVertexBuffer(vaobj, bindingindex, buffer, offset, stride);
6581}
6582
6583void glwVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides)
6584{
6585    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6586    if (!gl)
6587        return;
6588    gl->vertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides);
6589}
6590
6591void glwVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset)
6592{
6593    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6594    if (!gl)
6595        return;
6596    gl->vertexArrayVertexOffsetEXT(vaobj, buffer, size, type, stride, offset);
6597}
6598
6599void glwVertexAttrib1d (GLuint index, GLdouble x)
6600{
6601    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6602    if (!gl)
6603        return;
6604    gl->vertexAttrib1d(index, x);
6605}
6606
6607void glwVertexAttrib1dv (GLuint index, const GLdouble *v)
6608{
6609    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6610    if (!gl)
6611        return;
6612    gl->vertexAttrib1dv(index, v);
6613}
6614
6615void glwVertexAttrib1f (GLuint index, GLfloat x)
6616{
6617    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6618    if (!gl)
6619        return;
6620    gl->vertexAttrib1f(index, x);
6621}
6622
6623void glwVertexAttrib1fv (GLuint index, const GLfloat *v)
6624{
6625    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6626    if (!gl)
6627        return;
6628    gl->vertexAttrib1fv(index, v);
6629}
6630
6631void glwVertexAttrib1s (GLuint index, GLshort x)
6632{
6633    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6634    if (!gl)
6635        return;
6636    gl->vertexAttrib1s(index, x);
6637}
6638
6639void glwVertexAttrib1sv (GLuint index, const GLshort *v)
6640{
6641    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6642    if (!gl)
6643        return;
6644    gl->vertexAttrib1sv(index, v);
6645}
6646
6647void glwVertexAttrib2d (GLuint index, GLdouble x, GLdouble y)
6648{
6649    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6650    if (!gl)
6651        return;
6652    gl->vertexAttrib2d(index, x, y);
6653}
6654
6655void glwVertexAttrib2dv (GLuint index, const GLdouble *v)
6656{
6657    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6658    if (!gl)
6659        return;
6660    gl->vertexAttrib2dv(index, v);
6661}
6662
6663void glwVertexAttrib2f (GLuint index, GLfloat x, GLfloat y)
6664{
6665    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6666    if (!gl)
6667        return;
6668    gl->vertexAttrib2f(index, x, y);
6669}
6670
6671void glwVertexAttrib2fv (GLuint index, const GLfloat *v)
6672{
6673    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6674    if (!gl)
6675        return;
6676    gl->vertexAttrib2fv(index, v);
6677}
6678
6679void glwVertexAttrib2s (GLuint index, GLshort x, GLshort y)
6680{
6681    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6682    if (!gl)
6683        return;
6684    gl->vertexAttrib2s(index, x, y);
6685}
6686
6687void glwVertexAttrib2sv (GLuint index, const GLshort *v)
6688{
6689    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6690    if (!gl)
6691        return;
6692    gl->vertexAttrib2sv(index, v);
6693}
6694
6695void glwVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z)
6696{
6697    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6698    if (!gl)
6699        return;
6700    gl->vertexAttrib3d(index, x, y, z);
6701}
6702
6703void glwVertexAttrib3dv (GLuint index, const GLdouble *v)
6704{
6705    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6706    if (!gl)
6707        return;
6708    gl->vertexAttrib3dv(index, v);
6709}
6710
6711void glwVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z)
6712{
6713    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6714    if (!gl)
6715        return;
6716    gl->vertexAttrib3f(index, x, y, z);
6717}
6718
6719void glwVertexAttrib3fv (GLuint index, const GLfloat *v)
6720{
6721    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6722    if (!gl)
6723        return;
6724    gl->vertexAttrib3fv(index, v);
6725}
6726
6727void glwVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z)
6728{
6729    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6730    if (!gl)
6731        return;
6732    gl->vertexAttrib3s(index, x, y, z);
6733}
6734
6735void glwVertexAttrib3sv (GLuint index, const GLshort *v)
6736{
6737    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6738    if (!gl)
6739        return;
6740    gl->vertexAttrib3sv(index, v);
6741}
6742
6743void glwVertexAttrib4Nbv (GLuint index, const GLbyte *v)
6744{
6745    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6746    if (!gl)
6747        return;
6748    gl->vertexAttrib4Nbv(index, v);
6749}
6750
6751void glwVertexAttrib4Niv (GLuint index, const GLint *v)
6752{
6753    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6754    if (!gl)
6755        return;
6756    gl->vertexAttrib4Niv(index, v);
6757}
6758
6759void glwVertexAttrib4Nsv (GLuint index, const GLshort *v)
6760{
6761    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6762    if (!gl)
6763        return;
6764    gl->vertexAttrib4Nsv(index, v);
6765}
6766
6767void glwVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
6768{
6769    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6770    if (!gl)
6771        return;
6772    gl->vertexAttrib4Nub(index, x, y, z, w);
6773}
6774
6775void glwVertexAttrib4Nubv (GLuint index, const GLubyte *v)
6776{
6777    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6778    if (!gl)
6779        return;
6780    gl->vertexAttrib4Nubv(index, v);
6781}
6782
6783void glwVertexAttrib4Nuiv (GLuint index, const GLuint *v)
6784{
6785    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6786    if (!gl)
6787        return;
6788    gl->vertexAttrib4Nuiv(index, v);
6789}
6790
6791void glwVertexAttrib4Nusv (GLuint index, const GLushort *v)
6792{
6793    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6794    if (!gl)
6795        return;
6796    gl->vertexAttrib4Nusv(index, v);
6797}
6798
6799void glwVertexAttrib4bv (GLuint index, const GLbyte *v)
6800{
6801    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6802    if (!gl)
6803        return;
6804    gl->vertexAttrib4bv(index, v);
6805}
6806
6807void glwVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
6808{
6809    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6810    if (!gl)
6811        return;
6812    gl->vertexAttrib4d(index, x, y, z, w);
6813}
6814
6815void glwVertexAttrib4dv (GLuint index, const GLdouble *v)
6816{
6817    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6818    if (!gl)
6819        return;
6820    gl->vertexAttrib4dv(index, v);
6821}
6822
6823void glwVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
6824{
6825    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6826    if (!gl)
6827        return;
6828    gl->vertexAttrib4f(index, x, y, z, w);
6829}
6830
6831void glwVertexAttrib4fv (GLuint index, const GLfloat *v)
6832{
6833    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6834    if (!gl)
6835        return;
6836    gl->vertexAttrib4fv(index, v);
6837}
6838
6839void glwVertexAttrib4iv (GLuint index, const GLint *v)
6840{
6841    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6842    if (!gl)
6843        return;
6844    gl->vertexAttrib4iv(index, v);
6845}
6846
6847void glwVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
6848{
6849    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6850    if (!gl)
6851        return;
6852    gl->vertexAttrib4s(index, x, y, z, w);
6853}
6854
6855void glwVertexAttrib4sv (GLuint index, const GLshort *v)
6856{
6857    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6858    if (!gl)
6859        return;
6860    gl->vertexAttrib4sv(index, v);
6861}
6862
6863void glwVertexAttrib4ubv (GLuint index, const GLubyte *v)
6864{
6865    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6866    if (!gl)
6867        return;
6868    gl->vertexAttrib4ubv(index, v);
6869}
6870
6871void glwVertexAttrib4uiv (GLuint index, const GLuint *v)
6872{
6873    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6874    if (!gl)
6875        return;
6876    gl->vertexAttrib4uiv(index, v);
6877}
6878
6879void glwVertexAttrib4usv (GLuint index, const GLushort *v)
6880{
6881    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6882    if (!gl)
6883        return;
6884    gl->vertexAttrib4usv(index, v);
6885}
6886
6887void glwVertexAttribBinding (GLuint attribindex, GLuint bindingindex)
6888{
6889    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6890    if (!gl)
6891        return;
6892    gl->vertexAttribBinding(attribindex, bindingindex);
6893}
6894
6895void glwVertexAttribDivisor (GLuint index, GLuint divisor)
6896{
6897    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6898    if (!gl)
6899        return;
6900    gl->vertexAttribDivisor(index, divisor);
6901}
6902
6903void glwVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
6904{
6905    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6906    if (!gl)
6907        return;
6908    gl->vertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
6909}
6910
6911void glwVertexAttribI1i (GLuint index, GLint x)
6912{
6913    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6914    if (!gl)
6915        return;
6916    gl->vertexAttribI1i(index, x);
6917}
6918
6919void glwVertexAttribI1iv (GLuint index, const GLint *v)
6920{
6921    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6922    if (!gl)
6923        return;
6924    gl->vertexAttribI1iv(index, v);
6925}
6926
6927void glwVertexAttribI1ui (GLuint index, GLuint x)
6928{
6929    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6930    if (!gl)
6931        return;
6932    gl->vertexAttribI1ui(index, x);
6933}
6934
6935void glwVertexAttribI1uiv (GLuint index, const GLuint *v)
6936{
6937    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6938    if (!gl)
6939        return;
6940    gl->vertexAttribI1uiv(index, v);
6941}
6942
6943void glwVertexAttribI2i (GLuint index, GLint x, GLint y)
6944{
6945    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6946    if (!gl)
6947        return;
6948    gl->vertexAttribI2i(index, x, y);
6949}
6950
6951void glwVertexAttribI2iv (GLuint index, const GLint *v)
6952{
6953    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6954    if (!gl)
6955        return;
6956    gl->vertexAttribI2iv(index, v);
6957}
6958
6959void glwVertexAttribI2ui (GLuint index, GLuint x, GLuint y)
6960{
6961    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6962    if (!gl)
6963        return;
6964    gl->vertexAttribI2ui(index, x, y);
6965}
6966
6967void glwVertexAttribI2uiv (GLuint index, const GLuint *v)
6968{
6969    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6970    if (!gl)
6971        return;
6972    gl->vertexAttribI2uiv(index, v);
6973}
6974
6975void glwVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z)
6976{
6977    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6978    if (!gl)
6979        return;
6980    gl->vertexAttribI3i(index, x, y, z);
6981}
6982
6983void glwVertexAttribI3iv (GLuint index, const GLint *v)
6984{
6985    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6986    if (!gl)
6987        return;
6988    gl->vertexAttribI3iv(index, v);
6989}
6990
6991void glwVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z)
6992{
6993    const glw::Functions* gl = glw::getCurrentThreadFunctions();
6994    if (!gl)
6995        return;
6996    gl->vertexAttribI3ui(index, x, y, z);
6997}
6998
6999void glwVertexAttribI3uiv (GLuint index, const GLuint *v)
7000{
7001    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7002    if (!gl)
7003        return;
7004    gl->vertexAttribI3uiv(index, v);
7005}
7006
7007void glwVertexAttribI4bv (GLuint index, const GLbyte *v)
7008{
7009    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7010    if (!gl)
7011        return;
7012    gl->vertexAttribI4bv(index, v);
7013}
7014
7015void glwVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w)
7016{
7017    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7018    if (!gl)
7019        return;
7020    gl->vertexAttribI4i(index, x, y, z, w);
7021}
7022
7023void glwVertexAttribI4iv (GLuint index, const GLint *v)
7024{
7025    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7026    if (!gl)
7027        return;
7028    gl->vertexAttribI4iv(index, v);
7029}
7030
7031void glwVertexAttribI4sv (GLuint index, const GLshort *v)
7032{
7033    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7034    if (!gl)
7035        return;
7036    gl->vertexAttribI4sv(index, v);
7037}
7038
7039void glwVertexAttribI4ubv (GLuint index, const GLubyte *v)
7040{
7041    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7042    if (!gl)
7043        return;
7044    gl->vertexAttribI4ubv(index, v);
7045}
7046
7047void glwVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
7048{
7049    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7050    if (!gl)
7051        return;
7052    gl->vertexAttribI4ui(index, x, y, z, w);
7053}
7054
7055void glwVertexAttribI4uiv (GLuint index, const GLuint *v)
7056{
7057    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7058    if (!gl)
7059        return;
7060    gl->vertexAttribI4uiv(index, v);
7061}
7062
7063void glwVertexAttribI4usv (GLuint index, const GLushort *v)
7064{
7065    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7066    if (!gl)
7067        return;
7068    gl->vertexAttribI4usv(index, v);
7069}
7070
7071void glwVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
7072{
7073    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7074    if (!gl)
7075        return;
7076    gl->vertexAttribIFormat(attribindex, size, type, relativeoffset);
7077}
7078
7079void glwVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
7080{
7081    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7082    if (!gl)
7083        return;
7084    gl->vertexAttribIPointer(index, size, type, stride, pointer);
7085}
7086
7087void glwVertexAttribL1d (GLuint index, GLdouble x)
7088{
7089    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7090    if (!gl)
7091        return;
7092    gl->vertexAttribL1d(index, x);
7093}
7094
7095void glwVertexAttribL1dv (GLuint index, const GLdouble *v)
7096{
7097    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7098    if (!gl)
7099        return;
7100    gl->vertexAttribL1dv(index, v);
7101}
7102
7103void glwVertexAttribL2d (GLuint index, GLdouble x, GLdouble y)
7104{
7105    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7106    if (!gl)
7107        return;
7108    gl->vertexAttribL2d(index, x, y);
7109}
7110
7111void glwVertexAttribL2dv (GLuint index, const GLdouble *v)
7112{
7113    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7114    if (!gl)
7115        return;
7116    gl->vertexAttribL2dv(index, v);
7117}
7118
7119void glwVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z)
7120{
7121    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7122    if (!gl)
7123        return;
7124    gl->vertexAttribL3d(index, x, y, z);
7125}
7126
7127void glwVertexAttribL3dv (GLuint index, const GLdouble *v)
7128{
7129    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7130    if (!gl)
7131        return;
7132    gl->vertexAttribL3dv(index, v);
7133}
7134
7135void glwVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
7136{
7137    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7138    if (!gl)
7139        return;
7140    gl->vertexAttribL4d(index, x, y, z, w);
7141}
7142
7143void glwVertexAttribL4dv (GLuint index, const GLdouble *v)
7144{
7145    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7146    if (!gl)
7147        return;
7148    gl->vertexAttribL4dv(index, v);
7149}
7150
7151void glwVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
7152{
7153    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7154    if (!gl)
7155        return;
7156    gl->vertexAttribLFormat(attribindex, size, type, relativeoffset);
7157}
7158
7159void glwVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
7160{
7161    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7162    if (!gl)
7163        return;
7164    gl->vertexAttribLPointer(index, size, type, stride, pointer);
7165}
7166
7167void glwVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
7168{
7169    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7170    if (!gl)
7171        return;
7172    gl->vertexAttribP1ui(index, type, normalized, value);
7173}
7174
7175void glwVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value)
7176{
7177    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7178    if (!gl)
7179        return;
7180    gl->vertexAttribP1uiv(index, type, normalized, value);
7181}
7182
7183void glwVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
7184{
7185    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7186    if (!gl)
7187        return;
7188    gl->vertexAttribP2ui(index, type, normalized, value);
7189}
7190
7191void glwVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value)
7192{
7193    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7194    if (!gl)
7195        return;
7196    gl->vertexAttribP2uiv(index, type, normalized, value);
7197}
7198
7199void glwVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
7200{
7201    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7202    if (!gl)
7203        return;
7204    gl->vertexAttribP3ui(index, type, normalized, value);
7205}
7206
7207void glwVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value)
7208{
7209    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7210    if (!gl)
7211        return;
7212    gl->vertexAttribP3uiv(index, type, normalized, value);
7213}
7214
7215void glwVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
7216{
7217    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7218    if (!gl)
7219        return;
7220    gl->vertexAttribP4ui(index, type, normalized, value);
7221}
7222
7223void glwVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value)
7224{
7225    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7226    if (!gl)
7227        return;
7228    gl->vertexAttribP4uiv(index, type, normalized, value);
7229}
7230
7231void glwVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer)
7232{
7233    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7234    if (!gl)
7235        return;
7236    gl->vertexAttribPointer(index, size, type, normalized, stride, pointer);
7237}
7238
7239void glwVertexBindingDivisor (GLuint bindingindex, GLuint divisor)
7240{
7241    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7242    if (!gl)
7243        return;
7244    gl->vertexBindingDivisor(bindingindex, divisor);
7245}
7246
7247void glwViewport (GLint x, GLint y, GLsizei width, GLsizei height)
7248{
7249    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7250    if (!gl)
7251        return;
7252    gl->viewport(x, y, width, height);
7253}
7254
7255void glwViewportArrayv (GLuint first, GLsizei count, const GLfloat *v)
7256{
7257    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7258    if (!gl)
7259        return;
7260    gl->viewportArrayv(first, count, v);
7261}
7262
7263void glwViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h)
7264{
7265    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7266    if (!gl)
7267        return;
7268    gl->viewportIndexedf(index, x, y, w, h);
7269}
7270
7271void glwViewportIndexedfv (GLuint index, const GLfloat *v)
7272{
7273    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7274    if (!gl)
7275        return;
7276    gl->viewportIndexedfv(index, v);
7277}
7278
7279void glwWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout)
7280{
7281    const glw::Functions* gl = glw::getCurrentThreadFunctions();
7282    if (!gl)
7283        return;
7284    gl->waitSync(sync, flags, timeout);
7285}
7286