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