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