glwImpl.inl revision 3c827367444ee418f129b2c238299f49d3264554
1/* WARNING: This is auto-generated file. Do not modify, since changes will
2 * be lost! Modify the generating script instead.
3 */
4
5GLsync glwCreateSyncFromCLeventARB (struct _cl_context* context, struct _cl_event* event, GLbitfield flags)
6{
7	const glw::Functions* gl = glw::getCurrentThreadFunctions();
8	if (!gl)
9		 return (GLsync)0;
10	return gl->createSyncFromCLeventARB(context, event, flags);
11}
12
13void glwBlendBarrierKHR ()
14{
15	const glw::Functions* gl = glw::getCurrentThreadFunctions();
16	if (!gl)
17		 return;
18	gl->blendBarrierKHR();
19}
20
21void glwCullFace (GLenum mode)
22{
23	const glw::Functions* gl = glw::getCurrentThreadFunctions();
24	if (!gl)
25		 return;
26	gl->cullFace(mode);
27}
28
29void glwFrontFace (GLenum mode)
30{
31	const glw::Functions* gl = glw::getCurrentThreadFunctions();
32	if (!gl)
33		 return;
34	gl->frontFace(mode);
35}
36
37void glwHint (GLenum target, GLenum mode)
38{
39	const glw::Functions* gl = glw::getCurrentThreadFunctions();
40	if (!gl)
41		 return;
42	gl->hint(target, mode);
43}
44
45void glwLineWidth (GLfloat width)
46{
47	const glw::Functions* gl = glw::getCurrentThreadFunctions();
48	if (!gl)
49		 return;
50	gl->lineWidth(width);
51}
52
53void glwPointSize (GLfloat size)
54{
55	const glw::Functions* gl = glw::getCurrentThreadFunctions();
56	if (!gl)
57		 return;
58	gl->pointSize(size);
59}
60
61void glwPolygonMode (GLenum face, GLenum mode)
62{
63	const glw::Functions* gl = glw::getCurrentThreadFunctions();
64	if (!gl)
65		 return;
66	gl->polygonMode(face, mode);
67}
68
69void glwScissor (GLint x, GLint y, GLsizei width, GLsizei height)
70{
71	const glw::Functions* gl = glw::getCurrentThreadFunctions();
72	if (!gl)
73		 return;
74	gl->scissor(x, y, width, height);
75}
76
77void glwTexParameterf (GLenum target, GLenum pname, GLfloat param)
78{
79	const glw::Functions* gl = glw::getCurrentThreadFunctions();
80	if (!gl)
81		 return;
82	gl->texParameterf(target, pname, param);
83}
84
85void glwTexParameterfv (GLenum target, GLenum pname, const GLfloat* params)
86{
87	const glw::Functions* gl = glw::getCurrentThreadFunctions();
88	if (!gl)
89		 return;
90	gl->texParameterfv(target, pname, params);
91}
92
93void glwTexParameteri (GLenum target, GLenum pname, GLint param)
94{
95	const glw::Functions* gl = glw::getCurrentThreadFunctions();
96	if (!gl)
97		 return;
98	gl->texParameteri(target, pname, param);
99}
100
101void glwTexParameteriv (GLenum target, GLenum pname, const GLint* params)
102{
103	const glw::Functions* gl = glw::getCurrentThreadFunctions();
104	if (!gl)
105		 return;
106	gl->texParameteriv(target, pname, params);
107}
108
109void glwTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
110{
111	const glw::Functions* gl = glw::getCurrentThreadFunctions();
112	if (!gl)
113		 return;
114	gl->texImage1D(target, level, internalformat, width, border, format, type, pixels);
115}
116
117void glwTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
118{
119	const glw::Functions* gl = glw::getCurrentThreadFunctions();
120	if (!gl)
121		 return;
122	gl->texImage2D(target, level, internalformat, width, height, border, format, type, pixels);
123}
124
125void glwDrawBuffer (GLenum mode)
126{
127	const glw::Functions* gl = glw::getCurrentThreadFunctions();
128	if (!gl)
129		 return;
130	gl->drawBuffer(mode);
131}
132
133void glwClear (GLbitfield mask)
134{
135	const glw::Functions* gl = glw::getCurrentThreadFunctions();
136	if (!gl)
137		 return;
138	gl->clear(mask);
139}
140
141void glwClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
142{
143	const glw::Functions* gl = glw::getCurrentThreadFunctions();
144	if (!gl)
145		 return;
146	gl->clearColor(red, green, blue, alpha);
147}
148
149void glwClearStencil (GLint s)
150{
151	const glw::Functions* gl = glw::getCurrentThreadFunctions();
152	if (!gl)
153		 return;
154	gl->clearStencil(s);
155}
156
157void glwClearDepth (GLdouble depth)
158{
159	const glw::Functions* gl = glw::getCurrentThreadFunctions();
160	if (!gl)
161		 return;
162	gl->clearDepth(depth);
163}
164
165void glwStencilMask (GLuint mask)
166{
167	const glw::Functions* gl = glw::getCurrentThreadFunctions();
168	if (!gl)
169		 return;
170	gl->stencilMask(mask);
171}
172
173void glwColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
174{
175	const glw::Functions* gl = glw::getCurrentThreadFunctions();
176	if (!gl)
177		 return;
178	gl->colorMask(red, green, blue, alpha);
179}
180
181void glwDepthMask (GLboolean flag)
182{
183	const glw::Functions* gl = glw::getCurrentThreadFunctions();
184	if (!gl)
185		 return;
186	gl->depthMask(flag);
187}
188
189void glwDisable (GLenum cap)
190{
191	const glw::Functions* gl = glw::getCurrentThreadFunctions();
192	if (!gl)
193		 return;
194	gl->disable(cap);
195}
196
197void glwEnable (GLenum cap)
198{
199	const glw::Functions* gl = glw::getCurrentThreadFunctions();
200	if (!gl)
201		 return;
202	gl->enable(cap);
203}
204
205void glwFinish ()
206{
207	const glw::Functions* gl = glw::getCurrentThreadFunctions();
208	if (!gl)
209		 return;
210	gl->finish();
211}
212
213void glwFlush ()
214{
215	const glw::Functions* gl = glw::getCurrentThreadFunctions();
216	if (!gl)
217		 return;
218	gl->flush();
219}
220
221void glwBlendFunc (GLenum sfactor, GLenum dfactor)
222{
223	const glw::Functions* gl = glw::getCurrentThreadFunctions();
224	if (!gl)
225		 return;
226	gl->blendFunc(sfactor, dfactor);
227}
228
229void glwLogicOp (GLenum opcode)
230{
231	const glw::Functions* gl = glw::getCurrentThreadFunctions();
232	if (!gl)
233		 return;
234	gl->logicOp(opcode);
235}
236
237void glwStencilFunc (GLenum func, GLint ref, GLuint mask)
238{
239	const glw::Functions* gl = glw::getCurrentThreadFunctions();
240	if (!gl)
241		 return;
242	gl->stencilFunc(func, ref, mask);
243}
244
245void glwStencilOp (GLenum fail, GLenum zfail, GLenum zpass)
246{
247	const glw::Functions* gl = glw::getCurrentThreadFunctions();
248	if (!gl)
249		 return;
250	gl->stencilOp(fail, zfail, zpass);
251}
252
253void glwDepthFunc (GLenum func)
254{
255	const glw::Functions* gl = glw::getCurrentThreadFunctions();
256	if (!gl)
257		 return;
258	gl->depthFunc(func);
259}
260
261void glwPixelStoref (GLenum pname, GLfloat param)
262{
263	const glw::Functions* gl = glw::getCurrentThreadFunctions();
264	if (!gl)
265		 return;
266	gl->pixelStoref(pname, param);
267}
268
269void glwPixelStorei (GLenum pname, GLint param)
270{
271	const glw::Functions* gl = glw::getCurrentThreadFunctions();
272	if (!gl)
273		 return;
274	gl->pixelStorei(pname, param);
275}
276
277void glwReadBuffer (GLenum mode)
278{
279	const glw::Functions* gl = glw::getCurrentThreadFunctions();
280	if (!gl)
281		 return;
282	gl->readBuffer(mode);
283}
284
285void glwReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
286{
287	const glw::Functions* gl = glw::getCurrentThreadFunctions();
288	if (!gl)
289		 return;
290	gl->readPixels(x, y, width, height, format, type, pixels);
291}
292
293void glwGetBooleanv (GLenum pname, GLboolean* params)
294{
295	const glw::Functions* gl = glw::getCurrentThreadFunctions();
296	if (!gl)
297		 return;
298	gl->getBooleanv(pname, params);
299}
300
301void glwGetDoublev (GLenum pname, GLdouble* params)
302{
303	const glw::Functions* gl = glw::getCurrentThreadFunctions();
304	if (!gl)
305		 return;
306	gl->getDoublev(pname, params);
307}
308
309GLenum glwGetError ()
310{
311	const glw::Functions* gl = glw::getCurrentThreadFunctions();
312	if (!gl)
313		 return GL_INVALID_OPERATION;
314	return gl->getError();
315}
316
317void glwGetFloatv (GLenum pname, GLfloat* params)
318{
319	const glw::Functions* gl = glw::getCurrentThreadFunctions();
320	if (!gl)
321		 return;
322	gl->getFloatv(pname, params);
323}
324
325void glwGetIntegerv (GLenum pname, GLint* params)
326{
327	const glw::Functions* gl = glw::getCurrentThreadFunctions();
328	if (!gl)
329		 return;
330	gl->getIntegerv(pname, params);
331}
332
333const GLubyte* glwGetString (GLenum name)
334{
335	const glw::Functions* gl = glw::getCurrentThreadFunctions();
336	if (!gl)
337		 return (const GLubyte*)0;
338	return gl->getString(name);
339}
340
341void glwGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid* pixels)
342{
343	const glw::Functions* gl = glw::getCurrentThreadFunctions();
344	if (!gl)
345		 return;
346	gl->getTexImage(target, level, format, type, pixels);
347}
348
349void glwGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params)
350{
351	const glw::Functions* gl = glw::getCurrentThreadFunctions();
352	if (!gl)
353		 return;
354	gl->getTexParameterfv(target, pname, params);
355}
356
357void glwGetTexParameteriv (GLenum target, GLenum pname, GLint* params)
358{
359	const glw::Functions* gl = glw::getCurrentThreadFunctions();
360	if (!gl)
361		 return;
362	gl->getTexParameteriv(target, pname, params);
363}
364
365void glwGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat* params)
366{
367	const glw::Functions* gl = glw::getCurrentThreadFunctions();
368	if (!gl)
369		 return;
370	gl->getTexLevelParameterfv(target, level, pname, params);
371}
372
373void glwGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint* params)
374{
375	const glw::Functions* gl = glw::getCurrentThreadFunctions();
376	if (!gl)
377		 return;
378	gl->getTexLevelParameteriv(target, level, pname, params);
379}
380
381GLboolean glwIsEnabled (GLenum cap)
382{
383	const glw::Functions* gl = glw::getCurrentThreadFunctions();
384	if (!gl)
385		 return (GLboolean)0;
386	return gl->isEnabled(cap);
387}
388
389void glwDepthRange (GLdouble near, GLdouble far)
390{
391	const glw::Functions* gl = glw::getCurrentThreadFunctions();
392	if (!gl)
393		 return;
394	gl->depthRange(near, far);
395}
396
397void glwViewport (GLint x, GLint y, GLsizei width, GLsizei height)
398{
399	const glw::Functions* gl = glw::getCurrentThreadFunctions();
400	if (!gl)
401		 return;
402	gl->viewport(x, y, width, height);
403}
404
405void glwDrawArrays (GLenum mode, GLint first, GLsizei count)
406{
407	const glw::Functions* gl = glw::getCurrentThreadFunctions();
408	if (!gl)
409		 return;
410	gl->drawArrays(mode, first, count);
411}
412
413void glwDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
414{
415	const glw::Functions* gl = glw::getCurrentThreadFunctions();
416	if (!gl)
417		 return;
418	gl->drawElements(mode, count, type, indices);
419}
420
421void glwGetPointerv (GLenum pname, GLvoid** params)
422{
423	const glw::Functions* gl = glw::getCurrentThreadFunctions();
424	if (!gl)
425		 return;
426	gl->getPointerv(pname, params);
427}
428
429void glwPolygonOffset (GLfloat factor, GLfloat units)
430{
431	const glw::Functions* gl = glw::getCurrentThreadFunctions();
432	if (!gl)
433		 return;
434	gl->polygonOffset(factor, units);
435}
436
437void glwCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
438{
439	const glw::Functions* gl = glw::getCurrentThreadFunctions();
440	if (!gl)
441		 return;
442	gl->copyTexImage1D(target, level, internalformat, x, y, width, border);
443}
444
445void glwCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
446{
447	const glw::Functions* gl = glw::getCurrentThreadFunctions();
448	if (!gl)
449		 return;
450	gl->copyTexImage2D(target, level, internalformat, x, y, width, height, border);
451}
452
453void glwCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
454{
455	const glw::Functions* gl = glw::getCurrentThreadFunctions();
456	if (!gl)
457		 return;
458	gl->copyTexSubImage1D(target, level, xoffset, x, y, width);
459}
460
461void glwCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
462{
463	const glw::Functions* gl = glw::getCurrentThreadFunctions();
464	if (!gl)
465		 return;
466	gl->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
467}
468
469void glwTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid* pixels)
470{
471	const glw::Functions* gl = glw::getCurrentThreadFunctions();
472	if (!gl)
473		 return;
474	gl->texSubImage1D(target, level, xoffset, width, format, type, pixels);
475}
476
477void glwTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
478{
479	const glw::Functions* gl = glw::getCurrentThreadFunctions();
480	if (!gl)
481		 return;
482	gl->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
483}
484
485void glwBindTexture (GLenum target, GLuint texture)
486{
487	const glw::Functions* gl = glw::getCurrentThreadFunctions();
488	if (!gl)
489		 return;
490	gl->bindTexture(target, texture);
491}
492
493void glwDeleteTextures (GLsizei n, const GLuint* textures)
494{
495	const glw::Functions* gl = glw::getCurrentThreadFunctions();
496	if (!gl)
497		 return;
498	gl->deleteTextures(n, textures);
499}
500
501void glwGenTextures (GLsizei n, GLuint* textures)
502{
503	const glw::Functions* gl = glw::getCurrentThreadFunctions();
504	if (!gl)
505		 return;
506	gl->genTextures(n, textures);
507}
508
509GLboolean glwIsTexture (GLuint texture)
510{
511	const glw::Functions* gl = glw::getCurrentThreadFunctions();
512	if (!gl)
513		 return (GLboolean)0;
514	return gl->isTexture(texture);
515}
516
517void glwBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
518{
519	const glw::Functions* gl = glw::getCurrentThreadFunctions();
520	if (!gl)
521		 return;
522	gl->blendColor(red, green, blue, alpha);
523}
524
525void glwBlendEquation (GLenum mode)
526{
527	const glw::Functions* gl = glw::getCurrentThreadFunctions();
528	if (!gl)
529		 return;
530	gl->blendEquation(mode);
531}
532
533void glwDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
534{
535	const glw::Functions* gl = glw::getCurrentThreadFunctions();
536	if (!gl)
537		 return;
538	gl->drawRangeElements(mode, start, end, count, type, indices);
539}
540
541void glwTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
542{
543	const glw::Functions* gl = glw::getCurrentThreadFunctions();
544	if (!gl)
545		 return;
546	gl->texImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
547}
548
549void glwTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
550{
551	const glw::Functions* gl = glw::getCurrentThreadFunctions();
552	if (!gl)
553		 return;
554	gl->texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
555}
556
557void glwCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
558{
559	const glw::Functions* gl = glw::getCurrentThreadFunctions();
560	if (!gl)
561		 return;
562	gl->copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
563}
564
565void glwActiveTexture (GLenum texture)
566{
567	const glw::Functions* gl = glw::getCurrentThreadFunctions();
568	if (!gl)
569		 return;
570	gl->activeTexture(texture);
571}
572
573void glwSampleCoverage (GLfloat value, GLboolean invert)
574{
575	const glw::Functions* gl = glw::getCurrentThreadFunctions();
576	if (!gl)
577		 return;
578	gl->sampleCoverage(value, invert);
579}
580
581void glwCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
582{
583	const glw::Functions* gl = glw::getCurrentThreadFunctions();
584	if (!gl)
585		 return;
586	gl->compressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
587}
588
589void glwCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
590{
591	const glw::Functions* gl = glw::getCurrentThreadFunctions();
592	if (!gl)
593		 return;
594	gl->compressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
595}
596
597void glwCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid* data)
598{
599	const glw::Functions* gl = glw::getCurrentThreadFunctions();
600	if (!gl)
601		 return;
602	gl->compressedTexImage1D(target, level, internalformat, width, border, imageSize, data);
603}
604
605void glwCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
606{
607	const glw::Functions* gl = glw::getCurrentThreadFunctions();
608	if (!gl)
609		 return;
610	gl->compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
611}
612
613void glwCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
614{
615	const glw::Functions* gl = glw::getCurrentThreadFunctions();
616	if (!gl)
617		 return;
618	gl->compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
619}
620
621void glwCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid* data)
622{
623	const glw::Functions* gl = glw::getCurrentThreadFunctions();
624	if (!gl)
625		 return;
626	gl->compressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);
627}
628
629void glwGetCompressedTexImage (GLenum target, GLint level, GLvoid* img)
630{
631	const glw::Functions* gl = glw::getCurrentThreadFunctions();
632	if (!gl)
633		 return;
634	gl->getCompressedTexImage(target, level, img);
635}
636
637void glwBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
638{
639	const glw::Functions* gl = glw::getCurrentThreadFunctions();
640	if (!gl)
641		 return;
642	gl->blendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
643}
644
645void glwMultiDrawArrays (GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount)
646{
647	const glw::Functions* gl = glw::getCurrentThreadFunctions();
648	if (!gl)
649		 return;
650	gl->multiDrawArrays(mode, first, count, drawcount);
651}
652
653void glwMultiDrawElements (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, GLsizei drawcount)
654{
655	const glw::Functions* gl = glw::getCurrentThreadFunctions();
656	if (!gl)
657		 return;
658	gl->multiDrawElements(mode, count, type, indices, drawcount);
659}
660
661void glwPointParameterf (GLenum pname, GLfloat param)
662{
663	const glw::Functions* gl = glw::getCurrentThreadFunctions();
664	if (!gl)
665		 return;
666	gl->pointParameterf(pname, param);
667}
668
669void glwPointParameterfv (GLenum pname, const GLfloat* params)
670{
671	const glw::Functions* gl = glw::getCurrentThreadFunctions();
672	if (!gl)
673		 return;
674	gl->pointParameterfv(pname, params);
675}
676
677void glwPointParameteri (GLenum pname, GLint param)
678{
679	const glw::Functions* gl = glw::getCurrentThreadFunctions();
680	if (!gl)
681		 return;
682	gl->pointParameteri(pname, param);
683}
684
685void glwPointParameteriv (GLenum pname, const GLint* params)
686{
687	const glw::Functions* gl = glw::getCurrentThreadFunctions();
688	if (!gl)
689		 return;
690	gl->pointParameteriv(pname, params);
691}
692
693void glwGenQueries (GLsizei n, GLuint* ids)
694{
695	const glw::Functions* gl = glw::getCurrentThreadFunctions();
696	if (!gl)
697		 return;
698	gl->genQueries(n, ids);
699}
700
701void glwDeleteQueries (GLsizei n, const GLuint* ids)
702{
703	const glw::Functions* gl = glw::getCurrentThreadFunctions();
704	if (!gl)
705		 return;
706	gl->deleteQueries(n, ids);
707}
708
709GLboolean glwIsQuery (GLuint id)
710{
711	const glw::Functions* gl = glw::getCurrentThreadFunctions();
712	if (!gl)
713		 return (GLboolean)0;
714	return gl->isQuery(id);
715}
716
717void glwBeginQuery (GLenum target, GLuint id)
718{
719	const glw::Functions* gl = glw::getCurrentThreadFunctions();
720	if (!gl)
721		 return;
722	gl->beginQuery(target, id);
723}
724
725void glwEndQuery (GLenum target)
726{
727	const glw::Functions* gl = glw::getCurrentThreadFunctions();
728	if (!gl)
729		 return;
730	gl->endQuery(target);
731}
732
733void glwGetQueryiv (GLenum target, GLenum pname, GLint* params)
734{
735	const glw::Functions* gl = glw::getCurrentThreadFunctions();
736	if (!gl)
737		 return;
738	gl->getQueryiv(target, pname, params);
739}
740
741void glwGetQueryObjectiv (GLuint id, GLenum pname, GLint* params)
742{
743	const glw::Functions* gl = glw::getCurrentThreadFunctions();
744	if (!gl)
745		 return;
746	gl->getQueryObjectiv(id, pname, params);
747}
748
749void glwGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params)
750{
751	const glw::Functions* gl = glw::getCurrentThreadFunctions();
752	if (!gl)
753		 return;
754	gl->getQueryObjectuiv(id, pname, params);
755}
756
757void glwBindBuffer (GLenum target, GLuint buffer)
758{
759	const glw::Functions* gl = glw::getCurrentThreadFunctions();
760	if (!gl)
761		 return;
762	gl->bindBuffer(target, buffer);
763}
764
765void glwDeleteBuffers (GLsizei n, const GLuint* buffers)
766{
767	const glw::Functions* gl = glw::getCurrentThreadFunctions();
768	if (!gl)
769		 return;
770	gl->deleteBuffers(n, buffers);
771}
772
773void glwGenBuffers (GLsizei n, GLuint* buffers)
774{
775	const glw::Functions* gl = glw::getCurrentThreadFunctions();
776	if (!gl)
777		 return;
778	gl->genBuffers(n, buffers);
779}
780
781GLboolean glwIsBuffer (GLuint buffer)
782{
783	const glw::Functions* gl = glw::getCurrentThreadFunctions();
784	if (!gl)
785		 return (GLboolean)0;
786	return gl->isBuffer(buffer);
787}
788
789void glwBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
790{
791	const glw::Functions* gl = glw::getCurrentThreadFunctions();
792	if (!gl)
793		 return;
794	gl->bufferData(target, size, data, usage);
795}
796
797void glwBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
798{
799	const glw::Functions* gl = glw::getCurrentThreadFunctions();
800	if (!gl)
801		 return;
802	gl->bufferSubData(target, offset, size, data);
803}
804
805void glwGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data)
806{
807	const glw::Functions* gl = glw::getCurrentThreadFunctions();
808	if (!gl)
809		 return;
810	gl->getBufferSubData(target, offset, size, data);
811}
812
813GLvoid* glwMapBuffer (GLenum target, GLenum access)
814{
815	const glw::Functions* gl = glw::getCurrentThreadFunctions();
816	if (!gl)
817		 return (GLvoid*)0;
818	return gl->mapBuffer(target, access);
819}
820
821GLboolean glwUnmapBuffer (GLenum target)
822{
823	const glw::Functions* gl = glw::getCurrentThreadFunctions();
824	if (!gl)
825		 return (GLboolean)0;
826	return gl->unmapBuffer(target);
827}
828
829void glwGetBufferParameteriv (GLenum target, GLenum pname, GLint* params)
830{
831	const glw::Functions* gl = glw::getCurrentThreadFunctions();
832	if (!gl)
833		 return;
834	gl->getBufferParameteriv(target, pname, params);
835}
836
837void glwGetBufferPointerv (GLenum target, GLenum pname, GLvoid** params)
838{
839	const glw::Functions* gl = glw::getCurrentThreadFunctions();
840	if (!gl)
841		 return;
842	gl->getBufferPointerv(target, pname, params);
843}
844
845void glwBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
846{
847	const glw::Functions* gl = glw::getCurrentThreadFunctions();
848	if (!gl)
849		 return;
850	gl->blendEquationSeparate(modeRGB, modeAlpha);
851}
852
853void glwDrawBuffers (GLsizei n, const GLenum* bufs)
854{
855	const glw::Functions* gl = glw::getCurrentThreadFunctions();
856	if (!gl)
857		 return;
858	gl->drawBuffers(n, bufs);
859}
860
861void glwStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
862{
863	const glw::Functions* gl = glw::getCurrentThreadFunctions();
864	if (!gl)
865		 return;
866	gl->stencilOpSeparate(face, sfail, dpfail, dppass);
867}
868
869void glwStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask)
870{
871	const glw::Functions* gl = glw::getCurrentThreadFunctions();
872	if (!gl)
873		 return;
874	gl->stencilFuncSeparate(face, func, ref, mask);
875}
876
877void glwStencilMaskSeparate (GLenum face, GLuint mask)
878{
879	const glw::Functions* gl = glw::getCurrentThreadFunctions();
880	if (!gl)
881		 return;
882	gl->stencilMaskSeparate(face, mask);
883}
884
885void glwAttachShader (GLuint program, GLuint shader)
886{
887	const glw::Functions* gl = glw::getCurrentThreadFunctions();
888	if (!gl)
889		 return;
890	gl->attachShader(program, shader);
891}
892
893void glwBindAttribLocation (GLuint program, GLuint index, const GLchar* name)
894{
895	const glw::Functions* gl = glw::getCurrentThreadFunctions();
896	if (!gl)
897		 return;
898	gl->bindAttribLocation(program, index, name);
899}
900
901void glwCompileShader (GLuint shader)
902{
903	const glw::Functions* gl = glw::getCurrentThreadFunctions();
904	if (!gl)
905		 return;
906	gl->compileShader(shader);
907}
908
909GLuint glwCreateProgram ()
910{
911	const glw::Functions* gl = glw::getCurrentThreadFunctions();
912	if (!gl)
913		 return (GLuint)0;
914	return gl->createProgram();
915}
916
917GLuint glwCreateShader (GLenum type)
918{
919	const glw::Functions* gl = glw::getCurrentThreadFunctions();
920	if (!gl)
921		 return (GLuint)0;
922	return gl->createShader(type);
923}
924
925void glwDeleteProgram (GLuint program)
926{
927	const glw::Functions* gl = glw::getCurrentThreadFunctions();
928	if (!gl)
929		 return;
930	gl->deleteProgram(program);
931}
932
933void glwDeleteShader (GLuint shader)
934{
935	const glw::Functions* gl = glw::getCurrentThreadFunctions();
936	if (!gl)
937		 return;
938	gl->deleteShader(shader);
939}
940
941void glwDetachShader (GLuint program, GLuint shader)
942{
943	const glw::Functions* gl = glw::getCurrentThreadFunctions();
944	if (!gl)
945		 return;
946	gl->detachShader(program, shader);
947}
948
949void glwDisableVertexAttribArray (GLuint index)
950{
951	const glw::Functions* gl = glw::getCurrentThreadFunctions();
952	if (!gl)
953		 return;
954	gl->disableVertexAttribArray(index);
955}
956
957void glwEnableVertexAttribArray (GLuint index)
958{
959	const glw::Functions* gl = glw::getCurrentThreadFunctions();
960	if (!gl)
961		 return;
962	gl->enableVertexAttribArray(index);
963}
964
965void glwGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
966{
967	const glw::Functions* gl = glw::getCurrentThreadFunctions();
968	if (!gl)
969		 return;
970	gl->getActiveAttrib(program, index, bufSize, length, size, type, name);
971}
972
973void glwGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
974{
975	const glw::Functions* gl = glw::getCurrentThreadFunctions();
976	if (!gl)
977		 return;
978	gl->getActiveUniform(program, index, bufSize, length, size, type, name);
979}
980
981void glwGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* obj)
982{
983	const glw::Functions* gl = glw::getCurrentThreadFunctions();
984	if (!gl)
985		 return;
986	gl->getAttachedShaders(program, maxCount, count, obj);
987}
988
989GLint glwGetAttribLocation (GLuint program, const GLchar* name)
990{
991	const glw::Functions* gl = glw::getCurrentThreadFunctions();
992	if (!gl)
993		 return (GLint)0;
994	return gl->getAttribLocation(program, name);
995}
996
997void glwGetProgramiv (GLuint program, GLenum pname, GLint* params)
998{
999	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1000	if (!gl)
1001		 return;
1002	gl->getProgramiv(program, pname, params);
1003}
1004
1005void glwGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
1006{
1007	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1008	if (!gl)
1009		 return;
1010	gl->getProgramInfoLog(program, bufSize, length, infoLog);
1011}
1012
1013void glwGetShaderiv (GLuint shader, GLenum pname, GLint* params)
1014{
1015	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1016	if (!gl)
1017		 return;
1018	gl->getShaderiv(shader, pname, params);
1019}
1020
1021void glwGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
1022{
1023	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1024	if (!gl)
1025		 return;
1026	gl->getShaderInfoLog(shader, bufSize, length, infoLog);
1027}
1028
1029void glwGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source)
1030{
1031	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1032	if (!gl)
1033		 return;
1034	gl->getShaderSource(shader, bufSize, length, source);
1035}
1036
1037GLint glwGetUniformLocation (GLuint program, const GLchar* name)
1038{
1039	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1040	if (!gl)
1041		 return (GLint)0;
1042	return gl->getUniformLocation(program, name);
1043}
1044
1045void glwGetUniformfv (GLuint program, GLint location, GLfloat* params)
1046{
1047	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1048	if (!gl)
1049		 return;
1050	gl->getUniformfv(program, location, params);
1051}
1052
1053void glwGetUniformiv (GLuint program, GLint location, GLint* params)
1054{
1055	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1056	if (!gl)
1057		 return;
1058	gl->getUniformiv(program, location, params);
1059}
1060
1061void glwGetVertexAttribdv (GLuint index, GLenum pname, GLdouble* params)
1062{
1063	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1064	if (!gl)
1065		 return;
1066	gl->getVertexAttribdv(index, pname, params);
1067}
1068
1069void glwGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params)
1070{
1071	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1072	if (!gl)
1073		 return;
1074	gl->getVertexAttribfv(index, pname, params);
1075}
1076
1077void glwGetVertexAttribiv (GLuint index, GLenum pname, GLint* params)
1078{
1079	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1080	if (!gl)
1081		 return;
1082	gl->getVertexAttribiv(index, pname, params);
1083}
1084
1085void glwGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer)
1086{
1087	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1088	if (!gl)
1089		 return;
1090	gl->getVertexAttribPointerv(index, pname, pointer);
1091}
1092
1093GLboolean glwIsProgram (GLuint program)
1094{
1095	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1096	if (!gl)
1097		 return (GLboolean)0;
1098	return gl->isProgram(program);
1099}
1100
1101GLboolean glwIsShader (GLuint shader)
1102{
1103	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1104	if (!gl)
1105		 return (GLboolean)0;
1106	return gl->isShader(shader);
1107}
1108
1109void glwLinkProgram (GLuint program)
1110{
1111	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1112	if (!gl)
1113		 return;
1114	gl->linkProgram(program);
1115}
1116
1117void glwShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length)
1118{
1119	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1120	if (!gl)
1121		 return;
1122	gl->shaderSource(shader, count, string, length);
1123}
1124
1125void glwUseProgram (GLuint program)
1126{
1127	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1128	if (!gl)
1129		 return;
1130	gl->useProgram(program);
1131}
1132
1133void glwUniform1f (GLint location, GLfloat v0)
1134{
1135	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1136	if (!gl)
1137		 return;
1138	gl->uniform1f(location, v0);
1139}
1140
1141void glwUniform2f (GLint location, GLfloat v0, GLfloat v1)
1142{
1143	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1144	if (!gl)
1145		 return;
1146	gl->uniform2f(location, v0, v1);
1147}
1148
1149void glwUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
1150{
1151	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1152	if (!gl)
1153		 return;
1154	gl->uniform3f(location, v0, v1, v2);
1155}
1156
1157void glwUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
1158{
1159	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1160	if (!gl)
1161		 return;
1162	gl->uniform4f(location, v0, v1, v2, v3);
1163}
1164
1165void glwUniform1i (GLint location, GLint v0)
1166{
1167	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1168	if (!gl)
1169		 return;
1170	gl->uniform1i(location, v0);
1171}
1172
1173void glwUniform2i (GLint location, GLint v0, GLint v1)
1174{
1175	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1176	if (!gl)
1177		 return;
1178	gl->uniform2i(location, v0, v1);
1179}
1180
1181void glwUniform3i (GLint location, GLint v0, GLint v1, GLint v2)
1182{
1183	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1184	if (!gl)
1185		 return;
1186	gl->uniform3i(location, v0, v1, v2);
1187}
1188
1189void glwUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
1190{
1191	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1192	if (!gl)
1193		 return;
1194	gl->uniform4i(location, v0, v1, v2, v3);
1195}
1196
1197void glwUniform1fv (GLint location, GLsizei count, const GLfloat* value)
1198{
1199	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1200	if (!gl)
1201		 return;
1202	gl->uniform1fv(location, count, value);
1203}
1204
1205void glwUniform2fv (GLint location, GLsizei count, const GLfloat* value)
1206{
1207	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1208	if (!gl)
1209		 return;
1210	gl->uniform2fv(location, count, value);
1211}
1212
1213void glwUniform3fv (GLint location, GLsizei count, const GLfloat* value)
1214{
1215	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1216	if (!gl)
1217		 return;
1218	gl->uniform3fv(location, count, value);
1219}
1220
1221void glwUniform4fv (GLint location, GLsizei count, const GLfloat* value)
1222{
1223	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1224	if (!gl)
1225		 return;
1226	gl->uniform4fv(location, count, value);
1227}
1228
1229void glwUniform1iv (GLint location, GLsizei count, const GLint* value)
1230{
1231	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1232	if (!gl)
1233		 return;
1234	gl->uniform1iv(location, count, value);
1235}
1236
1237void glwUniform2iv (GLint location, GLsizei count, const GLint* value)
1238{
1239	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1240	if (!gl)
1241		 return;
1242	gl->uniform2iv(location, count, value);
1243}
1244
1245void glwUniform3iv (GLint location, GLsizei count, const GLint* value)
1246{
1247	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1248	if (!gl)
1249		 return;
1250	gl->uniform3iv(location, count, value);
1251}
1252
1253void glwUniform4iv (GLint location, GLsizei count, const GLint* value)
1254{
1255	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1256	if (!gl)
1257		 return;
1258	gl->uniform4iv(location, count, value);
1259}
1260
1261void glwUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1262{
1263	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1264	if (!gl)
1265		 return;
1266	gl->uniformMatrix2fv(location, count, transpose, value);
1267}
1268
1269void glwUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1270{
1271	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1272	if (!gl)
1273		 return;
1274	gl->uniformMatrix3fv(location, count, transpose, value);
1275}
1276
1277void glwUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1278{
1279	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1280	if (!gl)
1281		 return;
1282	gl->uniformMatrix4fv(location, count, transpose, value);
1283}
1284
1285void glwValidateProgram (GLuint program)
1286{
1287	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1288	if (!gl)
1289		 return;
1290	gl->validateProgram(program);
1291}
1292
1293void glwVertexAttrib1d (GLuint index, GLdouble x)
1294{
1295	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1296	if (!gl)
1297		 return;
1298	gl->vertexAttrib1d(index, x);
1299}
1300
1301void glwVertexAttrib1dv (GLuint index, const GLdouble* v)
1302{
1303	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1304	if (!gl)
1305		 return;
1306	gl->vertexAttrib1dv(index, v);
1307}
1308
1309void glwVertexAttrib1f (GLuint index, GLfloat x)
1310{
1311	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1312	if (!gl)
1313		 return;
1314	gl->vertexAttrib1f(index, x);
1315}
1316
1317void glwVertexAttrib1fv (GLuint index, const GLfloat* v)
1318{
1319	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1320	if (!gl)
1321		 return;
1322	gl->vertexAttrib1fv(index, v);
1323}
1324
1325void glwVertexAttrib1s (GLuint index, GLshort x)
1326{
1327	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1328	if (!gl)
1329		 return;
1330	gl->vertexAttrib1s(index, x);
1331}
1332
1333void glwVertexAttrib1sv (GLuint index, const GLshort* v)
1334{
1335	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1336	if (!gl)
1337		 return;
1338	gl->vertexAttrib1sv(index, v);
1339}
1340
1341void glwVertexAttrib2d (GLuint index, GLdouble x, GLdouble y)
1342{
1343	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1344	if (!gl)
1345		 return;
1346	gl->vertexAttrib2d(index, x, y);
1347}
1348
1349void glwVertexAttrib2dv (GLuint index, const GLdouble* v)
1350{
1351	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1352	if (!gl)
1353		 return;
1354	gl->vertexAttrib2dv(index, v);
1355}
1356
1357void glwVertexAttrib2f (GLuint index, GLfloat x, GLfloat y)
1358{
1359	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1360	if (!gl)
1361		 return;
1362	gl->vertexAttrib2f(index, x, y);
1363}
1364
1365void glwVertexAttrib2fv (GLuint index, const GLfloat* v)
1366{
1367	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1368	if (!gl)
1369		 return;
1370	gl->vertexAttrib2fv(index, v);
1371}
1372
1373void glwVertexAttrib2s (GLuint index, GLshort x, GLshort y)
1374{
1375	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1376	if (!gl)
1377		 return;
1378	gl->vertexAttrib2s(index, x, y);
1379}
1380
1381void glwVertexAttrib2sv (GLuint index, const GLshort* v)
1382{
1383	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1384	if (!gl)
1385		 return;
1386	gl->vertexAttrib2sv(index, v);
1387}
1388
1389void glwVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z)
1390{
1391	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1392	if (!gl)
1393		 return;
1394	gl->vertexAttrib3d(index, x, y, z);
1395}
1396
1397void glwVertexAttrib3dv (GLuint index, const GLdouble* v)
1398{
1399	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1400	if (!gl)
1401		 return;
1402	gl->vertexAttrib3dv(index, v);
1403}
1404
1405void glwVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z)
1406{
1407	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1408	if (!gl)
1409		 return;
1410	gl->vertexAttrib3f(index, x, y, z);
1411}
1412
1413void glwVertexAttrib3fv (GLuint index, const GLfloat* v)
1414{
1415	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1416	if (!gl)
1417		 return;
1418	gl->vertexAttrib3fv(index, v);
1419}
1420
1421void glwVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z)
1422{
1423	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1424	if (!gl)
1425		 return;
1426	gl->vertexAttrib3s(index, x, y, z);
1427}
1428
1429void glwVertexAttrib3sv (GLuint index, const GLshort* v)
1430{
1431	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1432	if (!gl)
1433		 return;
1434	gl->vertexAttrib3sv(index, v);
1435}
1436
1437void glwVertexAttrib4Nbv (GLuint index, const GLbyte* v)
1438{
1439	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1440	if (!gl)
1441		 return;
1442	gl->vertexAttrib4Nbv(index, v);
1443}
1444
1445void glwVertexAttrib4Niv (GLuint index, const GLint* v)
1446{
1447	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1448	if (!gl)
1449		 return;
1450	gl->vertexAttrib4Niv(index, v);
1451}
1452
1453void glwVertexAttrib4Nsv (GLuint index, const GLshort* v)
1454{
1455	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1456	if (!gl)
1457		 return;
1458	gl->vertexAttrib4Nsv(index, v);
1459}
1460
1461void glwVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
1462{
1463	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1464	if (!gl)
1465		 return;
1466	gl->vertexAttrib4Nub(index, x, y, z, w);
1467}
1468
1469void glwVertexAttrib4Nubv (GLuint index, const GLubyte* v)
1470{
1471	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1472	if (!gl)
1473		 return;
1474	gl->vertexAttrib4Nubv(index, v);
1475}
1476
1477void glwVertexAttrib4Nuiv (GLuint index, const GLuint* v)
1478{
1479	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1480	if (!gl)
1481		 return;
1482	gl->vertexAttrib4Nuiv(index, v);
1483}
1484
1485void glwVertexAttrib4Nusv (GLuint index, const GLushort* v)
1486{
1487	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1488	if (!gl)
1489		 return;
1490	gl->vertexAttrib4Nusv(index, v);
1491}
1492
1493void glwVertexAttrib4bv (GLuint index, const GLbyte* v)
1494{
1495	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1496	if (!gl)
1497		 return;
1498	gl->vertexAttrib4bv(index, v);
1499}
1500
1501void glwVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
1502{
1503	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1504	if (!gl)
1505		 return;
1506	gl->vertexAttrib4d(index, x, y, z, w);
1507}
1508
1509void glwVertexAttrib4dv (GLuint index, const GLdouble* v)
1510{
1511	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1512	if (!gl)
1513		 return;
1514	gl->vertexAttrib4dv(index, v);
1515}
1516
1517void glwVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1518{
1519	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1520	if (!gl)
1521		 return;
1522	gl->vertexAttrib4f(index, x, y, z, w);
1523}
1524
1525void glwVertexAttrib4fv (GLuint index, const GLfloat* v)
1526{
1527	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1528	if (!gl)
1529		 return;
1530	gl->vertexAttrib4fv(index, v);
1531}
1532
1533void glwVertexAttrib4iv (GLuint index, const GLint* v)
1534{
1535	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1536	if (!gl)
1537		 return;
1538	gl->vertexAttrib4iv(index, v);
1539}
1540
1541void glwVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
1542{
1543	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1544	if (!gl)
1545		 return;
1546	gl->vertexAttrib4s(index, x, y, z, w);
1547}
1548
1549void glwVertexAttrib4sv (GLuint index, const GLshort* v)
1550{
1551	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1552	if (!gl)
1553		 return;
1554	gl->vertexAttrib4sv(index, v);
1555}
1556
1557void glwVertexAttrib4ubv (GLuint index, const GLubyte* v)
1558{
1559	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1560	if (!gl)
1561		 return;
1562	gl->vertexAttrib4ubv(index, v);
1563}
1564
1565void glwVertexAttrib4uiv (GLuint index, const GLuint* v)
1566{
1567	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1568	if (!gl)
1569		 return;
1570	gl->vertexAttrib4uiv(index, v);
1571}
1572
1573void glwVertexAttrib4usv (GLuint index, const GLushort* v)
1574{
1575	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1576	if (!gl)
1577		 return;
1578	gl->vertexAttrib4usv(index, v);
1579}
1580
1581void glwVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer)
1582{
1583	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1584	if (!gl)
1585		 return;
1586	gl->vertexAttribPointer(index, size, type, normalized, stride, pointer);
1587}
1588
1589void glwUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1590{
1591	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1592	if (!gl)
1593		 return;
1594	gl->uniformMatrix2x3fv(location, count, transpose, value);
1595}
1596
1597void glwUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1598{
1599	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1600	if (!gl)
1601		 return;
1602	gl->uniformMatrix3x2fv(location, count, transpose, value);
1603}
1604
1605void glwUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1606{
1607	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1608	if (!gl)
1609		 return;
1610	gl->uniformMatrix2x4fv(location, count, transpose, value);
1611}
1612
1613void glwUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1614{
1615	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1616	if (!gl)
1617		 return;
1618	gl->uniformMatrix4x2fv(location, count, transpose, value);
1619}
1620
1621void glwUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1622{
1623	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1624	if (!gl)
1625		 return;
1626	gl->uniformMatrix3x4fv(location, count, transpose, value);
1627}
1628
1629void glwUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1630{
1631	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1632	if (!gl)
1633		 return;
1634	gl->uniformMatrix4x3fv(location, count, transpose, value);
1635}
1636
1637void glwColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
1638{
1639	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1640	if (!gl)
1641		 return;
1642	gl->colorMaski(index, r, g, b, a);
1643}
1644
1645void glwGetBooleani_v (GLenum target, GLuint index, GLboolean* data)
1646{
1647	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1648	if (!gl)
1649		 return;
1650	gl->getBooleani_v(target, index, data);
1651}
1652
1653void glwGetIntegeri_v (GLenum target, GLuint index, GLint* data)
1654{
1655	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1656	if (!gl)
1657		 return;
1658	gl->getIntegeri_v(target, index, data);
1659}
1660
1661void glwEnablei (GLenum target, GLuint index)
1662{
1663	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1664	if (!gl)
1665		 return;
1666	gl->enablei(target, index);
1667}
1668
1669void glwDisablei (GLenum target, GLuint index)
1670{
1671	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1672	if (!gl)
1673		 return;
1674	gl->disablei(target, index);
1675}
1676
1677GLboolean glwIsEnabledi (GLenum target, GLuint index)
1678{
1679	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1680	if (!gl)
1681		 return (GLboolean)0;
1682	return gl->isEnabledi(target, index);
1683}
1684
1685void glwBeginTransformFeedback (GLenum primitiveMode)
1686{
1687	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1688	if (!gl)
1689		 return;
1690	gl->beginTransformFeedback(primitiveMode);
1691}
1692
1693void glwEndTransformFeedback ()
1694{
1695	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1696	if (!gl)
1697		 return;
1698	gl->endTransformFeedback();
1699}
1700
1701void glwBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1702{
1703	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1704	if (!gl)
1705		 return;
1706	gl->bindBufferRange(target, index, buffer, offset, size);
1707}
1708
1709void glwBindBufferBase (GLenum target, GLuint index, GLuint buffer)
1710{
1711	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1712	if (!gl)
1713		 return;
1714	gl->bindBufferBase(target, index, buffer);
1715}
1716
1717void glwTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1718{
1719	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1720	if (!gl)
1721		 return;
1722	gl->transformFeedbackVaryings(program, count, varyings, bufferMode);
1723}
1724
1725void glwGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1726{
1727	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1728	if (!gl)
1729		 return;
1730	gl->getTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
1731}
1732
1733void glwClampColor (GLenum target, GLenum clamp)
1734{
1735	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1736	if (!gl)
1737		 return;
1738	gl->clampColor(target, clamp);
1739}
1740
1741void glwBeginConditionalRender (GLuint id, GLenum mode)
1742{
1743	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1744	if (!gl)
1745		 return;
1746	gl->beginConditionalRender(id, mode);
1747}
1748
1749void glwEndConditionalRender ()
1750{
1751	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1752	if (!gl)
1753		 return;
1754	gl->endConditionalRender();
1755}
1756
1757void glwVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1758{
1759	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1760	if (!gl)
1761		 return;
1762	gl->vertexAttribIPointer(index, size, type, stride, pointer);
1763}
1764
1765void glwGetVertexAttribIiv (GLuint index, GLenum pname, GLint* params)
1766{
1767	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1768	if (!gl)
1769		 return;
1770	gl->getVertexAttribIiv(index, pname, params);
1771}
1772
1773void glwGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint* params)
1774{
1775	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1776	if (!gl)
1777		 return;
1778	gl->getVertexAttribIuiv(index, pname, params);
1779}
1780
1781void glwVertexAttribI1i (GLuint index, GLint x)
1782{
1783	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1784	if (!gl)
1785		 return;
1786	gl->vertexAttribI1i(index, x);
1787}
1788
1789void glwVertexAttribI2i (GLuint index, GLint x, GLint y)
1790{
1791	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1792	if (!gl)
1793		 return;
1794	gl->vertexAttribI2i(index, x, y);
1795}
1796
1797void glwVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z)
1798{
1799	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1800	if (!gl)
1801		 return;
1802	gl->vertexAttribI3i(index, x, y, z);
1803}
1804
1805void glwVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w)
1806{
1807	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1808	if (!gl)
1809		 return;
1810	gl->vertexAttribI4i(index, x, y, z, w);
1811}
1812
1813void glwVertexAttribI1ui (GLuint index, GLuint x)
1814{
1815	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1816	if (!gl)
1817		 return;
1818	gl->vertexAttribI1ui(index, x);
1819}
1820
1821void glwVertexAttribI2ui (GLuint index, GLuint x, GLuint y)
1822{
1823	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1824	if (!gl)
1825		 return;
1826	gl->vertexAttribI2ui(index, x, y);
1827}
1828
1829void glwVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z)
1830{
1831	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1832	if (!gl)
1833		 return;
1834	gl->vertexAttribI3ui(index, x, y, z);
1835}
1836
1837void glwVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1838{
1839	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1840	if (!gl)
1841		 return;
1842	gl->vertexAttribI4ui(index, x, y, z, w);
1843}
1844
1845void glwVertexAttribI1iv (GLuint index, const GLint* v)
1846{
1847	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1848	if (!gl)
1849		 return;
1850	gl->vertexAttribI1iv(index, v);
1851}
1852
1853void glwVertexAttribI2iv (GLuint index, const GLint* v)
1854{
1855	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1856	if (!gl)
1857		 return;
1858	gl->vertexAttribI2iv(index, v);
1859}
1860
1861void glwVertexAttribI3iv (GLuint index, const GLint* v)
1862{
1863	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1864	if (!gl)
1865		 return;
1866	gl->vertexAttribI3iv(index, v);
1867}
1868
1869void glwVertexAttribI4iv (GLuint index, const GLint* v)
1870{
1871	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1872	if (!gl)
1873		 return;
1874	gl->vertexAttribI4iv(index, v);
1875}
1876
1877void glwVertexAttribI1uiv (GLuint index, const GLuint* v)
1878{
1879	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1880	if (!gl)
1881		 return;
1882	gl->vertexAttribI1uiv(index, v);
1883}
1884
1885void glwVertexAttribI2uiv (GLuint index, const GLuint* v)
1886{
1887	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1888	if (!gl)
1889		 return;
1890	gl->vertexAttribI2uiv(index, v);
1891}
1892
1893void glwVertexAttribI3uiv (GLuint index, const GLuint* v)
1894{
1895	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1896	if (!gl)
1897		 return;
1898	gl->vertexAttribI3uiv(index, v);
1899}
1900
1901void glwVertexAttribI4uiv (GLuint index, const GLuint* v)
1902{
1903	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1904	if (!gl)
1905		 return;
1906	gl->vertexAttribI4uiv(index, v);
1907}
1908
1909void glwVertexAttribI4bv (GLuint index, const GLbyte* v)
1910{
1911	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1912	if (!gl)
1913		 return;
1914	gl->vertexAttribI4bv(index, v);
1915}
1916
1917void glwVertexAttribI4sv (GLuint index, const GLshort* v)
1918{
1919	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1920	if (!gl)
1921		 return;
1922	gl->vertexAttribI4sv(index, v);
1923}
1924
1925void glwVertexAttribI4ubv (GLuint index, const GLubyte* v)
1926{
1927	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1928	if (!gl)
1929		 return;
1930	gl->vertexAttribI4ubv(index, v);
1931}
1932
1933void glwVertexAttribI4usv (GLuint index, const GLushort* v)
1934{
1935	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1936	if (!gl)
1937		 return;
1938	gl->vertexAttribI4usv(index, v);
1939}
1940
1941void glwGetUniformuiv (GLuint program, GLint location, GLuint* params)
1942{
1943	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1944	if (!gl)
1945		 return;
1946	gl->getUniformuiv(program, location, params);
1947}
1948
1949void glwBindFragDataLocation (GLuint program, GLuint color, const GLchar* name)
1950{
1951	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1952	if (!gl)
1953		 return;
1954	gl->bindFragDataLocation(program, color, name);
1955}
1956
1957GLint glwGetFragDataLocation (GLuint program, const GLchar* name)
1958{
1959	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1960	if (!gl)
1961		 return (GLint)0;
1962	return gl->getFragDataLocation(program, name);
1963}
1964
1965void glwUniform1ui (GLint location, GLuint v0)
1966{
1967	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1968	if (!gl)
1969		 return;
1970	gl->uniform1ui(location, v0);
1971}
1972
1973void glwUniform2ui (GLint location, GLuint v0, GLuint v1)
1974{
1975	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1976	if (!gl)
1977		 return;
1978	gl->uniform2ui(location, v0, v1);
1979}
1980
1981void glwUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2)
1982{
1983	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1984	if (!gl)
1985		 return;
1986	gl->uniform3ui(location, v0, v1, v2);
1987}
1988
1989void glwUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1990{
1991	const glw::Functions* gl = glw::getCurrentThreadFunctions();
1992	if (!gl)
1993		 return;
1994	gl->uniform4ui(location, v0, v1, v2, v3);
1995}
1996
1997void glwUniform1uiv (GLint location, GLsizei count, const GLuint* value)
1998{
1999	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2000	if (!gl)
2001		 return;
2002	gl->uniform1uiv(location, count, value);
2003}
2004
2005void glwUniform2uiv (GLint location, GLsizei count, const GLuint* value)
2006{
2007	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2008	if (!gl)
2009		 return;
2010	gl->uniform2uiv(location, count, value);
2011}
2012
2013void glwUniform3uiv (GLint location, GLsizei count, const GLuint* value)
2014{
2015	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2016	if (!gl)
2017		 return;
2018	gl->uniform3uiv(location, count, value);
2019}
2020
2021void glwUniform4uiv (GLint location, GLsizei count, const GLuint* value)
2022{
2023	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2024	if (!gl)
2025		 return;
2026	gl->uniform4uiv(location, count, value);
2027}
2028
2029void glwTexParameterIiv (GLenum target, GLenum pname, const GLint* params)
2030{
2031	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2032	if (!gl)
2033		 return;
2034	gl->texParameterIiv(target, pname, params);
2035}
2036
2037void glwTexParameterIuiv (GLenum target, GLenum pname, const GLuint* params)
2038{
2039	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2040	if (!gl)
2041		 return;
2042	gl->texParameterIuiv(target, pname, params);
2043}
2044
2045void glwGetTexParameterIiv (GLenum target, GLenum pname, GLint* params)
2046{
2047	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2048	if (!gl)
2049		 return;
2050	gl->getTexParameterIiv(target, pname, params);
2051}
2052
2053void glwGetTexParameterIuiv (GLenum target, GLenum pname, GLuint* params)
2054{
2055	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2056	if (!gl)
2057		 return;
2058	gl->getTexParameterIuiv(target, pname, params);
2059}
2060
2061void glwClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint* value)
2062{
2063	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2064	if (!gl)
2065		 return;
2066	gl->clearBufferiv(buffer, drawbuffer, value);
2067}
2068
2069void glwClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint* value)
2070{
2071	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2072	if (!gl)
2073		 return;
2074	gl->clearBufferuiv(buffer, drawbuffer, value);
2075}
2076
2077void glwClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat* value)
2078{
2079	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2080	if (!gl)
2081		 return;
2082	gl->clearBufferfv(buffer, drawbuffer, value);
2083}
2084
2085void glwClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
2086{
2087	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2088	if (!gl)
2089		 return;
2090	gl->clearBufferfi(buffer, drawbuffer, depth, stencil);
2091}
2092
2093const GLubyte* glwGetStringi (GLenum name, GLuint index)
2094{
2095	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2096	if (!gl)
2097		 return (const GLubyte*)0;
2098	return gl->getStringi(name, index);
2099}
2100
2101GLboolean glwIsRenderbuffer (GLuint renderbuffer)
2102{
2103	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2104	if (!gl)
2105		 return (GLboolean)0;
2106	return gl->isRenderbuffer(renderbuffer);
2107}
2108
2109void glwBindRenderbuffer (GLenum target, GLuint renderbuffer)
2110{
2111	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2112	if (!gl)
2113		 return;
2114	gl->bindRenderbuffer(target, renderbuffer);
2115}
2116
2117void glwDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers)
2118{
2119	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2120	if (!gl)
2121		 return;
2122	gl->deleteRenderbuffers(n, renderbuffers);
2123}
2124
2125void glwGenRenderbuffers (GLsizei n, GLuint* renderbuffers)
2126{
2127	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2128	if (!gl)
2129		 return;
2130	gl->genRenderbuffers(n, renderbuffers);
2131}
2132
2133void glwRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
2134{
2135	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2136	if (!gl)
2137		 return;
2138	gl->renderbufferStorage(target, internalformat, width, height);
2139}
2140
2141void glwGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params)
2142{
2143	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2144	if (!gl)
2145		 return;
2146	gl->getRenderbufferParameteriv(target, pname, params);
2147}
2148
2149GLboolean glwIsFramebuffer (GLuint framebuffer)
2150{
2151	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2152	if (!gl)
2153		 return (GLboolean)0;
2154	return gl->isFramebuffer(framebuffer);
2155}
2156
2157void glwBindFramebuffer (GLenum target, GLuint framebuffer)
2158{
2159	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2160	if (!gl)
2161		 return;
2162	gl->bindFramebuffer(target, framebuffer);
2163}
2164
2165void glwDeleteFramebuffers (GLsizei n, const GLuint* framebuffers)
2166{
2167	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2168	if (!gl)
2169		 return;
2170	gl->deleteFramebuffers(n, framebuffers);
2171}
2172
2173void glwGenFramebuffers (GLsizei n, GLuint* framebuffers)
2174{
2175	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2176	if (!gl)
2177		 return;
2178	gl->genFramebuffers(n, framebuffers);
2179}
2180
2181GLenum glwCheckFramebufferStatus (GLenum target)
2182{
2183	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2184	if (!gl)
2185		 return (GLenum)0;
2186	return gl->checkFramebufferStatus(target);
2187}
2188
2189void glwFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
2190{
2191	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2192	if (!gl)
2193		 return;
2194	gl->framebufferTexture1D(target, attachment, textarget, texture, level);
2195}
2196
2197void glwFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
2198{
2199	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2200	if (!gl)
2201		 return;
2202	gl->framebufferTexture2D(target, attachment, textarget, texture, level);
2203}
2204
2205void glwFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
2206{
2207	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2208	if (!gl)
2209		 return;
2210	gl->framebufferTexture3D(target, attachment, textarget, texture, level, zoffset);
2211}
2212
2213void glwFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
2214{
2215	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2216	if (!gl)
2217		 return;
2218	gl->framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
2219}
2220
2221void glwGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params)
2222{
2223	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2224	if (!gl)
2225		 return;
2226	gl->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
2227}
2228
2229void glwGenerateMipmap (GLenum target)
2230{
2231	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2232	if (!gl)
2233		 return;
2234	gl->generateMipmap(target);
2235}
2236
2237void glwBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
2238{
2239	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2240	if (!gl)
2241		 return;
2242	gl->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
2243}
2244
2245void glwRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
2246{
2247	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2248	if (!gl)
2249		 return;
2250	gl->renderbufferStorageMultisample(target, samples, internalformat, width, height);
2251}
2252
2253void glwFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
2254{
2255	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2256	if (!gl)
2257		 return;
2258	gl->framebufferTextureLayer(target, attachment, texture, level, layer);
2259}
2260
2261GLvoid* glwMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
2262{
2263	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2264	if (!gl)
2265		 return (GLvoid*)0;
2266	return gl->mapBufferRange(target, offset, length, access);
2267}
2268
2269void glwFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length)
2270{
2271	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2272	if (!gl)
2273		 return;
2274	gl->flushMappedBufferRange(target, offset, length);
2275}
2276
2277void glwBindVertexArray (GLuint array)
2278{
2279	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2280	if (!gl)
2281		 return;
2282	gl->bindVertexArray(array);
2283}
2284
2285void glwDeleteVertexArrays (GLsizei n, const GLuint* arrays)
2286{
2287	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2288	if (!gl)
2289		 return;
2290	gl->deleteVertexArrays(n, arrays);
2291}
2292
2293void glwGenVertexArrays (GLsizei n, GLuint* arrays)
2294{
2295	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2296	if (!gl)
2297		 return;
2298	gl->genVertexArrays(n, arrays);
2299}
2300
2301GLboolean glwIsVertexArray (GLuint array)
2302{
2303	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2304	if (!gl)
2305		 return (GLboolean)0;
2306	return gl->isVertexArray(array);
2307}
2308
2309void glwTexBuffer (GLenum target, GLenum internalformat, GLuint buffer)
2310{
2311	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2312	if (!gl)
2313		 return;
2314	gl->texBuffer(target, internalformat, buffer);
2315}
2316
2317void glwPrimitiveRestartIndex (GLuint index)
2318{
2319	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2320	if (!gl)
2321		 return;
2322	gl->primitiveRestartIndex(index);
2323}
2324
2325void glwCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
2326{
2327	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2328	if (!gl)
2329		 return;
2330	gl->copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
2331}
2332
2333void glwDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
2334{
2335	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2336	if (!gl)
2337		 return;
2338	gl->drawArraysInstanced(mode, first, count, instancecount);
2339}
2340
2341void glwDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instancecount)
2342{
2343	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2344	if (!gl)
2345		 return;
2346	gl->drawElementsInstanced(mode, count, type, indices, instancecount);
2347}
2348
2349void glwGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
2350{
2351	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2352	if (!gl)
2353		 return;
2354	gl->getUniformIndices(program, uniformCount, uniformNames, uniformIndices);
2355}
2356
2357void glwGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
2358{
2359	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2360	if (!gl)
2361		 return;
2362	gl->getActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
2363}
2364
2365void glwGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName)
2366{
2367	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2368	if (!gl)
2369		 return;
2370	gl->getActiveUniformName(program, uniformIndex, bufSize, length, uniformName);
2371}
2372
2373GLuint glwGetUniformBlockIndex (GLuint program, const GLchar* uniformBlockName)
2374{
2375	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2376	if (!gl)
2377		 return (GLuint)0;
2378	return gl->getUniformBlockIndex(program, uniformBlockName);
2379}
2380
2381void glwGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
2382{
2383	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2384	if (!gl)
2385		 return;
2386	gl->getActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
2387}
2388
2389void glwGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
2390{
2391	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2392	if (!gl)
2393		 return;
2394	gl->getActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
2395}
2396
2397void glwUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
2398{
2399	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2400	if (!gl)
2401		 return;
2402	gl->uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
2403}
2404
2405void glwGetInteger64i_v (GLenum target, GLuint index, GLint64* data)
2406{
2407	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2408	if (!gl)
2409		 return;
2410	gl->getInteger64i_v(target, index, data);
2411}
2412
2413void glwGetBufferParameteri64v (GLenum target, GLenum pname, GLint64* params)
2414{
2415	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2416	if (!gl)
2417		 return;
2418	gl->getBufferParameteri64v(target, pname, params);
2419}
2420
2421void glwFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level)
2422{
2423	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2424	if (!gl)
2425		 return;
2426	gl->framebufferTexture(target, attachment, texture, level);
2427}
2428
2429void glwDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLint basevertex)
2430{
2431	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2432	if (!gl)
2433		 return;
2434	gl->drawElementsBaseVertex(mode, count, type, indices, basevertex);
2435}
2436
2437void glwDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices, GLint basevertex)
2438{
2439	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2440	if (!gl)
2441		 return;
2442	gl->drawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
2443}
2444
2445void glwDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instancecount, GLint basevertex)
2446{
2447	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2448	if (!gl)
2449		 return;
2450	gl->drawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex);
2451}
2452
2453void glwMultiDrawElementsBaseVertex (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, GLsizei drawcount, const GLint* basevertex)
2454{
2455	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2456	if (!gl)
2457		 return;
2458	gl->multiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex);
2459}
2460
2461void glwProvokingVertex (GLenum mode)
2462{
2463	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2464	if (!gl)
2465		 return;
2466	gl->provokingVertex(mode);
2467}
2468
2469GLsync glwFenceSync (GLenum condition, GLbitfield flags)
2470{
2471	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2472	if (!gl)
2473		 return (GLsync)0;
2474	return gl->fenceSync(condition, flags);
2475}
2476
2477GLboolean glwIsSync (GLsync sync)
2478{
2479	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2480	if (!gl)
2481		 return (GLboolean)0;
2482	return gl->isSync(sync);
2483}
2484
2485void glwDeleteSync (GLsync sync)
2486{
2487	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2488	if (!gl)
2489		 return;
2490	gl->deleteSync(sync);
2491}
2492
2493GLenum glwClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout)
2494{
2495	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2496	if (!gl)
2497		 return (GLenum)0;
2498	return gl->clientWaitSync(sync, flags, timeout);
2499}
2500
2501void glwWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout)
2502{
2503	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2504	if (!gl)
2505		 return;
2506	gl->waitSync(sync, flags, timeout);
2507}
2508
2509void glwGetInteger64v (GLenum pname, GLint64* params)
2510{
2511	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2512	if (!gl)
2513		 return;
2514	gl->getInteger64v(pname, params);
2515}
2516
2517void glwGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
2518{
2519	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2520	if (!gl)
2521		 return;
2522	gl->getSynciv(sync, pname, bufSize, length, values);
2523}
2524
2525void glwTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
2526{
2527	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2528	if (!gl)
2529		 return;
2530	gl->texImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
2531}
2532
2533void glwTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
2534{
2535	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2536	if (!gl)
2537		 return;
2538	gl->texImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
2539}
2540
2541void glwGetMultisamplefv (GLenum pname, GLuint index, GLfloat* val)
2542{
2543	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2544	if (!gl)
2545		 return;
2546	gl->getMultisamplefv(pname, index, val);
2547}
2548
2549void glwSampleMaski (GLuint index, GLbitfield mask)
2550{
2551	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2552	if (!gl)
2553		 return;
2554	gl->sampleMaski(index, mask);
2555}
2556
2557void glwVertexAttribDivisor (GLuint index, GLuint divisor)
2558{
2559	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2560	if (!gl)
2561		 return;
2562	gl->vertexAttribDivisor(index, divisor);
2563}
2564
2565void glwBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar* name)
2566{
2567	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2568	if (!gl)
2569		 return;
2570	gl->bindFragDataLocationIndexed(program, colorNumber, index, name);
2571}
2572
2573GLint glwGetFragDataIndex (GLuint program, const GLchar* name)
2574{
2575	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2576	if (!gl)
2577		 return (GLint)0;
2578	return gl->getFragDataIndex(program, name);
2579}
2580
2581void glwGenSamplers (GLsizei count, GLuint* samplers)
2582{
2583	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2584	if (!gl)
2585		 return;
2586	gl->genSamplers(count, samplers);
2587}
2588
2589void glwDeleteSamplers (GLsizei count, const GLuint* samplers)
2590{
2591	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2592	if (!gl)
2593		 return;
2594	gl->deleteSamplers(count, samplers);
2595}
2596
2597GLboolean glwIsSampler (GLuint sampler)
2598{
2599	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2600	if (!gl)
2601		 return (GLboolean)0;
2602	return gl->isSampler(sampler);
2603}
2604
2605void glwBindSampler (GLuint unit, GLuint sampler)
2606{
2607	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2608	if (!gl)
2609		 return;
2610	gl->bindSampler(unit, sampler);
2611}
2612
2613void glwSamplerParameteri (GLuint sampler, GLenum pname, GLint param)
2614{
2615	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2616	if (!gl)
2617		 return;
2618	gl->samplerParameteri(sampler, pname, param);
2619}
2620
2621void glwSamplerParameteriv (GLuint sampler, GLenum pname, const GLint* param)
2622{
2623	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2624	if (!gl)
2625		 return;
2626	gl->samplerParameteriv(sampler, pname, param);
2627}
2628
2629void glwSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param)
2630{
2631	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2632	if (!gl)
2633		 return;
2634	gl->samplerParameterf(sampler, pname, param);
2635}
2636
2637void glwSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat* param)
2638{
2639	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2640	if (!gl)
2641		 return;
2642	gl->samplerParameterfv(sampler, pname, param);
2643}
2644
2645void glwSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint* param)
2646{
2647	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2648	if (!gl)
2649		 return;
2650	gl->samplerParameterIiv(sampler, pname, param);
2651}
2652
2653void glwSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint* param)
2654{
2655	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2656	if (!gl)
2657		 return;
2658	gl->samplerParameterIuiv(sampler, pname, param);
2659}
2660
2661void glwGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint* params)
2662{
2663	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2664	if (!gl)
2665		 return;
2666	gl->getSamplerParameteriv(sampler, pname, params);
2667}
2668
2669void glwGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint* params)
2670{
2671	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2672	if (!gl)
2673		 return;
2674	gl->getSamplerParameterIiv(sampler, pname, params);
2675}
2676
2677void glwGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat* params)
2678{
2679	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2680	if (!gl)
2681		 return;
2682	gl->getSamplerParameterfv(sampler, pname, params);
2683}
2684
2685void glwGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint* params)
2686{
2687	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2688	if (!gl)
2689		 return;
2690	gl->getSamplerParameterIuiv(sampler, pname, params);
2691}
2692
2693void glwQueryCounter (GLuint id, GLenum target)
2694{
2695	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2696	if (!gl)
2697		 return;
2698	gl->queryCounter(id, target);
2699}
2700
2701void glwGetQueryObjecti64v (GLuint id, GLenum pname, GLint64* params)
2702{
2703	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2704	if (!gl)
2705		 return;
2706	gl->getQueryObjecti64v(id, pname, params);
2707}
2708
2709void glwGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64* params)
2710{
2711	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2712	if (!gl)
2713		 return;
2714	gl->getQueryObjectui64v(id, pname, params);
2715}
2716
2717void glwVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
2718{
2719	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2720	if (!gl)
2721		 return;
2722	gl->vertexAttribP1ui(index, type, normalized, value);
2723}
2724
2725void glwVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value)
2726{
2727	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2728	if (!gl)
2729		 return;
2730	gl->vertexAttribP1uiv(index, type, normalized, value);
2731}
2732
2733void glwVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
2734{
2735	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2736	if (!gl)
2737		 return;
2738	gl->vertexAttribP2ui(index, type, normalized, value);
2739}
2740
2741void glwVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value)
2742{
2743	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2744	if (!gl)
2745		 return;
2746	gl->vertexAttribP2uiv(index, type, normalized, value);
2747}
2748
2749void glwVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
2750{
2751	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2752	if (!gl)
2753		 return;
2754	gl->vertexAttribP3ui(index, type, normalized, value);
2755}
2756
2757void glwVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value)
2758{
2759	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2760	if (!gl)
2761		 return;
2762	gl->vertexAttribP3uiv(index, type, normalized, value);
2763}
2764
2765void glwVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value)
2766{
2767	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2768	if (!gl)
2769		 return;
2770	gl->vertexAttribP4ui(index, type, normalized, value);
2771}
2772
2773void glwVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value)
2774{
2775	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2776	if (!gl)
2777		 return;
2778	gl->vertexAttribP4uiv(index, type, normalized, value);
2779}
2780
2781void glwBlendEquationi (GLuint buf, GLenum mode)
2782{
2783	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2784	if (!gl)
2785		 return;
2786	gl->blendEquationi(buf, mode);
2787}
2788
2789void glwBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha)
2790{
2791	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2792	if (!gl)
2793		 return;
2794	gl->blendEquationSeparatei(buf, modeRGB, modeAlpha);
2795}
2796
2797void glwBlendFunci (GLuint buf, GLenum src, GLenum dst)
2798{
2799	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2800	if (!gl)
2801		 return;
2802	gl->blendFunci(buf, src, dst);
2803}
2804
2805void glwBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
2806{
2807	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2808	if (!gl)
2809		 return;
2810	gl->blendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
2811}
2812
2813void glwDrawArraysIndirect (GLenum mode, const GLvoid* indirect)
2814{
2815	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2816	if (!gl)
2817		 return;
2818	gl->drawArraysIndirect(mode, indirect);
2819}
2820
2821void glwDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid* indirect)
2822{
2823	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2824	if (!gl)
2825		 return;
2826	gl->drawElementsIndirect(mode, type, indirect);
2827}
2828
2829void glwUniform1d (GLint location, GLdouble x)
2830{
2831	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2832	if (!gl)
2833		 return;
2834	gl->uniform1d(location, x);
2835}
2836
2837void glwUniform2d (GLint location, GLdouble x, GLdouble y)
2838{
2839	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2840	if (!gl)
2841		 return;
2842	gl->uniform2d(location, x, y);
2843}
2844
2845void glwUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z)
2846{
2847	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2848	if (!gl)
2849		 return;
2850	gl->uniform3d(location, x, y, z);
2851}
2852
2853void glwUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
2854{
2855	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2856	if (!gl)
2857		 return;
2858	gl->uniform4d(location, x, y, z, w);
2859}
2860
2861void glwUniform1dv (GLint location, GLsizei count, const GLdouble* value)
2862{
2863	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2864	if (!gl)
2865		 return;
2866	gl->uniform1dv(location, count, value);
2867}
2868
2869void glwUniform2dv (GLint location, GLsizei count, const GLdouble* value)
2870{
2871	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2872	if (!gl)
2873		 return;
2874	gl->uniform2dv(location, count, value);
2875}
2876
2877void glwUniform3dv (GLint location, GLsizei count, const GLdouble* value)
2878{
2879	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2880	if (!gl)
2881		 return;
2882	gl->uniform3dv(location, count, value);
2883}
2884
2885void glwUniform4dv (GLint location, GLsizei count, const GLdouble* value)
2886{
2887	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2888	if (!gl)
2889		 return;
2890	gl->uniform4dv(location, count, value);
2891}
2892
2893void glwUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2894{
2895	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2896	if (!gl)
2897		 return;
2898	gl->uniformMatrix2dv(location, count, transpose, value);
2899}
2900
2901void glwUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2902{
2903	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2904	if (!gl)
2905		 return;
2906	gl->uniformMatrix3dv(location, count, transpose, value);
2907}
2908
2909void glwUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2910{
2911	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2912	if (!gl)
2913		 return;
2914	gl->uniformMatrix4dv(location, count, transpose, value);
2915}
2916
2917void glwUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2918{
2919	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2920	if (!gl)
2921		 return;
2922	gl->uniformMatrix2x3dv(location, count, transpose, value);
2923}
2924
2925void glwUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2926{
2927	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2928	if (!gl)
2929		 return;
2930	gl->uniformMatrix2x4dv(location, count, transpose, value);
2931}
2932
2933void glwUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2934{
2935	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2936	if (!gl)
2937		 return;
2938	gl->uniformMatrix3x2dv(location, count, transpose, value);
2939}
2940
2941void glwUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2942{
2943	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2944	if (!gl)
2945		 return;
2946	gl->uniformMatrix3x4dv(location, count, transpose, value);
2947}
2948
2949void glwUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2950{
2951	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2952	if (!gl)
2953		 return;
2954	gl->uniformMatrix4x2dv(location, count, transpose, value);
2955}
2956
2957void glwUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
2958{
2959	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2960	if (!gl)
2961		 return;
2962	gl->uniformMatrix4x3dv(location, count, transpose, value);
2963}
2964
2965void glwGetUniformdv (GLuint program, GLint location, GLdouble* params)
2966{
2967	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2968	if (!gl)
2969		 return;
2970	gl->getUniformdv(program, location, params);
2971}
2972
2973void glwMinSampleShading (GLfloat value)
2974{
2975	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2976	if (!gl)
2977		 return;
2978	gl->minSampleShading(value);
2979}
2980
2981GLint glwGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar* name)
2982{
2983	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2984	if (!gl)
2985		 return (GLint)0;
2986	return gl->getSubroutineUniformLocation(program, shadertype, name);
2987}
2988
2989GLuint glwGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar* name)
2990{
2991	const glw::Functions* gl = glw::getCurrentThreadFunctions();
2992	if (!gl)
2993		 return (GLuint)0;
2994	return gl->getSubroutineIndex(program, shadertype, name);
2995}
2996
2997void glwGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values)
2998{
2999	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3000	if (!gl)
3001		 return;
3002	gl->getActiveSubroutineUniformiv(program, shadertype, index, pname, values);
3003}
3004
3005void glwGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar* name)
3006{
3007	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3008	if (!gl)
3009		 return;
3010	gl->getActiveSubroutineUniformName(program, shadertype, index, bufsize, length, name);
3011}
3012
3013void glwGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar* name)
3014{
3015	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3016	if (!gl)
3017		 return;
3018	gl->getActiveSubroutineName(program, shadertype, index, bufsize, length, name);
3019}
3020
3021void glwUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint* indices)
3022{
3023	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3024	if (!gl)
3025		 return;
3026	gl->uniformSubroutinesuiv(shadertype, count, indices);
3027}
3028
3029void glwGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint* params)
3030{
3031	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3032	if (!gl)
3033		 return;
3034	gl->getUniformSubroutineuiv(shadertype, location, params);
3035}
3036
3037void glwGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint* values)
3038{
3039	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3040	if (!gl)
3041		 return;
3042	gl->getProgramStageiv(program, shadertype, pname, values);
3043}
3044
3045void glwPatchParameteri (GLenum pname, GLint value)
3046{
3047	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3048	if (!gl)
3049		 return;
3050	gl->patchParameteri(pname, value);
3051}
3052
3053void glwPatchParameterfv (GLenum pname, const GLfloat* values)
3054{
3055	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3056	if (!gl)
3057		 return;
3058	gl->patchParameterfv(pname, values);
3059}
3060
3061void glwBindTransformFeedback (GLenum target, GLuint id)
3062{
3063	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3064	if (!gl)
3065		 return;
3066	gl->bindTransformFeedback(target, id);
3067}
3068
3069void glwDeleteTransformFeedbacks (GLsizei n, const GLuint* ids)
3070{
3071	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3072	if (!gl)
3073		 return;
3074	gl->deleteTransformFeedbacks(n, ids);
3075}
3076
3077void glwGenTransformFeedbacks (GLsizei n, GLuint* ids)
3078{
3079	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3080	if (!gl)
3081		 return;
3082	gl->genTransformFeedbacks(n, ids);
3083}
3084
3085GLboolean glwIsTransformFeedback (GLuint id)
3086{
3087	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3088	if (!gl)
3089		 return (GLboolean)0;
3090	return gl->isTransformFeedback(id);
3091}
3092
3093void glwPauseTransformFeedback ()
3094{
3095	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3096	if (!gl)
3097		 return;
3098	gl->pauseTransformFeedback();
3099}
3100
3101void glwResumeTransformFeedback ()
3102{
3103	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3104	if (!gl)
3105		 return;
3106	gl->resumeTransformFeedback();
3107}
3108
3109void glwDrawTransformFeedback (GLenum mode, GLuint id)
3110{
3111	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3112	if (!gl)
3113		 return;
3114	gl->drawTransformFeedback(mode, id);
3115}
3116
3117void glwDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream)
3118{
3119	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3120	if (!gl)
3121		 return;
3122	gl->drawTransformFeedbackStream(mode, id, stream);
3123}
3124
3125void glwBeginQueryIndexed (GLenum target, GLuint index, GLuint id)
3126{
3127	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3128	if (!gl)
3129		 return;
3130	gl->beginQueryIndexed(target, index, id);
3131}
3132
3133void glwEndQueryIndexed (GLenum target, GLuint index)
3134{
3135	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3136	if (!gl)
3137		 return;
3138	gl->endQueryIndexed(target, index);
3139}
3140
3141void glwGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint* params)
3142{
3143	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3144	if (!gl)
3145		 return;
3146	gl->getQueryIndexediv(target, index, pname, params);
3147}
3148
3149void glwReleaseShaderCompiler ()
3150{
3151	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3152	if (!gl)
3153		 return;
3154	gl->releaseShaderCompiler();
3155}
3156
3157void glwShaderBinary (GLsizei count, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
3158{
3159	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3160	if (!gl)
3161		 return;
3162	gl->shaderBinary(count, shaders, binaryformat, binary, length);
3163}
3164
3165void glwGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
3166{
3167	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3168	if (!gl)
3169		 return;
3170	gl->getShaderPrecisionFormat(shadertype, precisiontype, range, precision);
3171}
3172
3173void glwDepthRangef (GLfloat n, GLfloat f)
3174{
3175	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3176	if (!gl)
3177		 return;
3178	gl->depthRangef(n, f);
3179}
3180
3181void glwClearDepthf (GLfloat d)
3182{
3183	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3184	if (!gl)
3185		 return;
3186	gl->clearDepthf(d);
3187}
3188
3189void glwGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
3190{
3191	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3192	if (!gl)
3193		 return;
3194	gl->getProgramBinary(program, bufSize, length, binaryFormat, binary);
3195}
3196
3197void glwProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
3198{
3199	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3200	if (!gl)
3201		 return;
3202	gl->programBinary(program, binaryFormat, binary, length);
3203}
3204
3205void glwProgramParameteri (GLuint program, GLenum pname, GLint value)
3206{
3207	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3208	if (!gl)
3209		 return;
3210	gl->programParameteri(program, pname, value);
3211}
3212
3213void glwUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program)
3214{
3215	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3216	if (!gl)
3217		 return;
3218	gl->useProgramStages(pipeline, stages, program);
3219}
3220
3221void glwActiveShaderProgram (GLuint pipeline, GLuint program)
3222{
3223	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3224	if (!gl)
3225		 return;
3226	gl->activeShaderProgram(pipeline, program);
3227}
3228
3229GLuint glwCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* const* strings)
3230{
3231	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3232	if (!gl)
3233		 return (GLuint)0;
3234	return gl->createShaderProgramv(type, count, strings);
3235}
3236
3237void glwBindProgramPipeline (GLuint pipeline)
3238{
3239	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3240	if (!gl)
3241		 return;
3242	gl->bindProgramPipeline(pipeline);
3243}
3244
3245void glwDeleteProgramPipelines (GLsizei n, const GLuint* pipelines)
3246{
3247	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3248	if (!gl)
3249		 return;
3250	gl->deleteProgramPipelines(n, pipelines);
3251}
3252
3253void glwGenProgramPipelines (GLsizei n, GLuint* pipelines)
3254{
3255	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3256	if (!gl)
3257		 return;
3258	gl->genProgramPipelines(n, pipelines);
3259}
3260
3261GLboolean glwIsProgramPipeline (GLuint pipeline)
3262{
3263	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3264	if (!gl)
3265		 return (GLboolean)0;
3266	return gl->isProgramPipeline(pipeline);
3267}
3268
3269void glwGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint* params)
3270{
3271	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3272	if (!gl)
3273		 return;
3274	gl->getProgramPipelineiv(pipeline, pname, params);
3275}
3276
3277void glwProgramUniform1i (GLuint program, GLint location, GLint v0)
3278{
3279	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3280	if (!gl)
3281		 return;
3282	gl->programUniform1i(program, location, v0);
3283}
3284
3285void glwProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint* value)
3286{
3287	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3288	if (!gl)
3289		 return;
3290	gl->programUniform1iv(program, location, count, value);
3291}
3292
3293void glwProgramUniform1f (GLuint program, GLint location, GLfloat v0)
3294{
3295	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3296	if (!gl)
3297		 return;
3298	gl->programUniform1f(program, location, v0);
3299}
3300
3301void glwProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat* value)
3302{
3303	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3304	if (!gl)
3305		 return;
3306	gl->programUniform1fv(program, location, count, value);
3307}
3308
3309void glwProgramUniform1d (GLuint program, GLint location, GLdouble v0)
3310{
3311	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3312	if (!gl)
3313		 return;
3314	gl->programUniform1d(program, location, v0);
3315}
3316
3317void glwProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble* value)
3318{
3319	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3320	if (!gl)
3321		 return;
3322	gl->programUniform1dv(program, location, count, value);
3323}
3324
3325void glwProgramUniform1ui (GLuint program, GLint location, GLuint v0)
3326{
3327	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3328	if (!gl)
3329		 return;
3330	gl->programUniform1ui(program, location, v0);
3331}
3332
3333void glwProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint* value)
3334{
3335	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3336	if (!gl)
3337		 return;
3338	gl->programUniform1uiv(program, location, count, value);
3339}
3340
3341void glwProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1)
3342{
3343	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3344	if (!gl)
3345		 return;
3346	gl->programUniform2i(program, location, v0, v1);
3347}
3348
3349void glwProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint* value)
3350{
3351	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3352	if (!gl)
3353		 return;
3354	gl->programUniform2iv(program, location, count, value);
3355}
3356
3357void glwProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1)
3358{
3359	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3360	if (!gl)
3361		 return;
3362	gl->programUniform2f(program, location, v0, v1);
3363}
3364
3365void glwProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat* value)
3366{
3367	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3368	if (!gl)
3369		 return;
3370	gl->programUniform2fv(program, location, count, value);
3371}
3372
3373void glwProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1)
3374{
3375	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3376	if (!gl)
3377		 return;
3378	gl->programUniform2d(program, location, v0, v1);
3379}
3380
3381void glwProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble* value)
3382{
3383	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3384	if (!gl)
3385		 return;
3386	gl->programUniform2dv(program, location, count, value);
3387}
3388
3389void glwProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1)
3390{
3391	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3392	if (!gl)
3393		 return;
3394	gl->programUniform2ui(program, location, v0, v1);
3395}
3396
3397void glwProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint* value)
3398{
3399	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3400	if (!gl)
3401		 return;
3402	gl->programUniform2uiv(program, location, count, value);
3403}
3404
3405void glwProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
3406{
3407	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3408	if (!gl)
3409		 return;
3410	gl->programUniform3i(program, location, v0, v1, v2);
3411}
3412
3413void glwProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint* value)
3414{
3415	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3416	if (!gl)
3417		 return;
3418	gl->programUniform3iv(program, location, count, value);
3419}
3420
3421void glwProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
3422{
3423	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3424	if (!gl)
3425		 return;
3426	gl->programUniform3f(program, location, v0, v1, v2);
3427}
3428
3429void glwProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat* value)
3430{
3431	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3432	if (!gl)
3433		 return;
3434	gl->programUniform3fv(program, location, count, value);
3435}
3436
3437void glwProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2)
3438{
3439	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3440	if (!gl)
3441		 return;
3442	gl->programUniform3d(program, location, v0, v1, v2);
3443}
3444
3445void glwProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble* value)
3446{
3447	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3448	if (!gl)
3449		 return;
3450	gl->programUniform3dv(program, location, count, value);
3451}
3452
3453void glwProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
3454{
3455	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3456	if (!gl)
3457		 return;
3458	gl->programUniform3ui(program, location, v0, v1, v2);
3459}
3460
3461void glwProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint* value)
3462{
3463	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3464	if (!gl)
3465		 return;
3466	gl->programUniform3uiv(program, location, count, value);
3467}
3468
3469void glwProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
3470{
3471	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3472	if (!gl)
3473		 return;
3474	gl->programUniform4i(program, location, v0, v1, v2, v3);
3475}
3476
3477void glwProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint* value)
3478{
3479	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3480	if (!gl)
3481		 return;
3482	gl->programUniform4iv(program, location, count, value);
3483}
3484
3485void glwProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
3486{
3487	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3488	if (!gl)
3489		 return;
3490	gl->programUniform4f(program, location, v0, v1, v2, v3);
3491}
3492
3493void glwProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat* value)
3494{
3495	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3496	if (!gl)
3497		 return;
3498	gl->programUniform4fv(program, location, count, value);
3499}
3500
3501void glwProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3)
3502{
3503	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3504	if (!gl)
3505		 return;
3506	gl->programUniform4d(program, location, v0, v1, v2, v3);
3507}
3508
3509void glwProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble* value)
3510{
3511	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3512	if (!gl)
3513		 return;
3514	gl->programUniform4dv(program, location, count, value);
3515}
3516
3517void glwProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
3518{
3519	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3520	if (!gl)
3521		 return;
3522	gl->programUniform4ui(program, location, v0, v1, v2, v3);
3523}
3524
3525void glwProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint* value)
3526{
3527	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3528	if (!gl)
3529		 return;
3530	gl->programUniform4uiv(program, location, count, value);
3531}
3532
3533void glwProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3534{
3535	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3536	if (!gl)
3537		 return;
3538	gl->programUniformMatrix2fv(program, location, count, transpose, value);
3539}
3540
3541void glwProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3542{
3543	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3544	if (!gl)
3545		 return;
3546	gl->programUniformMatrix3fv(program, location, count, transpose, value);
3547}
3548
3549void glwProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3550{
3551	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3552	if (!gl)
3553		 return;
3554	gl->programUniformMatrix4fv(program, location, count, transpose, value);
3555}
3556
3557void glwProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3558{
3559	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3560	if (!gl)
3561		 return;
3562	gl->programUniformMatrix2dv(program, location, count, transpose, value);
3563}
3564
3565void glwProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3566{
3567	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3568	if (!gl)
3569		 return;
3570	gl->programUniformMatrix3dv(program, location, count, transpose, value);
3571}
3572
3573void glwProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3574{
3575	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3576	if (!gl)
3577		 return;
3578	gl->programUniformMatrix4dv(program, location, count, transpose, value);
3579}
3580
3581void glwProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3582{
3583	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3584	if (!gl)
3585		 return;
3586	gl->programUniformMatrix2x3fv(program, location, count, transpose, value);
3587}
3588
3589void glwProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3590{
3591	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3592	if (!gl)
3593		 return;
3594	gl->programUniformMatrix3x2fv(program, location, count, transpose, value);
3595}
3596
3597void glwProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3598{
3599	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3600	if (!gl)
3601		 return;
3602	gl->programUniformMatrix2x4fv(program, location, count, transpose, value);
3603}
3604
3605void glwProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3606{
3607	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3608	if (!gl)
3609		 return;
3610	gl->programUniformMatrix4x2fv(program, location, count, transpose, value);
3611}
3612
3613void glwProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3614{
3615	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3616	if (!gl)
3617		 return;
3618	gl->programUniformMatrix3x4fv(program, location, count, transpose, value);
3619}
3620
3621void glwProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
3622{
3623	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3624	if (!gl)
3625		 return;
3626	gl->programUniformMatrix4x3fv(program, location, count, transpose, value);
3627}
3628
3629void glwProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3630{
3631	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3632	if (!gl)
3633		 return;
3634	gl->programUniformMatrix2x3dv(program, location, count, transpose, value);
3635}
3636
3637void glwProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3638{
3639	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3640	if (!gl)
3641		 return;
3642	gl->programUniformMatrix3x2dv(program, location, count, transpose, value);
3643}
3644
3645void glwProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3646{
3647	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3648	if (!gl)
3649		 return;
3650	gl->programUniformMatrix2x4dv(program, location, count, transpose, value);
3651}
3652
3653void glwProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3654{
3655	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3656	if (!gl)
3657		 return;
3658	gl->programUniformMatrix4x2dv(program, location, count, transpose, value);
3659}
3660
3661void glwProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3662{
3663	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3664	if (!gl)
3665		 return;
3666	gl->programUniformMatrix3x4dv(program, location, count, transpose, value);
3667}
3668
3669void glwProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value)
3670{
3671	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3672	if (!gl)
3673		 return;
3674	gl->programUniformMatrix4x3dv(program, location, count, transpose, value);
3675}
3676
3677void glwValidateProgramPipeline (GLuint pipeline)
3678{
3679	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3680	if (!gl)
3681		 return;
3682	gl->validateProgramPipeline(pipeline);
3683}
3684
3685void glwGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
3686{
3687	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3688	if (!gl)
3689		 return;
3690	gl->getProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
3691}
3692
3693void glwVertexAttribL1d (GLuint index, GLdouble x)
3694{
3695	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3696	if (!gl)
3697		 return;
3698	gl->vertexAttribL1d(index, x);
3699}
3700
3701void glwVertexAttribL2d (GLuint index, GLdouble x, GLdouble y)
3702{
3703	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3704	if (!gl)
3705		 return;
3706	gl->vertexAttribL2d(index, x, y);
3707}
3708
3709void glwVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z)
3710{
3711	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3712	if (!gl)
3713		 return;
3714	gl->vertexAttribL3d(index, x, y, z);
3715}
3716
3717void glwVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
3718{
3719	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3720	if (!gl)
3721		 return;
3722	gl->vertexAttribL4d(index, x, y, z, w);
3723}
3724
3725void glwVertexAttribL1dv (GLuint index, const GLdouble* v)
3726{
3727	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3728	if (!gl)
3729		 return;
3730	gl->vertexAttribL1dv(index, v);
3731}
3732
3733void glwVertexAttribL2dv (GLuint index, const GLdouble* v)
3734{
3735	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3736	if (!gl)
3737		 return;
3738	gl->vertexAttribL2dv(index, v);
3739}
3740
3741void glwVertexAttribL3dv (GLuint index, const GLdouble* v)
3742{
3743	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3744	if (!gl)
3745		 return;
3746	gl->vertexAttribL3dv(index, v);
3747}
3748
3749void glwVertexAttribL4dv (GLuint index, const GLdouble* v)
3750{
3751	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3752	if (!gl)
3753		 return;
3754	gl->vertexAttribL4dv(index, v);
3755}
3756
3757void glwVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
3758{
3759	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3760	if (!gl)
3761		 return;
3762	gl->vertexAttribLPointer(index, size, type, stride, pointer);
3763}
3764
3765void glwGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params)
3766{
3767	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3768	if (!gl)
3769		 return;
3770	gl->getVertexAttribLdv(index, pname, params);
3771}
3772
3773void glwViewportArrayv (GLuint first, GLsizei count, const GLfloat* v)
3774{
3775	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3776	if (!gl)
3777		 return;
3778	gl->viewportArrayv(first, count, v);
3779}
3780
3781void glwViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h)
3782{
3783	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3784	if (!gl)
3785		 return;
3786	gl->viewportIndexedf(index, x, y, w, h);
3787}
3788
3789void glwViewportIndexedfv (GLuint index, const GLfloat* v)
3790{
3791	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3792	if (!gl)
3793		 return;
3794	gl->viewportIndexedfv(index, v);
3795}
3796
3797void glwScissorArrayv (GLuint first, GLsizei count, const GLint* v)
3798{
3799	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3800	if (!gl)
3801		 return;
3802	gl->scissorArrayv(first, count, v);
3803}
3804
3805void glwScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height)
3806{
3807	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3808	if (!gl)
3809		 return;
3810	gl->scissorIndexed(index, left, bottom, width, height);
3811}
3812
3813void glwScissorIndexedv (GLuint index, const GLint* v)
3814{
3815	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3816	if (!gl)
3817		 return;
3818	gl->scissorIndexedv(index, v);
3819}
3820
3821void glwDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble* v)
3822{
3823	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3824	if (!gl)
3825		 return;
3826	gl->depthRangeArrayv(first, count, v);
3827}
3828
3829void glwDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f)
3830{
3831	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3832	if (!gl)
3833		 return;
3834	gl->depthRangeIndexed(index, n, f);
3835}
3836
3837void glwGetFloati_v (GLenum target, GLuint index, GLfloat* data)
3838{
3839	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3840	if (!gl)
3841		 return;
3842	gl->getFloati_v(target, index, data);
3843}
3844
3845void glwGetDoublei_v (GLenum target, GLuint index, GLdouble* data)
3846{
3847	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3848	if (!gl)
3849		 return;
3850	gl->getDoublei_v(target, index, data);
3851}
3852
3853void glwDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance)
3854{
3855	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3856	if (!gl)
3857		 return;
3858	gl->drawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance);
3859}
3860
3861void glwDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLuint baseinstance)
3862{
3863	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3864	if (!gl)
3865		 return;
3866	gl->drawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance);
3867}
3868
3869void glwDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance)
3870{
3871	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3872	if (!gl)
3873		 return;
3874	gl->drawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance);
3875}
3876
3877void glwDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount)
3878{
3879	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3880	if (!gl)
3881		 return;
3882	gl->drawTransformFeedbackInstanced(mode, id, instancecount);
3883}
3884
3885void glwDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount)
3886{
3887	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3888	if (!gl)
3889		 return;
3890	gl->drawTransformFeedbackStreamInstanced(mode, id, stream, instancecount);
3891}
3892
3893void glwGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
3894{
3895	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3896	if (!gl)
3897		 return;
3898	gl->getInternalformativ(target, internalformat, pname, bufSize, params);
3899}
3900
3901void glwGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint* params)
3902{
3903	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3904	if (!gl)
3905		 return;
3906	gl->getActiveAtomicCounterBufferiv(program, bufferIndex, pname, params);
3907}
3908
3909void glwBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
3910{
3911	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3912	if (!gl)
3913		 return;
3914	gl->bindImageTexture(unit, texture, level, layered, layer, access, format);
3915}
3916
3917void glwMemoryBarrier (GLbitfield barriers)
3918{
3919	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3920	if (!gl)
3921		 return;
3922	gl->memoryBarrier(barriers);
3923}
3924
3925void glwTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width)
3926{
3927	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3928	if (!gl)
3929		 return;
3930	gl->texStorage1D(target, levels, internalformat, width);
3931}
3932
3933void glwTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
3934{
3935	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3936	if (!gl)
3937		 return;
3938	gl->texStorage2D(target, levels, internalformat, width, height);
3939}
3940
3941void glwTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
3942{
3943	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3944	if (!gl)
3945		 return;
3946	gl->texStorage3D(target, levels, internalformat, width, height, depth);
3947}
3948
3949void glwClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void* data)
3950{
3951	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3952	if (!gl)
3953		 return;
3954	gl->clearBufferData(target, internalformat, format, type, data);
3955}
3956
3957void glwClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void* data)
3958{
3959	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3960	if (!gl)
3961		 return;
3962	gl->clearBufferSubData(target, internalformat, offset, size, format, type, data);
3963}
3964
3965void glwDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
3966{
3967	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3968	if (!gl)
3969		 return;
3970	gl->dispatchCompute(num_groups_x, num_groups_y, num_groups_z);
3971}
3972
3973void glwDispatchComputeIndirect (GLintptr indirect)
3974{
3975	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3976	if (!gl)
3977		 return;
3978	gl->dispatchComputeIndirect(indirect);
3979}
3980
3981void 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)
3982{
3983	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3984	if (!gl)
3985		 return;
3986	gl->copyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
3987}
3988
3989void glwDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled)
3990{
3991	const glw::Functions* gl = glw::getCurrentThreadFunctions();
3992	if (!gl)
3993		 return;
3994	gl->debugMessageControl(source, type, severity, count, ids, enabled);
3995}
3996
3997void glwDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf)
3998{
3999	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4000	if (!gl)
4001		 return;
4002	gl->debugMessageInsert(source, type, id, severity, length, buf);
4003}
4004
4005void glwDebugMessageCallback (GLDEBUGPROC callback, const void* userParam)
4006{
4007	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4008	if (!gl)
4009		 return;
4010	gl->debugMessageCallback(callback, userParam);
4011}
4012
4013GLuint glwGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog)
4014{
4015	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4016	if (!gl)
4017		 return (GLuint)0;
4018	return gl->getDebugMessageLog(count, bufsize, sources, types, ids, severities, lengths, messageLog);
4019}
4020
4021void glwPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar* message)
4022{
4023	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4024	if (!gl)
4025		 return;
4026	gl->pushDebugGroup(source, id, length, message);
4027}
4028
4029void glwPopDebugGroup ()
4030{
4031	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4032	if (!gl)
4033		 return;
4034	gl->popDebugGroup();
4035}
4036
4037void glwObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar* label)
4038{
4039	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4040	if (!gl)
4041		 return;
4042	gl->objectLabel(identifier, name, length, label);
4043}
4044
4045void glwGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label)
4046{
4047	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4048	if (!gl)
4049		 return;
4050	gl->getObjectLabel(identifier, name, bufSize, length, label);
4051}
4052
4053void glwObjectPtrLabel (const void* ptr, GLsizei length, const GLchar* label)
4054{
4055	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4056	if (!gl)
4057		 return;
4058	gl->objectPtrLabel(ptr, length, label);
4059}
4060
4061void glwGetObjectPtrLabel (const void* ptr, GLsizei bufSize, GLsizei* length, GLchar* label)
4062{
4063	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4064	if (!gl)
4065		 return;
4066	gl->getObjectPtrLabel(ptr, bufSize, length, label);
4067}
4068
4069void glwFramebufferParameteri (GLenum target, GLenum pname, GLint param)
4070{
4071	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4072	if (!gl)
4073		 return;
4074	gl->framebufferParameteri(target, pname, param);
4075}
4076
4077void glwGetFramebufferParameteriv (GLenum target, GLenum pname, GLint* params)
4078{
4079	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4080	if (!gl)
4081		 return;
4082	gl->getFramebufferParameteriv(target, pname, params);
4083}
4084
4085void glwGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params)
4086{
4087	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4088	if (!gl)
4089		 return;
4090	gl->getInternalformati64v(target, internalformat, pname, bufSize, params);
4091}
4092
4093void glwInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth)
4094{
4095	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4096	if (!gl)
4097		 return;
4098	gl->invalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth);
4099}
4100
4101void glwInvalidateTexImage (GLuint texture, GLint level)
4102{
4103	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4104	if (!gl)
4105		 return;
4106	gl->invalidateTexImage(texture, level);
4107}
4108
4109void glwInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length)
4110{
4111	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4112	if (!gl)
4113		 return;
4114	gl->invalidateBufferSubData(buffer, offset, length);
4115}
4116
4117void glwInvalidateBufferData (GLuint buffer)
4118{
4119	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4120	if (!gl)
4121		 return;
4122	gl->invalidateBufferData(buffer);
4123}
4124
4125void glwInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments)
4126{
4127	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4128	if (!gl)
4129		 return;
4130	gl->invalidateFramebuffer(target, numAttachments, attachments);
4131}
4132
4133void glwInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
4134{
4135	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4136	if (!gl)
4137		 return;
4138	gl->invalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
4139}
4140
4141void glwMultiDrawArraysIndirect (GLenum mode, const void* indirect, GLsizei drawcount, GLsizei stride)
4142{
4143	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4144	if (!gl)
4145		 return;
4146	gl->multiDrawArraysIndirect(mode, indirect, drawcount, stride);
4147}
4148
4149void glwMultiDrawElementsIndirect (GLenum mode, GLenum type, const void* indirect, GLsizei drawcount, GLsizei stride)
4150{
4151	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4152	if (!gl)
4153		 return;
4154	gl->multiDrawElementsIndirect(mode, type, indirect, drawcount, stride);
4155}
4156
4157void glwGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint* params)
4158{
4159	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4160	if (!gl)
4161		 return;
4162	gl->getProgramInterfaceiv(program, programInterface, pname, params);
4163}
4164
4165GLuint glwGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar* name)
4166{
4167	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4168	if (!gl)
4169		 return (GLuint)0;
4170	return gl->getProgramResourceIndex(program, programInterface, name);
4171}
4172
4173void glwGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name)
4174{
4175	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4176	if (!gl)
4177		 return;
4178	gl->getProgramResourceName(program, programInterface, index, bufSize, length, name);
4179}
4180
4181void glwGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params)
4182{
4183	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4184	if (!gl)
4185		 return;
4186	gl->getProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params);
4187}
4188
4189GLint glwGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar* name)
4190{
4191	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4192	if (!gl)
4193		 return (GLint)0;
4194	return gl->getProgramResourceLocation(program, programInterface, name);
4195}
4196
4197GLint glwGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar* name)
4198{
4199	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4200	if (!gl)
4201		 return (GLint)0;
4202	return gl->getProgramResourceLocationIndex(program, programInterface, name);
4203}
4204
4205void glwShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding)
4206{
4207	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4208	if (!gl)
4209		 return;
4210	gl->shaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding);
4211}
4212
4213void glwTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)
4214{
4215	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4216	if (!gl)
4217		 return;
4218	gl->texBufferRange(target, internalformat, buffer, offset, size);
4219}
4220
4221void glwTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
4222{
4223	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4224	if (!gl)
4225		 return;
4226	gl->texStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
4227}
4228
4229void glwTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
4230{
4231	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4232	if (!gl)
4233		 return;
4234	gl->texStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
4235}
4236
4237void glwTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers)
4238{
4239	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4240	if (!gl)
4241		 return;
4242	gl->textureView(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);
4243}
4244
4245void glwBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)
4246{
4247	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4248	if (!gl)
4249		 return;
4250	gl->bindVertexBuffer(bindingindex, buffer, offset, stride);
4251}
4252
4253void glwVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
4254{
4255	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4256	if (!gl)
4257		 return;
4258	gl->vertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
4259}
4260
4261void glwVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
4262{
4263	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4264	if (!gl)
4265		 return;
4266	gl->vertexAttribIFormat(attribindex, size, type, relativeoffset);
4267}
4268
4269void glwVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
4270{
4271	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4272	if (!gl)
4273		 return;
4274	gl->vertexAttribLFormat(attribindex, size, type, relativeoffset);
4275}
4276
4277void glwVertexAttribBinding (GLuint attribindex, GLuint bindingindex)
4278{
4279	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4280	if (!gl)
4281		 return;
4282	gl->vertexAttribBinding(attribindex, bindingindex);
4283}
4284
4285void glwVertexBindingDivisor (GLuint bindingindex, GLuint divisor)
4286{
4287	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4288	if (!gl)
4289		 return;
4290	gl->vertexBindingDivisor(bindingindex, divisor);
4291}
4292
4293void glwBufferStorage (GLenum target, GLsizeiptr size, const void* data, GLbitfield flags)
4294{
4295	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4296	if (!gl)
4297		 return;
4298	gl->bufferStorage(target, size, data, flags);
4299}
4300
4301void glwClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void* data)
4302{
4303	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4304	if (!gl)
4305		 return;
4306	gl->clearTexImage(texture, level, format, type, data);
4307}
4308
4309void glwClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* data)
4310{
4311	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4312	if (!gl)
4313		 return;
4314	gl->clearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
4315}
4316
4317void glwBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint* buffers)
4318{
4319	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4320	if (!gl)
4321		 return;
4322	gl->bindBuffersBase(target, first, count, buffers);
4323}
4324
4325void glwBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr* offsets, const GLsizeiptr* sizes)
4326{
4327	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4328	if (!gl)
4329		 return;
4330	gl->bindBuffersRange(target, first, count, buffers, offsets, sizes);
4331}
4332
4333void glwBindTextures (GLuint first, GLsizei count, const GLuint* textures)
4334{
4335	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4336	if (!gl)
4337		 return;
4338	gl->bindTextures(first, count, textures);
4339}
4340
4341void glwBindSamplers (GLuint first, GLsizei count, const GLuint* samplers)
4342{
4343	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4344	if (!gl)
4345		 return;
4346	gl->bindSamplers(first, count, samplers);
4347}
4348
4349void glwBindImageTextures (GLuint first, GLsizei count, const GLuint* textures)
4350{
4351	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4352	if (!gl)
4353		 return;
4354	gl->bindImageTextures(first, count, textures);
4355}
4356
4357void glwBindVertexBuffers (GLuint first, GLsizei count, const GLuint* buffers, const GLintptr* offsets, const GLsizei* strides)
4358{
4359	const glw::Functions* gl = glw::getCurrentThreadFunctions();
4360	if (!gl)
4361		 return;
4362	gl->bindVertexBuffers(first, count, buffers, offsets, strides);
4363}
4364