/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 *
 * Generated from Khronos GL API description (gl.xml) revision 9d534f9312e56c72df763207e449c6719576fd54.
 */
void					glActiveShaderProgram								(glw::GLuint pipeline, glw::GLuint program);
void					glActiveTexture										(glw::GLenum texture);
void					glAttachShader										(glw::GLuint program, glw::GLuint shader);
void					glBeginConditionalRender							(glw::GLuint id, glw::GLenum mode);
void					glBeginQuery										(glw::GLenum target, glw::GLuint id);
void					glBeginQueryIndexed									(glw::GLenum target, glw::GLuint index, glw::GLuint id);
void					glBeginTransformFeedback							(glw::GLenum primitiveMode);
void					glBindAttribLocation								(glw::GLuint program, glw::GLuint index, const glw::GLchar *name);
void					glBindBuffer										(glw::GLenum target, glw::GLuint buffer);
void					glBindBufferBase									(glw::GLenum target, glw::GLuint index, glw::GLuint buffer);
void					glBindBufferRange									(glw::GLenum target, glw::GLuint index, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size);
void					glBindBuffersBase									(glw::GLenum target, glw::GLuint first, glw::GLsizei count, const glw::GLuint *buffers);
void					glBindBuffersRange									(glw::GLenum target, glw::GLuint first, glw::GLsizei count, const glw::GLuint *buffers, const glw::GLintptr *offsets, const glw::GLsizeiptr *sizes);
void					glBindFragDataLocation								(glw::GLuint program, glw::GLuint color, const glw::GLchar *name);
void					glBindFragDataLocationIndexed						(glw::GLuint program, glw::GLuint colorNumber, glw::GLuint index, const glw::GLchar *name);
void					glBindFramebuffer									(glw::GLenum target, glw::GLuint framebuffer);
void					glBindImageTexture									(glw::GLuint unit, glw::GLuint texture, glw::GLint level, glw::GLboolean layered, glw::GLint layer, glw::GLenum access, glw::GLenum format);
void					glBindImageTextures									(glw::GLuint first, glw::GLsizei count, const glw::GLuint *textures);
void					glBindMultiTextureEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLuint texture);
void					glBindProgramPipeline								(glw::GLuint pipeline);
void					glBindRenderbuffer									(glw::GLenum target, glw::GLuint renderbuffer);
void					glBindSampler										(glw::GLuint unit, glw::GLuint sampler);
void					glBindSamplers										(glw::GLuint first, glw::GLsizei count, const glw::GLuint *samplers);
void					glBindTexture										(glw::GLenum target, glw::GLuint texture);
void					glBindTextureUnit									(glw::GLuint unit, glw::GLuint texture);
void					glBindTextures										(glw::GLuint first, glw::GLsizei count, const glw::GLuint *textures);
void					glBindTransformFeedback								(glw::GLenum target, glw::GLuint id);
void					glBindVertexArray									(glw::GLuint array);
void					glBindVertexBuffer									(glw::GLuint bindingindex, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizei stride);
void					glBindVertexBuffers									(glw::GLuint first, glw::GLsizei count, const glw::GLuint *buffers, const glw::GLintptr *offsets, const glw::GLsizei *strides);
void					glBlendBarrier										(void);
void					glBlendColor										(glw::GLfloat red, glw::GLfloat green, glw::GLfloat blue, glw::GLfloat alpha);
void					glBlendEquation										(glw::GLenum mode);
void					glBlendEquationSeparate								(glw::GLenum modeRGB, glw::GLenum modeAlpha);
void					glBlendEquationSeparatei							(glw::GLuint buf, glw::GLenum modeRGB, glw::GLenum modeAlpha);
void					glBlendEquationi									(glw::GLuint buf, glw::GLenum mode);
void					glBlendFunc											(glw::GLenum sfactor, glw::GLenum dfactor);
void					glBlendFuncSeparate									(glw::GLenum sfactorRGB, glw::GLenum dfactorRGB, glw::GLenum sfactorAlpha, glw::GLenum dfactorAlpha);
void					glBlendFuncSeparatei								(glw::GLuint buf, glw::GLenum srcRGB, glw::GLenum dstRGB, glw::GLenum srcAlpha, glw::GLenum dstAlpha);
void					glBlendFunci										(glw::GLuint buf, glw::GLenum src, glw::GLenum dst);
void					glBlitFramebuffer									(glw::GLint srcX0, glw::GLint srcY0, glw::GLint srcX1, glw::GLint srcY1, glw::GLint dstX0, glw::GLint dstY0, glw::GLint dstX1, glw::GLint dstY1, glw::GLbitfield mask, glw::GLenum filter);
void					glBlitNamedFramebuffer								(glw::GLuint readFramebuffer, glw::GLuint drawFramebuffer, glw::GLint srcX0, glw::GLint srcY0, glw::GLint srcX1, glw::GLint srcY1, glw::GLint dstX0, glw::GLint dstY0, glw::GLint dstX1, glw::GLint dstY1, glw::GLbitfield mask, glw::GLenum filter);
void					glBufferData										(glw::GLenum target, glw::GLsizeiptr size, const void *data, glw::GLenum usage);
void					glBufferPageCommitmentARB							(glw::GLenum target, glw::GLintptr offset, glw::GLsizeiptr size, glw::GLboolean commit);
void					glBufferStorage										(glw::GLenum target, glw::GLsizeiptr size, const void *data, glw::GLbitfield flags);
void					glBufferSubData										(glw::GLenum target, glw::GLintptr offset, glw::GLsizeiptr size, const void *data);
glw::GLenum				glCheckFramebufferStatus							(glw::GLenum target);
glw::GLenum				glCheckNamedFramebufferStatus						(glw::GLuint framebuffer, glw::GLenum target);
glw::GLenum				glCheckNamedFramebufferStatusEXT					(glw::GLuint framebuffer, glw::GLenum target);
void					glClampColor										(glw::GLenum target, glw::GLenum clamp);
void					glClear												(glw::GLbitfield mask);
void					glClearBufferData									(glw::GLenum target, glw::GLenum internalformat, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearBufferSubData								(glw::GLenum target, glw::GLenum internalformat, glw::GLintptr offset, glw::GLsizeiptr size, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearBufferfi										(glw::GLenum buffer, glw::GLint drawbuffer, glw::GLfloat depth, glw::GLint stencil);
void					glClearBufferfv										(glw::GLenum buffer, glw::GLint drawbuffer, const glw::GLfloat *value);
void					glClearBufferiv										(glw::GLenum buffer, glw::GLint drawbuffer, const glw::GLint *value);
void					glClearBufferuiv									(glw::GLenum buffer, glw::GLint drawbuffer, const glw::GLuint *value);
void					glClearColor										(glw::GLfloat red, glw::GLfloat green, glw::GLfloat blue, glw::GLfloat alpha);
void					glClearDepth										(glw::GLdouble depth);
void					glClearDepthf										(glw::GLfloat d);
void					glClearNamedBufferData								(glw::GLuint buffer, glw::GLenum internalformat, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearNamedBufferDataEXT							(glw::GLuint buffer, glw::GLenum internalformat, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearNamedBufferSubData							(glw::GLuint buffer, glw::GLenum internalformat, glw::GLintptr offset, glw::GLsizeiptr size, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearNamedBufferSubDataEXT						(glw::GLuint buffer, glw::GLenum internalformat, glw::GLsizeiptr offset, glw::GLsizeiptr size, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearNamedFramebufferfi							(glw::GLuint framebuffer, glw::GLenum buffer, glw::GLint drawbuffer, glw::GLfloat depth, glw::GLint stencil);
void					glClearNamedFramebufferfv							(glw::GLuint framebuffer, glw::GLenum buffer, glw::GLint drawbuffer, const glw::GLfloat *value);
void					glClearNamedFramebufferiv							(glw::GLuint framebuffer, glw::GLenum buffer, glw::GLint drawbuffer, const glw::GLint *value);
void					glClearNamedFramebufferuiv							(glw::GLuint framebuffer, glw::GLenum buffer, glw::GLint drawbuffer, const glw::GLuint *value);
void					glClearStencil										(glw::GLint s);
void					glClearTexImage										(glw::GLuint texture, glw::GLint level, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearTexSubImage									(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, const void *data);
void					glClientAttribDefaultEXT							(glw::GLbitfield mask);
glw::GLenum				glClientWaitSync									(glw::GLsync sync, glw::GLbitfield flags, glw::GLuint64 timeout);
void					glClipControl										(glw::GLenum origin, glw::GLenum depth);
void					glColorMask											(glw::GLboolean red, glw::GLboolean green, glw::GLboolean blue, glw::GLboolean alpha);
void					glColorMaski										(glw::GLuint index, glw::GLboolean r, glw::GLboolean g, glw::GLboolean b, glw::GLboolean a);
void					glCompileShader										(glw::GLuint shader);
void					glCompressedMultiTexImage1DEXT						(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLint border, glw::GLsizei imageSize, const void *bits);
void					glCompressedMultiTexImage2DEXT						(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLint border, glw::GLsizei imageSize, const void *bits);
void					glCompressedMultiTexImage3DEXT						(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLsizei imageSize, const void *bits);
void					glCompressedMultiTexSubImage1DEXT					(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLsizei imageSize, const void *bits);
void					glCompressedMultiTexSubImage2DEXT					(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLsizei imageSize, const void *bits);
void					glCompressedMultiTexSubImage3DEXT					(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLsizei imageSize, const void *bits);
void					glCompressedTexImage1D								(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLint border, glw::GLsizei imageSize, const void *data);
void					glCompressedTexImage2D								(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLint border, glw::GLsizei imageSize, const void *data);
void					glCompressedTexImage3D								(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLsizei imageSize, const void *data);
void					glCompressedTexImage3DOES							(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLsizei imageSize, const void *data);
void					glCompressedTexSubImage1D							(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTexSubImage2D							(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTexSubImage3D							(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTexSubImage3DOES						(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTextureImage1DEXT						(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLint border, glw::GLsizei imageSize, const void *bits);
void					glCompressedTextureImage2DEXT						(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLint border, glw::GLsizei imageSize, const void *bits);
void					glCompressedTextureImage3DEXT						(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLsizei imageSize, const void *bits);
void					glCompressedTextureSubImage1D						(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTextureSubImage1DEXT					(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLsizei imageSize, const void *bits);
void					glCompressedTextureSubImage2D						(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTextureSubImage2DEXT					(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLsizei imageSize, const void *bits);
void					glCompressedTextureSubImage3D						(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLsizei imageSize, const void *data);
void					glCompressedTextureSubImage3DEXT					(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLsizei imageSize, const void *bits);
void					glCopyBufferSubData									(glw::GLenum readTarget, glw::GLenum writeTarget, glw::GLintptr readOffset, glw::GLintptr writeOffset, glw::GLsizeiptr size);
void					glCopyImageSubData									(glw::GLuint srcName, glw::GLenum srcTarget, glw::GLint srcLevel, glw::GLint srcX, glw::GLint srcY, glw::GLint srcZ, glw::GLuint dstName, glw::GLenum dstTarget, glw::GLint dstLevel, glw::GLint dstX, glw::GLint dstY, glw::GLint dstZ, glw::GLsizei srcWidth, glw::GLsizei srcHeight, glw::GLsizei srcDepth);
void					glCopyMultiTexImage1DEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLint border);
void					glCopyMultiTexImage2DEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height, glw::GLint border);
void					glCopyMultiTexSubImage1DEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint x, glw::GLint y, glw::GLsizei width);
void					glCopyMultiTexSubImage2DEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyMultiTexSubImage3DEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyNamedBufferSubData							(glw::GLuint readBuffer, glw::GLuint writeBuffer, glw::GLintptr readOffset, glw::GLintptr writeOffset, glw::GLsizeiptr size);
void					glCopyTexImage1D									(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLint border);
void					glCopyTexImage2D									(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height, glw::GLint border);
void					glCopyTexSubImage1D									(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint x, glw::GLint y, glw::GLsizei width);
void					glCopyTexSubImage2D									(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyTexSubImage3D									(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyTexSubImage3DOES								(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyTextureImage1DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLint border);
void					glCopyTextureImage2DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height, glw::GLint border);
void					glCopyTextureSubImage1D								(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint x, glw::GLint y, glw::GLsizei width);
void					glCopyTextureSubImage1DEXT							(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint x, glw::GLint y, glw::GLsizei width);
void					glCopyTextureSubImage2D								(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyTextureSubImage2DEXT							(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyTextureSubImage3D								(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCopyTextureSubImage3DEXT							(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glCreateBuffers										(glw::GLsizei n, glw::GLuint *buffers);
void					glCreateFramebuffers								(glw::GLsizei n, glw::GLuint *framebuffers);
glw::GLuint				glCreateProgram										(void);
void					glCreateProgramPipelines							(glw::GLsizei n, glw::GLuint *pipelines);
void					glCreateQueries										(glw::GLenum target, glw::GLsizei n, glw::GLuint *ids);
void					glCreateRenderbuffers								(glw::GLsizei n, glw::GLuint *renderbuffers);
void					glCreateSamplers									(glw::GLsizei n, glw::GLuint *samplers);
glw::GLuint				glCreateShader										(glw::GLenum type);
glw::GLuint				glCreateShaderProgramv								(glw::GLenum type, glw::GLsizei count, const glw::GLchar *const*strings);
void					glCreateTextures									(glw::GLenum target, glw::GLsizei n, glw::GLuint *textures);
void					glCreateTransformFeedbacks							(glw::GLsizei n, glw::GLuint *ids);
void					glCreateVertexArrays								(glw::GLsizei n, glw::GLuint *arrays);
void					glCullFace											(glw::GLenum mode);
void					glDebugMessageCallback								(glw::GLDEBUGPROC callback, const void *userParam);
void					glDebugMessageControl								(glw::GLenum source, glw::GLenum type, glw::GLenum severity, glw::GLsizei count, const glw::GLuint *ids, glw::GLboolean enabled);
void					glDebugMessageInsert								(glw::GLenum source, glw::GLenum type, glw::GLuint id, glw::GLenum severity, glw::GLsizei length, const glw::GLchar *buf);
void					glDeleteBuffers										(glw::GLsizei n, const glw::GLuint *buffers);
void					glDeleteFramebuffers								(glw::GLsizei n, const glw::GLuint *framebuffers);
void					glDeleteProgram										(glw::GLuint program);
void					glDeleteProgramPipelines							(glw::GLsizei n, const glw::GLuint *pipelines);
void					glDeleteQueries										(glw::GLsizei n, const glw::GLuint *ids);
void					glDeleteRenderbuffers								(glw::GLsizei n, const glw::GLuint *renderbuffers);
void					glDeleteSamplers									(glw::GLsizei count, const glw::GLuint *samplers);
void					glDeleteShader										(glw::GLuint shader);
void					glDeleteSync										(glw::GLsync sync);
void					glDeleteTextures									(glw::GLsizei n, const glw::GLuint *textures);
void					glDeleteTransformFeedbacks							(glw::GLsizei n, const glw::GLuint *ids);
void					glDeleteVertexArrays								(glw::GLsizei n, const glw::GLuint *arrays);
void					glDepthBoundsEXT									(glw::GLclampd zmin, glw::GLclampd zmax);
void					glDepthFunc											(glw::GLenum func);
void					glDepthMask											(glw::GLboolean flag);
void					glDepthRange										(glw::GLdouble n, glw::GLdouble f);
void					glDepthRangeArrayfvOES								(glw::GLuint first, glw::GLsizei count, const glw::GLfloat *v);
void					glDepthRangeArrayv									(glw::GLuint first, glw::GLsizei count, const glw::GLdouble *v);
void					glDepthRangeIndexed									(glw::GLuint index, glw::GLdouble n, glw::GLdouble f);
void					glDepthRangeIndexedfOES								(glw::GLuint index, glw::GLfloat n, glw::GLfloat f);
void					glDepthRangef										(glw::GLfloat n, glw::GLfloat f);
void					glDetachShader										(glw::GLuint program, glw::GLuint shader);
void					glDisable											(glw::GLenum cap);
void					glDisableClientStateIndexedEXT						(glw::GLenum array, glw::GLuint index);
void					glDisableClientStateiEXT							(glw::GLenum array, glw::GLuint index);
void					glDisableVertexArrayAttrib							(glw::GLuint vaobj, glw::GLuint index);
void					glDisableVertexArrayAttribEXT						(glw::GLuint vaobj, glw::GLuint index);
void					glDisableVertexArrayEXT								(glw::GLuint vaobj, glw::GLenum array);
void					glDisableVertexAttribArray							(glw::GLuint index);
void					glDisablei											(glw::GLenum target, glw::GLuint index);
void					glDispatchCompute									(glw::GLuint num_groups_x, glw::GLuint num_groups_y, glw::GLuint num_groups_z);
void					glDispatchComputeIndirect							(glw::GLintptr indirect);
void					glDrawArrays										(glw::GLenum mode, glw::GLint first, glw::GLsizei count);
void					glDrawArraysIndirect								(glw::GLenum mode, const void *indirect);
void					glDrawArraysInstanced								(glw::GLenum mode, glw::GLint first, glw::GLsizei count, glw::GLsizei instancecount);
void					glDrawArraysInstancedBaseInstance					(glw::GLenum mode, glw::GLint first, glw::GLsizei count, glw::GLsizei instancecount, glw::GLuint baseinstance);
void					glDrawBuffer										(glw::GLenum buf);
void					glDrawBuffers										(glw::GLsizei n, const glw::GLenum *bufs);
void					glDrawElements										(glw::GLenum mode, glw::GLsizei count, glw::GLenum type, const void *indices);
void					glDrawElementsBaseVertex							(glw::GLenum mode, glw::GLsizei count, glw::GLenum type, const void *indices, glw::GLint basevertex);
void					glDrawElementsIndirect								(glw::GLenum mode, glw::GLenum type, const void *indirect);
void					glDrawElementsInstanced								(glw::GLenum mode, glw::GLsizei count, glw::GLenum type, const void *indices, glw::GLsizei instancecount);
void					glDrawElementsInstancedBaseInstance					(glw::GLenum mode, glw::GLsizei count, glw::GLenum type, const void *indices, glw::GLsizei instancecount, glw::GLuint baseinstance);
void					glDrawElementsInstancedBaseVertex					(glw::GLenum mode, glw::GLsizei count, glw::GLenum type, const void *indices, glw::GLsizei instancecount, glw::GLint basevertex);
void					glDrawElementsInstancedBaseVertexBaseInstance		(glw::GLenum mode, glw::GLsizei count, glw::GLenum type, const void *indices, glw::GLsizei instancecount, glw::GLint basevertex, glw::GLuint baseinstance);
void					glDrawRangeElements									(glw::GLenum mode, glw::GLuint start, glw::GLuint end, glw::GLsizei count, glw::GLenum type, const void *indices);
void					glDrawRangeElementsBaseVertex						(glw::GLenum mode, glw::GLuint start, glw::GLuint end, glw::GLsizei count, glw::GLenum type, const void *indices, glw::GLint basevertex);
void					glDrawTransformFeedback								(glw::GLenum mode, glw::GLuint id);
void					glDrawTransformFeedbackInstanced					(glw::GLenum mode, glw::GLuint id, glw::GLsizei instancecount);
void					glDrawTransformFeedbackStream						(glw::GLenum mode, glw::GLuint id, glw::GLuint stream);
void					glDrawTransformFeedbackStreamInstanced				(glw::GLenum mode, glw::GLuint id, glw::GLuint stream, glw::GLsizei instancecount);
void					glEGLImageTargetRenderbufferStorageOES				(glw::GLenum target, glw::GLeglImageOES image);
void					glEGLImageTargetTexture2DOES						(glw::GLenum target, glw::GLeglImageOES image);
void					glEnable											(glw::GLenum cap);
void					glEnableClientStateIndexedEXT						(glw::GLenum array, glw::GLuint index);
void					glEnableClientStateiEXT								(glw::GLenum array, glw::GLuint index);
void					glEnableVertexArrayAttrib							(glw::GLuint vaobj, glw::GLuint index);
void					glEnableVertexArrayAttribEXT						(glw::GLuint vaobj, glw::GLuint index);
void					glEnableVertexArrayEXT								(glw::GLuint vaobj, glw::GLenum array);
void					glEnableVertexAttribArray							(glw::GLuint index);
void					glEnablei											(glw::GLenum target, glw::GLuint index);
void					glEndConditionalRender								(void);
void					glEndQuery											(glw::GLenum target);
void					glEndQueryIndexed									(glw::GLenum target, glw::GLuint index);
void					glEndTransformFeedback								(void);
glw::GLsync				glFenceSync											(glw::GLenum condition, glw::GLbitfield flags);
void					glFinish											(void);
void					glFlush												(void);
void					glFlushMappedBufferRange							(glw::GLenum target, glw::GLintptr offset, glw::GLsizeiptr length);
void					glFlushMappedNamedBufferRange						(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr length);
void					glFlushMappedNamedBufferRangeEXT					(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr length);
void					glFramebufferDrawBufferEXT							(glw::GLuint framebuffer, glw::GLenum mode);
void					glFramebufferDrawBuffersEXT							(glw::GLuint framebuffer, glw::GLsizei n, const glw::GLenum *bufs);
void					glFramebufferParameteri								(glw::GLenum target, glw::GLenum pname, glw::GLint param);
void					glFramebufferReadBufferEXT							(glw::GLuint framebuffer, glw::GLenum mode);
void					glFramebufferRenderbuffer							(glw::GLenum target, glw::GLenum attachment, glw::GLenum renderbuffertarget, glw::GLuint renderbuffer);
void					glFramebufferTexture								(glw::GLenum target, glw::GLenum attachment, glw::GLuint texture, glw::GLint level);
void					glFramebufferTexture1D								(glw::GLenum target, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level);
void					glFramebufferTexture2D								(glw::GLenum target, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level);
void					glFramebufferTexture2DMultisampleEXT				(glw::GLenum target, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level, glw::GLsizei samples);
void					glFramebufferTexture3D								(glw::GLenum target, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level, glw::GLint zoffset);
void					glFramebufferTexture3DOES							(glw::GLenum target, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level, glw::GLint zoffset);
void					glFramebufferTextureLayer							(glw::GLenum target, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLint layer);
void					glFramebufferTextureMultisampleMultiviewOVR			(glw::GLenum target, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLsizei samples, glw::GLint baseViewIndex, glw::GLsizei numViews);
void					glFramebufferTextureMultiviewOVR					(glw::GLenum target, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLint baseViewIndex, glw::GLsizei numViews);
void					glFrontFace											(glw::GLenum mode);
void					glGenBuffers										(glw::GLsizei n, glw::GLuint *buffers);
void					glGenFramebuffers									(glw::GLsizei n, glw::GLuint *framebuffers);
void					glGenProgramPipelines								(glw::GLsizei n, glw::GLuint *pipelines);
void					glGenQueries										(glw::GLsizei n, glw::GLuint *ids);
void					glGenRenderbuffers									(glw::GLsizei n, glw::GLuint *renderbuffers);
void					glGenSamplers										(glw::GLsizei count, glw::GLuint *samplers);
void					glGenTextures										(glw::GLsizei n, glw::GLuint *textures);
void					glGenTransformFeedbacks								(glw::GLsizei n, glw::GLuint *ids);
void					glGenVertexArrays									(glw::GLsizei n, glw::GLuint *arrays);
void					glGenerateMipmap									(glw::GLenum target);
void					glGenerateMultiTexMipmapEXT							(glw::GLenum texunit, glw::GLenum target);
void					glGenerateTextureMipmap								(glw::GLuint texture);
void					glGenerateTextureMipmapEXT							(glw::GLuint texture, glw::GLenum target);
void					glGetActiveAtomicCounterBufferiv					(glw::GLuint program, glw::GLuint bufferIndex, glw::GLenum pname, glw::GLint *params);
void					glGetActiveAttrib									(glw::GLuint program, glw::GLuint index, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLint *size, glw::GLenum *type, glw::GLchar *name);
void					glGetActiveSubroutineName							(glw::GLuint program, glw::GLenum shadertype, glw::GLuint index, glw::GLsizei bufsize, glw::GLsizei *length, glw::GLchar *name);
void					glGetActiveSubroutineUniformName					(glw::GLuint program, glw::GLenum shadertype, glw::GLuint index, glw::GLsizei bufsize, glw::GLsizei *length, glw::GLchar *name);
void					glGetActiveSubroutineUniformiv						(glw::GLuint program, glw::GLenum shadertype, glw::GLuint index, glw::GLenum pname, glw::GLint *values);
void					glGetActiveUniform									(glw::GLuint program, glw::GLuint index, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLint *size, glw::GLenum *type, glw::GLchar *name);
void					glGetActiveUniformBlockName							(glw::GLuint program, glw::GLuint uniformBlockIndex, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *uniformBlockName);
void					glGetActiveUniformBlockiv							(glw::GLuint program, glw::GLuint uniformBlockIndex, glw::GLenum pname, glw::GLint *params);
void					glGetActiveUniformName								(glw::GLuint program, glw::GLuint uniformIndex, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *uniformName);
void					glGetActiveUniformsiv								(glw::GLuint program, glw::GLsizei uniformCount, const glw::GLuint *uniformIndices, glw::GLenum pname, glw::GLint *params);
void					glGetAttachedShaders								(glw::GLuint program, glw::GLsizei maxCount, glw::GLsizei *count, glw::GLuint *shaders);
glw::GLint				glGetAttribLocation									(glw::GLuint program, const glw::GLchar *name);
void					glGetBooleani_v										(glw::GLenum target, glw::GLuint index, glw::GLboolean *data);
void					glGetBooleanv										(glw::GLenum pname, glw::GLboolean *data);
void					glGetBufferParameteri64v							(glw::GLenum target, glw::GLenum pname, glw::GLint64 *params);
void					glGetBufferParameteriv								(glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetBufferPointerv									(glw::GLenum target, glw::GLenum pname, void **params);
void					glGetBufferSubData									(glw::GLenum target, glw::GLintptr offset, glw::GLsizeiptr size, void *data);
void					glGetCompressedMultiTexImageEXT						(glw::GLenum texunit, glw::GLenum target, glw::GLint lod, void *img);
void					glGetCompressedTexImage								(glw::GLenum target, glw::GLint level, void *img);
void					glGetCompressedTextureImage							(glw::GLuint texture, glw::GLint level, glw::GLsizei bufSize, void *pixels);
void					glGetCompressedTextureImageEXT						(glw::GLuint texture, glw::GLenum target, glw::GLint lod, void *img);
void					glGetCompressedTextureSubImage						(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLsizei bufSize, void *pixels);
glw::GLuint				glGetDebugMessageLog								(glw::GLuint count, glw::GLsizei bufSize, glw::GLenum *sources, glw::GLenum *types, glw::GLuint *ids, glw::GLenum *severities, glw::GLsizei *lengths, glw::GLchar *messageLog);
void					glGetDoublei_v										(glw::GLenum target, glw::GLuint index, glw::GLdouble *data);
void					glGetDoublev										(glw::GLenum pname, glw::GLdouble *data);
glw::GLenum				glGetError											(void);
void					glGetFloati_v										(glw::GLenum target, glw::GLuint index, glw::GLfloat *data);
void					glGetFloatv											(glw::GLenum pname, glw::GLfloat *data);
glw::GLint				glGetFragDataIndex									(glw::GLuint program, const glw::GLchar *name);
glw::GLint				glGetFragDataLocation								(glw::GLuint program, const glw::GLchar *name);
void					glGetFramebufferAttachmentParameteriv				(glw::GLenum target, glw::GLenum attachment, glw::GLenum pname, glw::GLint *params);
void					glGetFramebufferParameteriv							(glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetFramebufferParameterivEXT						(glw::GLuint framebuffer, glw::GLenum pname, glw::GLint *params);
glw::GLenum				glGetGraphicsResetStatus							(void);
void					glGetInteger64i_v									(glw::GLenum target, glw::GLuint index, glw::GLint64 *data);
void					glGetInteger64v										(glw::GLenum pname, glw::GLint64 *data);
void					glGetIntegeri_v										(glw::GLenum target, glw::GLuint index, glw::GLint *data);
void					glGetIntegerv										(glw::GLenum pname, glw::GLint *data);
void					glGetInternalformatSampleivNV						(glw::GLenum target, glw::GLenum internalformat, glw::GLsizei samples, glw::GLenum pname, glw::GLsizei bufSize, glw::GLint *params);
void					glGetInternalformati64v								(glw::GLenum target, glw::GLenum internalformat, glw::GLenum pname, glw::GLsizei bufSize, glw::GLint64 *params);
void					glGetInternalformativ								(glw::GLenum target, glw::GLenum internalformat, glw::GLenum pname, glw::GLsizei bufSize, glw::GLint *params);
void					glGetMultiTexEnvfvEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLfloat *params);
void					glGetMultiTexEnvivEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetMultiTexGendvEXT								(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, glw::GLdouble *params);
void					glGetMultiTexGenfvEXT								(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, glw::GLfloat *params);
void					glGetMultiTexGenivEXT								(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, glw::GLint *params);
void					glGetMultiTexImageEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum format, glw::GLenum type, void *pixels);
void					glGetMultiTexLevelParameterfvEXT					(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum pname, glw::GLfloat *params);
void					glGetMultiTexLevelParameterivEXT					(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLenum pname, glw::GLint *params);
void					glGetMultiTexParameterIivEXT						(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetMultiTexParameterIuivEXT						(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLuint *params);
void					glGetMultiTexParameterfvEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLfloat *params);
void					glGetMultiTexParameterivEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetMultisamplefv									(glw::GLenum pname, glw::GLuint index, glw::GLfloat *val);
void					glGetNamedBufferParameteri64v						(glw::GLuint buffer, glw::GLenum pname, glw::GLint64 *params);
void					glGetNamedBufferParameteriv							(glw::GLuint buffer, glw::GLenum pname, glw::GLint *params);
void					glGetNamedBufferParameterivEXT						(glw::GLuint buffer, glw::GLenum pname, glw::GLint *params);
void					glGetNamedBufferPointerv							(glw::GLuint buffer, glw::GLenum pname, void **params);
void					glGetNamedBufferPointervEXT							(glw::GLuint buffer, glw::GLenum pname, void **params);
void					glGetNamedBufferSubData								(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size, void *data);
void					glGetNamedBufferSubDataEXT							(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size, void *data);
void					glGetNamedFramebufferAttachmentParameteriv			(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum pname, glw::GLint *params);
void					glGetNamedFramebufferAttachmentParameterivEXT		(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum pname, glw::GLint *params);
void					glGetNamedFramebufferParameteriv					(glw::GLuint framebuffer, glw::GLenum pname, glw::GLint *param);
void					glGetNamedFramebufferParameterivEXT					(glw::GLuint framebuffer, glw::GLenum pname, glw::GLint *params);
void					glGetNamedProgramLocalParameterIivEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLint *params);
void					glGetNamedProgramLocalParameterIuivEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLuint *params);
void					glGetNamedProgramLocalParameterdvEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLdouble *params);
void					glGetNamedProgramLocalParameterfvEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLfloat *params);
void					glGetNamedProgramStringEXT							(glw::GLuint program, glw::GLenum target, glw::GLenum pname, void *string);
void					glGetNamedProgramivEXT								(glw::GLuint program, glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetNamedRenderbufferParameteriv					(glw::GLuint renderbuffer, glw::GLenum pname, glw::GLint *params);
void					glGetNamedRenderbufferParameterivEXT				(glw::GLuint renderbuffer, glw::GLenum pname, glw::GLint *params);
void					glGetObjectLabel									(glw::GLenum identifier, glw::GLuint name, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *label);
void					glGetObjectPtrLabel									(const void *ptr, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *label);
void					glGetPointerIndexedvEXT								(glw::GLenum target, glw::GLuint index, void **data);
void					glGetPointeri_vEXT									(glw::GLenum pname, glw::GLuint index, void **params);
void					glGetPointerv										(glw::GLenum pname, void **params);
void					glGetProgramBinary									(glw::GLuint program, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLenum *binaryFormat, void *binary);
void					glGetProgramInfoLog									(glw::GLuint program, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *infoLog);
void					glGetProgramInterfaceiv								(glw::GLuint program, glw::GLenum programInterface, glw::GLenum pname, glw::GLint *params);
void					glGetProgramPipelineInfoLog							(glw::GLuint pipeline, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *infoLog);
void					glGetProgramPipelineiv								(glw::GLuint pipeline, glw::GLenum pname, glw::GLint *params);
glw::GLuint				glGetProgramResourceIndex							(glw::GLuint program, glw::GLenum programInterface, const glw::GLchar *name);
glw::GLint				glGetProgramResourceLocation						(glw::GLuint program, glw::GLenum programInterface, const glw::GLchar *name);
glw::GLint				glGetProgramResourceLocationIndex					(glw::GLuint program, glw::GLenum programInterface, const glw::GLchar *name);
void					glGetProgramResourceName							(glw::GLuint program, glw::GLenum programInterface, glw::GLuint index, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *name);
void					glGetProgramResourceiv								(glw::GLuint program, glw::GLenum programInterface, glw::GLuint index, glw::GLsizei propCount, const glw::GLenum *props, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLint *params);
void					glGetProgramStageiv									(glw::GLuint program, glw::GLenum shadertype, glw::GLenum pname, glw::GLint *values);
void					glGetProgramiv										(glw::GLuint program, glw::GLenum pname, glw::GLint *params);
void					glGetQueryBufferObjecti64v							(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname, glw::GLintptr offset);
void					glGetQueryBufferObjectiv							(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname, glw::GLintptr offset);
void					glGetQueryBufferObjectui64v							(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname, glw::GLintptr offset);
void					glGetQueryBufferObjectuiv							(glw::GLuint id, glw::GLuint buffer, glw::GLenum pname, glw::GLintptr offset);
void					glGetQueryIndexediv									(glw::GLenum target, glw::GLuint index, glw::GLenum pname, glw::GLint *params);
void					glGetQueryObjecti64v								(glw::GLuint id, glw::GLenum pname, glw::GLint64 *params);
void					glGetQueryObjectiv									(glw::GLuint id, glw::GLenum pname, glw::GLint *params);
void					glGetQueryObjectui64v								(glw::GLuint id, glw::GLenum pname, glw::GLuint64 *params);
void					glGetQueryObjectuiv									(glw::GLuint id, glw::GLenum pname, glw::GLuint *params);
void					glGetQueryiv										(glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetRenderbufferParameteriv						(glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetSamplerParameterIiv							(glw::GLuint sampler, glw::GLenum pname, glw::GLint *params);
void					glGetSamplerParameterIuiv							(glw::GLuint sampler, glw::GLenum pname, glw::GLuint *params);
void					glGetSamplerParameterfv								(glw::GLuint sampler, glw::GLenum pname, glw::GLfloat *params);
void					glGetSamplerParameteriv								(glw::GLuint sampler, glw::GLenum pname, glw::GLint *params);
void					glGetShaderInfoLog									(glw::GLuint shader, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *infoLog);
void					glGetShaderPrecisionFormat							(glw::GLenum shadertype, glw::GLenum precisiontype, glw::GLint *range, glw::GLint *precision);
void					glGetShaderSource									(glw::GLuint shader, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLchar *source);
void					glGetShaderiv										(glw::GLuint shader, glw::GLenum pname, glw::GLint *params);
const glw::GLubyte *	glGetString											(glw::GLenum name);
const glw::GLubyte *	glGetStringi										(glw::GLenum name, glw::GLuint index);
glw::GLuint				glGetSubroutineIndex								(glw::GLuint program, glw::GLenum shadertype, const glw::GLchar *name);
glw::GLint				glGetSubroutineUniformLocation						(glw::GLuint program, glw::GLenum shadertype, const glw::GLchar *name);
void					glGetSynciv											(glw::GLsync sync, glw::GLenum pname, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLint *values);
void					glGetTexImage										(glw::GLenum target, glw::GLint level, glw::GLenum format, glw::GLenum type, void *pixels);
void					glGetTexLevelParameterfv							(glw::GLenum target, glw::GLint level, glw::GLenum pname, glw::GLfloat *params);
void					glGetTexLevelParameteriv							(glw::GLenum target, glw::GLint level, glw::GLenum pname, glw::GLint *params);
void					glGetTexParameterIiv								(glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetTexParameterIuiv								(glw::GLenum target, glw::GLenum pname, glw::GLuint *params);
void					glGetTexParameterfv									(glw::GLenum target, glw::GLenum pname, glw::GLfloat *params);
void					glGetTexParameteriv									(glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetTextureImage									(glw::GLuint texture, glw::GLint level, glw::GLenum format, glw::GLenum type, glw::GLsizei bufSize, void *pixels);
void					glGetTextureImageEXT								(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum format, glw::GLenum type, void *pixels);
void					glGetTextureLevelParameterfv						(glw::GLuint texture, glw::GLint level, glw::GLenum pname, glw::GLfloat *params);
void					glGetTextureLevelParameterfvEXT						(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum pname, glw::GLfloat *params);
void					glGetTextureLevelParameteriv						(glw::GLuint texture, glw::GLint level, glw::GLenum pname, glw::GLint *params);
void					glGetTextureLevelParameterivEXT						(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLenum pname, glw::GLint *params);
void					glGetTextureParameterIiv							(glw::GLuint texture, glw::GLenum pname, glw::GLint *params);
void					glGetTextureParameterIivEXT							(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetTextureParameterIuiv							(glw::GLuint texture, glw::GLenum pname, glw::GLuint *params);
void					glGetTextureParameterIuivEXT						(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, glw::GLuint *params);
void					glGetTextureParameterfv								(glw::GLuint texture, glw::GLenum pname, glw::GLfloat *params);
void					glGetTextureParameterfvEXT							(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, glw::GLfloat *params);
void					glGetTextureParameteriv								(glw::GLuint texture, glw::GLenum pname, glw::GLint *params);
void					glGetTextureParameterivEXT							(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, glw::GLint *params);
void					glGetTextureSubImage								(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, glw::GLsizei bufSize, void *pixels);
void					glGetTransformFeedbackVarying						(glw::GLuint program, glw::GLuint index, glw::GLsizei bufSize, glw::GLsizei *length, glw::GLsizei *size, glw::GLenum *type, glw::GLchar *name);
void					glGetTransformFeedbacki64_v							(glw::GLuint xfb, glw::GLenum pname, glw::GLuint index, glw::GLint64 *param);
void					glGetTransformFeedbacki_v							(glw::GLuint xfb, glw::GLenum pname, glw::GLuint index, glw::GLint *param);
void					glGetTransformFeedbackiv							(glw::GLuint xfb, glw::GLenum pname, glw::GLint *param);
glw::GLuint				glGetUniformBlockIndex								(glw::GLuint program, const glw::GLchar *uniformBlockName);
void					glGetUniformIndices									(glw::GLuint program, glw::GLsizei uniformCount, const glw::GLchar *const*uniformNames, glw::GLuint *uniformIndices);
glw::GLint				glGetUniformLocation								(glw::GLuint program, const glw::GLchar *name);
void					glGetUniformSubroutineuiv							(glw::GLenum shadertype, glw::GLint location, glw::GLuint *params);
void					glGetUniformdv										(glw::GLuint program, glw::GLint location, glw::GLdouble *params);
void					glGetUniformfv										(glw::GLuint program, glw::GLint location, glw::GLfloat *params);
void					glGetUniformiv										(glw::GLuint program, glw::GLint location, glw::GLint *params);
void					glGetUniformuiv										(glw::GLuint program, glw::GLint location, glw::GLuint *params);
void					glGetVertexArrayIndexed64iv							(glw::GLuint vaobj, glw::GLuint index, glw::GLenum pname, glw::GLint64 *param);
void					glGetVertexArrayIndexediv							(glw::GLuint vaobj, glw::GLuint index, glw::GLenum pname, glw::GLint *param);
void					glGetVertexArrayIntegeri_vEXT						(glw::GLuint vaobj, glw::GLuint index, glw::GLenum pname, glw::GLint *param);
void					glGetVertexArrayIntegervEXT							(glw::GLuint vaobj, glw::GLenum pname, glw::GLint *param);
void					glGetVertexArrayPointeri_vEXT						(glw::GLuint vaobj, glw::GLuint index, glw::GLenum pname, void **param);
void					glGetVertexArrayPointervEXT							(glw::GLuint vaobj, glw::GLenum pname, void **param);
void					glGetVertexArrayiv									(glw::GLuint vaobj, glw::GLenum pname, glw::GLint *param);
void					glGetVertexAttribIiv								(glw::GLuint index, glw::GLenum pname, glw::GLint *params);
void					glGetVertexAttribIuiv								(glw::GLuint index, glw::GLenum pname, glw::GLuint *params);
void					glGetVertexAttribLdv								(glw::GLuint index, glw::GLenum pname, glw::GLdouble *params);
void					glGetVertexAttribPointerv							(glw::GLuint index, glw::GLenum pname, void **pointer);
void					glGetVertexAttribdv									(glw::GLuint index, glw::GLenum pname, glw::GLdouble *params);
void					glGetVertexAttribfv									(glw::GLuint index, glw::GLenum pname, glw::GLfloat *params);
void					glGetVertexAttribiv									(glw::GLuint index, glw::GLenum pname, glw::GLint *params);
void					glGetnCompressedTexImage							(glw::GLenum target, glw::GLint lod, glw::GLsizei bufSize, void *pixels);
void					glGetnTexImage										(glw::GLenum target, glw::GLint level, glw::GLenum format, glw::GLenum type, glw::GLsizei bufSize, void *pixels);
void					glGetnUniformdv										(glw::GLuint program, glw::GLint location, glw::GLsizei bufSize, glw::GLdouble *params);
void					glGetnUniformfv										(glw::GLuint program, glw::GLint location, glw::GLsizei bufSize, glw::GLfloat *params);
void					glGetnUniformiv										(glw::GLuint program, glw::GLint location, glw::GLsizei bufSize, glw::GLint *params);
void					glGetnUniformuiv									(glw::GLuint program, glw::GLint location, glw::GLsizei bufSize, glw::GLuint *params);
void					glHint												(glw::GLenum target, glw::GLenum mode);
void					glInsertEventMarkerEXT								(glw::GLsizei length, const glw::GLchar *marker);
void					glInvalidateBufferData								(glw::GLuint buffer);
void					glInvalidateBufferSubData							(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr length);
void					glInvalidateFramebuffer								(glw::GLenum target, glw::GLsizei numAttachments, const glw::GLenum *attachments);
void					glInvalidateNamedFramebufferData					(glw::GLuint framebuffer, glw::GLsizei numAttachments, const glw::GLenum *attachments);
void					glInvalidateNamedFramebufferSubData					(glw::GLuint framebuffer, glw::GLsizei numAttachments, const glw::GLenum *attachments, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glInvalidateSubFramebuffer							(glw::GLenum target, glw::GLsizei numAttachments, const glw::GLenum *attachments, glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glInvalidateTexImage								(glw::GLuint texture, glw::GLint level);
void					glInvalidateTexSubImage								(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth);
glw::GLboolean			glIsBuffer											(glw::GLuint buffer);
glw::GLboolean			glIsEnabled											(glw::GLenum cap);
glw::GLboolean			glIsEnabledi										(glw::GLenum target, glw::GLuint index);
glw::GLboolean			glIsFramebuffer										(glw::GLuint framebuffer);
glw::GLboolean			glIsProgram											(glw::GLuint program);
glw::GLboolean			glIsProgramPipeline									(glw::GLuint pipeline);
glw::GLboolean			glIsQuery											(glw::GLuint id);
glw::GLboolean			glIsRenderbuffer									(glw::GLuint renderbuffer);
glw::GLboolean			glIsSampler											(glw::GLuint sampler);
glw::GLboolean			glIsShader											(glw::GLuint shader);
glw::GLboolean			glIsSync											(glw::GLsync sync);
glw::GLboolean			glIsTexture											(glw::GLuint texture);
glw::GLboolean			glIsTransformFeedback								(glw::GLuint id);
glw::GLboolean			glIsVertexArray										(glw::GLuint array);
void					glLineWidth											(glw::GLfloat width);
void					glLinkProgram										(glw::GLuint program);
void					glLogicOp											(glw::GLenum opcode);
void *					glMapBuffer											(glw::GLenum target, glw::GLenum access);
void *					glMapBufferRange									(glw::GLenum target, glw::GLintptr offset, glw::GLsizeiptr length, glw::GLbitfield access);
void *					glMapNamedBuffer									(glw::GLuint buffer, glw::GLenum access);
void *					glMapNamedBufferEXT									(glw::GLuint buffer, glw::GLenum access);
void *					glMapNamedBufferRange								(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr length, glw::GLbitfield access);
void *					glMapNamedBufferRangeEXT							(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr length, glw::GLbitfield access);
void					glMatrixFrustumEXT									(glw::GLenum mode, glw::GLdouble left, glw::GLdouble right, glw::GLdouble bottom, glw::GLdouble top, glw::GLdouble zNear, glw::GLdouble zFar);
void					glMatrixLoadIdentityEXT								(glw::GLenum mode);
void					glMatrixLoadTransposedEXT							(glw::GLenum mode, const glw::GLdouble *m);
void					glMatrixLoadTransposefEXT							(glw::GLenum mode, const glw::GLfloat *m);
void					glMatrixLoaddEXT									(glw::GLenum mode, const glw::GLdouble *m);
void					glMatrixLoadfEXT									(glw::GLenum mode, const glw::GLfloat *m);
void					glMatrixMultTransposedEXT							(glw::GLenum mode, const glw::GLdouble *m);
void					glMatrixMultTransposefEXT							(glw::GLenum mode, const glw::GLfloat *m);
void					glMatrixMultdEXT									(glw::GLenum mode, const glw::GLdouble *m);
void					glMatrixMultfEXT									(glw::GLenum mode, const glw::GLfloat *m);
void					glMatrixOrthoEXT									(glw::GLenum mode, glw::GLdouble left, glw::GLdouble right, glw::GLdouble bottom, glw::GLdouble top, glw::GLdouble zNear, glw::GLdouble zFar);
void					glMatrixPopEXT										(glw::GLenum mode);
void					glMatrixPushEXT										(glw::GLenum mode);
void					glMatrixRotatedEXT									(glw::GLenum mode, glw::GLdouble angle, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glMatrixRotatefEXT									(glw::GLenum mode, glw::GLfloat angle, glw::GLfloat x, glw::GLfloat y, glw::GLfloat z);
void					glMatrixScaledEXT									(glw::GLenum mode, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glMatrixScalefEXT									(glw::GLenum mode, glw::GLfloat x, glw::GLfloat y, glw::GLfloat z);
void					glMatrixTranslatedEXT								(glw::GLenum mode, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glMatrixTranslatefEXT								(glw::GLenum mode, glw::GLfloat x, glw::GLfloat y, glw::GLfloat z);
void					glMaxShaderCompilerThreadsKHR						(glw::GLuint count);
void					glMemoryBarrier										(glw::GLbitfield barriers);
void					glMemoryBarrierByRegion								(glw::GLbitfield barriers);
void					glMinSampleShading									(glw::GLfloat value);
void					glMultiDrawArrays									(glw::GLenum mode, const glw::GLint *first, const glw::GLsizei *count, glw::GLsizei drawcount);
void					glMultiDrawArraysIndirect							(glw::GLenum mode, const void *indirect, glw::GLsizei drawcount, glw::GLsizei stride);
void					glMultiDrawArraysIndirectCount						(glw::GLenum mode, const void *indirect, glw::GLintptr drawcount, glw::GLsizei maxdrawcount, glw::GLsizei stride);
void					glMultiDrawElements									(glw::GLenum mode, const glw::GLsizei *count, glw::GLenum type, const void *const*indices, glw::GLsizei drawcount);
void					glMultiDrawElementsBaseVertex						(glw::GLenum mode, const glw::GLsizei *count, glw::GLenum type, const void *const*indices, glw::GLsizei drawcount, const glw::GLint *basevertex);
void					glMultiDrawElementsIndirect							(glw::GLenum mode, glw::GLenum type, const void *indirect, glw::GLsizei drawcount, glw::GLsizei stride);
void					glMultiDrawElementsIndirectCount					(glw::GLenum mode, glw::GLenum type, const void *indirect, glw::GLintptr drawcount, glw::GLsizei maxdrawcount, glw::GLsizei stride);
void					glMultiTexBufferEXT									(glw::GLenum texunit, glw::GLenum target, glw::GLenum internalformat, glw::GLuint buffer);
void					glMultiTexCoordPointerEXT							(glw::GLenum texunit, glw::GLint size, glw::GLenum type, glw::GLsizei stride, const void *pointer);
void					glMultiTexEnvfEXT									(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLfloat param);
void					glMultiTexEnvfvEXT									(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, const glw::GLfloat *params);
void					glMultiTexEnviEXT									(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLint param);
void					glMultiTexEnvivEXT									(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glMultiTexGendEXT									(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, glw::GLdouble param);
void					glMultiTexGendvEXT									(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, const glw::GLdouble *params);
void					glMultiTexGenfEXT									(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, glw::GLfloat param);
void					glMultiTexGenfvEXT									(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, const glw::GLfloat *params);
void					glMultiTexGeniEXT									(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, glw::GLint param);
void					glMultiTexGenivEXT									(glw::GLenum texunit, glw::GLenum coord, glw::GLenum pname, const glw::GLint *params);
void					glMultiTexImage1DEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glMultiTexImage2DEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glMultiTexImage3DEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glMultiTexParameterIivEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glMultiTexParameterIuivEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, const glw::GLuint *params);
void					glMultiTexParameterfEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLfloat param);
void					glMultiTexParameterfvEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, const glw::GLfloat *params);
void					glMultiTexParameteriEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, glw::GLint param);
void					glMultiTexParameterivEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glMultiTexRenderbufferEXT							(glw::GLenum texunit, glw::GLenum target, glw::GLuint renderbuffer);
void					glMultiTexSubImage1DEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glMultiTexSubImage2DEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glMultiTexSubImage3DEXT								(glw::GLenum texunit, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glMulticastBarrierNV								(void);
void					glMulticastBlitFramebufferNV						(glw::GLuint srcGpu, glw::GLuint dstGpu, glw::GLint srcX0, glw::GLint srcY0, glw::GLint srcX1, glw::GLint srcY1, glw::GLint dstX0, glw::GLint dstY0, glw::GLint dstX1, glw::GLint dstY1, glw::GLbitfield mask, glw::GLenum filter);
void					glMulticastBufferSubDataNV							(glw::GLbitfield gpuMask, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size, const void *data);
void					glMulticastCopyBufferSubDataNV						(glw::GLuint readGpu, glw::GLbitfield writeGpuMask, glw::GLuint readBuffer, glw::GLuint writeBuffer, glw::GLintptr readOffset, glw::GLintptr writeOffset, glw::GLsizeiptr size);
void					glMulticastCopyImageSubDataNV						(glw::GLuint srcGpu, glw::GLbitfield dstGpuMask, glw::GLuint srcName, glw::GLenum srcTarget, glw::GLint srcLevel, glw::GLint srcX, glw::GLint srcY, glw::GLint srcZ, glw::GLuint dstName, glw::GLenum dstTarget, glw::GLint dstLevel, glw::GLint dstX, glw::GLint dstY, glw::GLint dstZ, glw::GLsizei srcWidth, glw::GLsizei srcHeight, glw::GLsizei srcDepth);
void					glMulticastFramebufferSampleLocationsfvNV			(glw::GLuint gpu, glw::GLuint framebuffer, glw::GLuint start, glw::GLsizei count, const glw::GLfloat *v);
void					glMulticastGetQueryObjecti64vNV						(glw::GLuint gpu, glw::GLuint id, glw::GLenum pname, glw::GLint64 *params);
void					glMulticastGetQueryObjectivNV						(glw::GLuint gpu, glw::GLuint id, glw::GLenum pname, glw::GLint *params);
void					glMulticastGetQueryObjectui64vNV					(glw::GLuint gpu, glw::GLuint id, glw::GLenum pname, glw::GLuint64 *params);
void					glMulticastGetQueryObjectuivNV						(glw::GLuint gpu, glw::GLuint id, glw::GLenum pname, glw::GLuint *params);
void					glMulticastWaitSyncNV								(glw::GLuint signalGpu, glw::GLbitfield waitGpuMask);
void					glNamedBufferData									(glw::GLuint buffer, glw::GLsizeiptr size, const void *data, glw::GLenum usage);
void					glNamedBufferDataEXT								(glw::GLuint buffer, glw::GLsizeiptr size, const void *data, glw::GLenum usage);
void					glNamedBufferPageCommitmentARB						(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size, glw::GLboolean commit);
void					glNamedBufferPageCommitmentEXT						(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size, glw::GLboolean commit);
void					glNamedBufferStorage								(glw::GLuint buffer, glw::GLsizeiptr size, const void *data, glw::GLbitfield flags);
void					glNamedBufferSubData								(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size, const void *data);
void					glNamedCopyBufferSubDataEXT							(glw::GLuint readBuffer, glw::GLuint writeBuffer, glw::GLintptr readOffset, glw::GLintptr writeOffset, glw::GLsizeiptr size);
void					glNamedFramebufferDrawBuffer						(glw::GLuint framebuffer, glw::GLenum buf);
void					glNamedFramebufferDrawBuffers						(glw::GLuint framebuffer, glw::GLsizei n, const glw::GLenum *bufs);
void					glNamedFramebufferParameteri						(glw::GLuint framebuffer, glw::GLenum pname, glw::GLint param);
void					glNamedFramebufferParameteriEXT						(glw::GLuint framebuffer, glw::GLenum pname, glw::GLint param);
void					glNamedFramebufferReadBuffer						(glw::GLuint framebuffer, glw::GLenum src);
void					glNamedFramebufferRenderbuffer						(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum renderbuffertarget, glw::GLuint renderbuffer);
void					glNamedFramebufferRenderbufferEXT					(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum renderbuffertarget, glw::GLuint renderbuffer);
void					glNamedFramebufferTexture							(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLuint texture, glw::GLint level);
void					glNamedFramebufferTexture1DEXT						(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level);
void					glNamedFramebufferTexture2DEXT						(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level);
void					glNamedFramebufferTexture3DEXT						(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLenum textarget, glw::GLuint texture, glw::GLint level, glw::GLint zoffset);
void					glNamedFramebufferTextureEXT						(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLuint texture, glw::GLint level);
void					glNamedFramebufferTextureFaceEXT					(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLenum face);
void					glNamedFramebufferTextureLayer						(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLint layer);
void					glNamedFramebufferTextureLayerEXT					(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLint layer);
void					glNamedProgramLocalParameter4dEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z, glw::GLdouble w);
void					glNamedProgramLocalParameter4dvEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, const glw::GLdouble *params);
void					glNamedProgramLocalParameter4fEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLfloat x, glw::GLfloat y, glw::GLfloat z, glw::GLfloat w);
void					glNamedProgramLocalParameter4fvEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, const glw::GLfloat *params);
void					glNamedProgramLocalParameterI4iEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLint x, glw::GLint y, glw::GLint z, glw::GLint w);
void					glNamedProgramLocalParameterI4ivEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, const glw::GLint *params);
void					glNamedProgramLocalParameterI4uiEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLuint x, glw::GLuint y, glw::GLuint z, glw::GLuint w);
void					glNamedProgramLocalParameterI4uivEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, const glw::GLuint *params);
void					glNamedProgramLocalParameters4fvEXT					(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLsizei count, const glw::GLfloat *params);
void					glNamedProgramLocalParametersI4ivEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLsizei count, const glw::GLint *params);
void					glNamedProgramLocalParametersI4uivEXT				(glw::GLuint program, glw::GLenum target, glw::GLuint index, glw::GLsizei count, const glw::GLuint *params);
void					glNamedProgramStringEXT								(glw::GLuint program, glw::GLenum target, glw::GLenum format, glw::GLsizei len, const void *string);
void					glNamedRenderbufferStorage							(glw::GLuint renderbuffer, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glNamedRenderbufferStorageEXT						(glw::GLuint renderbuffer, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glNamedRenderbufferStorageMultisample				(glw::GLuint renderbuffer, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glNamedRenderbufferStorageMultisampleCoverageEXT	(glw::GLuint renderbuffer, glw::GLsizei coverageSamples, glw::GLsizei colorSamples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glNamedRenderbufferStorageMultisampleEXT			(glw::GLuint renderbuffer, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glObjectLabel										(glw::GLenum identifier, glw::GLuint name, glw::GLsizei length, const glw::GLchar *label);
void					glObjectPtrLabel									(const void *ptr, glw::GLsizei length, const glw::GLchar *label);
void					glPatchParameterfv									(glw::GLenum pname, const glw::GLfloat *values);
void					glPatchParameteri									(glw::GLenum pname, glw::GLint value);
void					glPauseTransformFeedback							(void);
void					glPixelStoref										(glw::GLenum pname, glw::GLfloat param);
void					glPixelStorei										(glw::GLenum pname, glw::GLint param);
void					glPointParameterf									(glw::GLenum pname, glw::GLfloat param);
void					glPointParameterfv									(glw::GLenum pname, const glw::GLfloat *params);
void					glPointParameteri									(glw::GLenum pname, glw::GLint param);
void					glPointParameteriv									(glw::GLenum pname, const glw::GLint *params);
void					glPointSize											(glw::GLfloat size);
void					glPolygonMode										(glw::GLenum face, glw::GLenum mode);
void					glPolygonOffset										(glw::GLfloat factor, glw::GLfloat units);
void					glPolygonOffsetClamp								(glw::GLfloat factor, glw::GLfloat units, glw::GLfloat clamp);
void					glPopDebugGroup										(void);
void					glPopGroupMarkerEXT									(void);
void					glPrimitiveBoundingBox								(glw::GLfloat minX, glw::GLfloat minY, glw::GLfloat minZ, glw::GLfloat minW, glw::GLfloat maxX, glw::GLfloat maxY, glw::GLfloat maxZ, glw::GLfloat maxW);
void					glPrimitiveRestartIndex								(glw::GLuint index);
void					glProgramBinary										(glw::GLuint program, glw::GLenum binaryFormat, const void *binary, glw::GLsizei length);
void					glProgramParameteri									(glw::GLuint program, glw::GLenum pname, glw::GLint value);
void					glProgramUniform1d									(glw::GLuint program, glw::GLint location, glw::GLdouble v0);
void					glProgramUniform1dEXT								(glw::GLuint program, glw::GLint location, glw::GLdouble x);
void					glProgramUniform1dv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform1dvEXT								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform1f									(glw::GLuint program, glw::GLint location, glw::GLfloat v0);
void					glProgramUniform1fv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glProgramUniform1i									(glw::GLuint program, glw::GLint location, glw::GLint v0);
void					glProgramUniform1iv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glProgramUniform1ui									(glw::GLuint program, glw::GLint location, glw::GLuint v0);
void					glProgramUniform1uiv								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glProgramUniform2d									(glw::GLuint program, glw::GLint location, glw::GLdouble v0, glw::GLdouble v1);
void					glProgramUniform2dEXT								(glw::GLuint program, glw::GLint location, glw::GLdouble x, glw::GLdouble y);
void					glProgramUniform2dv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform2dvEXT								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform2f									(glw::GLuint program, glw::GLint location, glw::GLfloat v0, glw::GLfloat v1);
void					glProgramUniform2fv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glProgramUniform2i									(glw::GLuint program, glw::GLint location, glw::GLint v0, glw::GLint v1);
void					glProgramUniform2iv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glProgramUniform2ui									(glw::GLuint program, glw::GLint location, glw::GLuint v0, glw::GLuint v1);
void					glProgramUniform2uiv								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glProgramUniform3d									(glw::GLuint program, glw::GLint location, glw::GLdouble v0, glw::GLdouble v1, glw::GLdouble v2);
void					glProgramUniform3dEXT								(glw::GLuint program, glw::GLint location, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glProgramUniform3dv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform3dvEXT								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform3f									(glw::GLuint program, glw::GLint location, glw::GLfloat v0, glw::GLfloat v1, glw::GLfloat v2);
void					glProgramUniform3fv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glProgramUniform3i									(glw::GLuint program, glw::GLint location, glw::GLint v0, glw::GLint v1, glw::GLint v2);
void					glProgramUniform3iv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glProgramUniform3ui									(glw::GLuint program, glw::GLint location, glw::GLuint v0, glw::GLuint v1, glw::GLuint v2);
void					glProgramUniform3uiv								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glProgramUniform4d									(glw::GLuint program, glw::GLint location, glw::GLdouble v0, glw::GLdouble v1, glw::GLdouble v2, glw::GLdouble v3);
void					glProgramUniform4dEXT								(glw::GLuint program, glw::GLint location, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z, glw::GLdouble w);
void					glProgramUniform4dv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform4dvEXT								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glProgramUniform4f									(glw::GLuint program, glw::GLint location, glw::GLfloat v0, glw::GLfloat v1, glw::GLfloat v2, glw::GLfloat v3);
void					glProgramUniform4fv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glProgramUniform4i									(glw::GLuint program, glw::GLint location, glw::GLint v0, glw::GLint v1, glw::GLint v2, glw::GLint v3);
void					glProgramUniform4iv									(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glProgramUniform4ui									(glw::GLuint program, glw::GLint location, glw::GLuint v0, glw::GLuint v1, glw::GLuint v2, glw::GLuint v3);
void					glProgramUniform4uiv								(glw::GLuint program, glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glProgramUniformMatrix2dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix2dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix2fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix2x3dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix2x3dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix2x3fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix2x4dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix2x4dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix2x4fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix3dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix3dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix3fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix3x2dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix3x2dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix3x2fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix3x4dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix3x4dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix3x4fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix4dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix4dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix4fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix4x2dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix4x2dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix4x2fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProgramUniformMatrix4x3dv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix4x3dvEXT						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glProgramUniformMatrix4x3fv							(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProvokingVertex									(glw::GLenum mode);
void					glPushClientAttribDefaultEXT						(glw::GLbitfield mask);
void					glPushDebugGroup									(glw::GLenum source, glw::GLuint id, glw::GLsizei length, const glw::GLchar *message);
void					glPushGroupMarkerEXT								(glw::GLsizei length, const glw::GLchar *marker);
void					glQueryCounter										(glw::GLuint id, glw::GLenum target);
void					glReadBuffer										(glw::GLenum src);
void					glReadPixels										(glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLenum type, void *pixels);
void					glReadnPixels										(glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLenum type, glw::GLsizei bufSize, void *data);
void					glReleaseShaderCompiler								(void);
void					glRenderGpuMaskNV									(glw::GLbitfield mask);
void					glRenderbufferStorage								(glw::GLenum target, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glRenderbufferStorageMultisample					(glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glRenderbufferStorageMultisampleEXT					(glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glResumeTransformFeedback							(void);
void					glSampleCoverage									(glw::GLfloat value, glw::GLboolean invert);
void					glSampleMaski										(glw::GLuint maskNumber, glw::GLbitfield mask);
void					glSamplerParameterIiv								(glw::GLuint sampler, glw::GLenum pname, const glw::GLint *param);
void					glSamplerParameterIuiv								(glw::GLuint sampler, glw::GLenum pname, const glw::GLuint *param);
void					glSamplerParameterf									(glw::GLuint sampler, glw::GLenum pname, glw::GLfloat param);
void					glSamplerParameterfv								(glw::GLuint sampler, glw::GLenum pname, const glw::GLfloat *param);
void					glSamplerParameteri									(glw::GLuint sampler, glw::GLenum pname, glw::GLint param);
void					glSamplerParameteriv								(glw::GLuint sampler, glw::GLenum pname, const glw::GLint *param);
void					glScissor											(glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glScissorArrayv										(glw::GLuint first, glw::GLsizei count, const glw::GLint *v);
void					glScissorIndexed									(glw::GLuint index, glw::GLint left, glw::GLint bottom, glw::GLsizei width, glw::GLsizei height);
void					glScissorIndexedv									(glw::GLuint index, const glw::GLint *v);
void					glShaderBinary										(glw::GLsizei count, const glw::GLuint *shaders, glw::GLenum binaryformat, const void *binary, glw::GLsizei length);
void					glShaderSource										(glw::GLuint shader, glw::GLsizei count, const glw::GLchar *const*string, const glw::GLint *length);
void					glShaderStorageBlockBinding							(glw::GLuint program, glw::GLuint storageBlockIndex, glw::GLuint storageBlockBinding);
void					glSpecializeShader									(glw::GLuint shader, const glw::GLchar *pEntryPoint, glw::GLuint numSpecializationConstants, const glw::GLuint *pConstantIndex, const glw::GLuint *pConstantValue);
void					glStencilFunc										(glw::GLenum func, glw::GLint ref, glw::GLuint mask);
void					glStencilFuncSeparate								(glw::GLenum face, glw::GLenum func, glw::GLint ref, glw::GLuint mask);
void					glStencilMask										(glw::GLuint mask);
void					glStencilMaskSeparate								(glw::GLenum face, glw::GLuint mask);
void					glStencilOp											(glw::GLenum fail, glw::GLenum zfail, glw::GLenum zpass);
void					glStencilOpSeparate									(glw::GLenum face, glw::GLenum sfail, glw::GLenum dpfail, glw::GLenum dppass);
void					glTexBuffer											(glw::GLenum target, glw::GLenum internalformat, glw::GLuint buffer);
void					glTexBufferRange									(glw::GLenum target, glw::GLenum internalformat, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size);
void					glTexImage1D										(glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexImage2D										(glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexImage2DMultisample								(glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLboolean fixedsamplelocations);
void					glTexImage3D										(glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexImage3DMultisample								(glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLboolean fixedsamplelocations);
void					glTexImage3DOES										(glw::GLenum target, glw::GLint level, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexPageCommitmentARB								(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLboolean commit);
void					glTexParameterIiv									(glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glTexParameterIuiv									(glw::GLenum target, glw::GLenum pname, const glw::GLuint *params);
void					glTexParameterf										(glw::GLenum target, glw::GLenum pname, glw::GLfloat param);
void					glTexParameterfv									(glw::GLenum target, glw::GLenum pname, const glw::GLfloat *params);
void					glTexParameteri										(glw::GLenum target, glw::GLenum pname, glw::GLint param);
void					glTexParameteriv									(glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glTexStorage1D										(glw::GLenum target, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width);
void					glTexStorage2D										(glw::GLenum target, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glTexStorage2DMultisample							(glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLboolean fixedsamplelocations);
void					glTexStorage3D										(glw::GLenum target, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth);
void					glTexStorage3DMultisample							(glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLboolean fixedsamplelocations);
void					glTexSubImage1D										(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexSubImage2D										(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexSubImage3D										(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexSubImage3DOES									(glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureBarrier									(void);
void					glTextureBuffer										(glw::GLuint texture, glw::GLenum internalformat, glw::GLuint buffer);
void					glTextureBufferEXT									(glw::GLuint texture, glw::GLenum target, glw::GLenum internalformat, glw::GLuint buffer);
void					glTextureBufferRange								(glw::GLuint texture, glw::GLenum internalformat, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size);
void					glTextureBufferRangeEXT								(glw::GLuint texture, glw::GLenum target, glw::GLenum internalformat, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size);
void					glTextureImage1DEXT									(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureImage2DEXT									(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureImage3DEXT									(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLint border, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTexturePageCommitmentEXT							(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLboolean commit);
void					glTextureParameterIiv								(glw::GLuint texture, glw::GLenum pname, const glw::GLint *params);
void					glTextureParameterIivEXT							(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glTextureParameterIuiv								(glw::GLuint texture, glw::GLenum pname, const glw::GLuint *params);
void					glTextureParameterIuivEXT							(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, const glw::GLuint *params);
void					glTextureParameterf									(glw::GLuint texture, glw::GLenum pname, glw::GLfloat param);
void					glTextureParameterfEXT								(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, glw::GLfloat param);
void					glTextureParameterfv								(glw::GLuint texture, glw::GLenum pname, const glw::GLfloat *param);
void					glTextureParameterfvEXT								(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, const glw::GLfloat *params);
void					glTextureParameteri									(glw::GLuint texture, glw::GLenum pname, glw::GLint param);
void					glTextureParameteriEXT								(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, glw::GLint param);
void					glTextureParameteriv								(glw::GLuint texture, glw::GLenum pname, const glw::GLint *param);
void					glTextureParameterivEXT								(glw::GLuint texture, glw::GLenum target, glw::GLenum pname, const glw::GLint *params);
void					glTextureRenderbufferEXT							(glw::GLuint texture, glw::GLenum target, glw::GLuint renderbuffer);
void					glTextureStorage1D									(glw::GLuint texture, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width);
void					glTextureStorage1DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width);
void					glTextureStorage2D									(glw::GLuint texture, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glTextureStorage2DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height);
void					glTextureStorage2DMultisample						(glw::GLuint texture, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLboolean fixedsamplelocations);
void					glTextureStorage2DMultisampleEXT					(glw::GLuint texture, glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLboolean fixedsamplelocations);
void					glTextureStorage3D									(glw::GLuint texture, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth);
void					glTextureStorage3DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLsizei levels, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth);
void					glTextureStorage3DMultisample						(glw::GLuint texture, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLboolean fixedsamplelocations);
void					glTextureStorage3DMultisampleEXT					(glw::GLuint texture, glw::GLenum target, glw::GLsizei samples, glw::GLenum internalformat, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLboolean fixedsamplelocations);
void					glTextureSubImage1D									(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureSubImage1DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureSubImage2D									(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureSubImage2DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLsizei width, glw::GLsizei height, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureSubImage3D									(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureSubImage3DEXT								(glw::GLuint texture, glw::GLenum target, glw::GLint level, glw::GLint xoffset, glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width, glw::GLsizei height, glw::GLsizei depth, glw::GLenum format, glw::GLenum type, const void *pixels);
void					glTextureView										(glw::GLuint texture, glw::GLenum target, glw::GLuint origtexture, glw::GLenum internalformat, glw::GLuint minlevel, glw::GLuint numlevels, glw::GLuint minlayer, glw::GLuint numlayers);
void					glTransformFeedbackBufferBase						(glw::GLuint xfb, glw::GLuint index, glw::GLuint buffer);
void					glTransformFeedbackBufferRange						(glw::GLuint xfb, glw::GLuint index, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size);
void					glTransformFeedbackVaryings							(glw::GLuint program, glw::GLsizei count, const glw::GLchar *const*varyings, glw::GLenum bufferMode);
void					glUniform1d											(glw::GLint location, glw::GLdouble x);
void					glUniform1dv										(glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glUniform1f											(glw::GLint location, glw::GLfloat v0);
void					glUniform1fv										(glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glUniform1i											(glw::GLint location, glw::GLint v0);
void					glUniform1iv										(glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glUniform1ui										(glw::GLint location, glw::GLuint v0);
void					glUniform1uiv										(glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glUniform2d											(glw::GLint location, glw::GLdouble x, glw::GLdouble y);
void					glUniform2dv										(glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glUniform2f											(glw::GLint location, glw::GLfloat v0, glw::GLfloat v1);
void					glUniform2fv										(glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glUniform2i											(glw::GLint location, glw::GLint v0, glw::GLint v1);
void					glUniform2iv										(glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glUniform2ui										(glw::GLint location, glw::GLuint v0, glw::GLuint v1);
void					glUniform2uiv										(glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glUniform3d											(glw::GLint location, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glUniform3dv										(glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glUniform3f											(glw::GLint location, glw::GLfloat v0, glw::GLfloat v1, glw::GLfloat v2);
void					glUniform3fv										(glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glUniform3i											(glw::GLint location, glw::GLint v0, glw::GLint v1, glw::GLint v2);
void					glUniform3iv										(glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glUniform3ui										(glw::GLint location, glw::GLuint v0, glw::GLuint v1, glw::GLuint v2);
void					glUniform3uiv										(glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glUniform4d											(glw::GLint location, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z, glw::GLdouble w);
void					glUniform4dv										(glw::GLint location, glw::GLsizei count, const glw::GLdouble *value);
void					glUniform4f											(glw::GLint location, glw::GLfloat v0, glw::GLfloat v1, glw::GLfloat v2, glw::GLfloat v3);
void					glUniform4fv										(glw::GLint location, glw::GLsizei count, const glw::GLfloat *value);
void					glUniform4i											(glw::GLint location, glw::GLint v0, glw::GLint v1, glw::GLint v2, glw::GLint v3);
void					glUniform4iv										(glw::GLint location, glw::GLsizei count, const glw::GLint *value);
void					glUniform4ui										(glw::GLint location, glw::GLuint v0, glw::GLuint v1, glw::GLuint v2, glw::GLuint v3);
void					glUniform4uiv										(glw::GLint location, glw::GLsizei count, const glw::GLuint *value);
void					glUniformBlockBinding								(glw::GLuint program, glw::GLuint uniformBlockIndex, glw::GLuint uniformBlockBinding);
void					glUniformMatrix2dv									(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix2fv									(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix2x3dv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix2x3fv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix2x4dv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix2x4fv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix3dv									(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix3fv									(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix3x2dv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix3x2fv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix3x4dv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix3x4fv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix4dv									(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix4fv									(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix4x2dv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix4x2fv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformMatrix4x3dv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLdouble *value);
void					glUniformMatrix4x3fv								(glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glUniformSubroutinesuiv								(glw::GLenum shadertype, glw::GLsizei count, const glw::GLuint *indices);
glw::GLboolean			glUnmapBuffer										(glw::GLenum target);
glw::GLboolean			glUnmapNamedBuffer									(glw::GLuint buffer);
glw::GLboolean			glUnmapNamedBufferEXT								(glw::GLuint buffer);
void					glUseProgram										(glw::GLuint program);
void					glUseProgramStages									(glw::GLuint pipeline, glw::GLbitfield stages, glw::GLuint program);
void					glValidateProgram									(glw::GLuint program);
void					glValidateProgramPipeline							(glw::GLuint pipeline);
void					glVertexArrayAttribBinding							(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLuint bindingindex);
void					glVertexArrayAttribFormat							(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLboolean normalized, glw::GLuint relativeoffset);
void					glVertexArrayAttribIFormat							(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLuint relativeoffset);
void					glVertexArrayAttribLFormat							(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLuint relativeoffset);
void					glVertexArrayBindVertexBufferEXT					(glw::GLuint vaobj, glw::GLuint bindingindex, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizei stride);
void					glVertexArrayBindingDivisor							(glw::GLuint vaobj, glw::GLuint bindingindex, glw::GLuint divisor);
void					glVertexArrayColorOffsetEXT							(glw::GLuint vaobj, glw::GLuint buffer, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayEdgeFlagOffsetEXT						(glw::GLuint vaobj, glw::GLuint buffer, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayElementBuffer							(glw::GLuint vaobj, glw::GLuint buffer);
void					glVertexArrayFogCoordOffsetEXT						(glw::GLuint vaobj, glw::GLuint buffer, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayIndexOffsetEXT							(glw::GLuint vaobj, glw::GLuint buffer, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayMultiTexCoordOffsetEXT					(glw::GLuint vaobj, glw::GLuint buffer, glw::GLenum texunit, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayNormalOffsetEXT						(glw::GLuint vaobj, glw::GLuint buffer, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArraySecondaryColorOffsetEXT				(glw::GLuint vaobj, glw::GLuint buffer, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayTexCoordOffsetEXT						(glw::GLuint vaobj, glw::GLuint buffer, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayVertexAttribBindingEXT					(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLuint bindingindex);
void					glVertexArrayVertexAttribDivisorEXT					(glw::GLuint vaobj, glw::GLuint index, glw::GLuint divisor);
void					glVertexArrayVertexAttribFormatEXT					(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLboolean normalized, glw::GLuint relativeoffset);
void					glVertexArrayVertexAttribIFormatEXT					(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLuint relativeoffset);
void					glVertexArrayVertexAttribIOffsetEXT					(glw::GLuint vaobj, glw::GLuint buffer, glw::GLuint index, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayVertexAttribLFormatEXT					(glw::GLuint vaobj, glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLuint relativeoffset);
void					glVertexArrayVertexAttribLOffsetEXT					(glw::GLuint vaobj, glw::GLuint buffer, glw::GLuint index, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayVertexAttribOffsetEXT					(glw::GLuint vaobj, glw::GLuint buffer, glw::GLuint index, glw::GLint size, glw::GLenum type, glw::GLboolean normalized, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexArrayVertexBindingDivisorEXT				(glw::GLuint vaobj, glw::GLuint bindingindex, glw::GLuint divisor);
void					glVertexArrayVertexBuffer							(glw::GLuint vaobj, glw::GLuint bindingindex, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizei stride);
void					glVertexArrayVertexBuffers							(glw::GLuint vaobj, glw::GLuint first, glw::GLsizei count, const glw::GLuint *buffers, const glw::GLintptr *offsets, const glw::GLsizei *strides);
void					glVertexArrayVertexOffsetEXT						(glw::GLuint vaobj, glw::GLuint buffer, glw::GLint size, glw::GLenum type, glw::GLsizei stride, glw::GLintptr offset);
void					glVertexAttrib1d									(glw::GLuint index, glw::GLdouble x);
void					glVertexAttrib1dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttrib1f									(glw::GLuint index, glw::GLfloat x);
void					glVertexAttrib1fv									(glw::GLuint index, const glw::GLfloat *v);
void					glVertexAttrib1s									(glw::GLuint index, glw::GLshort x);
void					glVertexAttrib1sv									(glw::GLuint index, const glw::GLshort *v);
void					glVertexAttrib2d									(glw::GLuint index, glw::GLdouble x, glw::GLdouble y);
void					glVertexAttrib2dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttrib2f									(glw::GLuint index, glw::GLfloat x, glw::GLfloat y);
void					glVertexAttrib2fv									(glw::GLuint index, const glw::GLfloat *v);
void					glVertexAttrib2s									(glw::GLuint index, glw::GLshort x, glw::GLshort y);
void					glVertexAttrib2sv									(glw::GLuint index, const glw::GLshort *v);
void					glVertexAttrib3d									(glw::GLuint index, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glVertexAttrib3dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttrib3f									(glw::GLuint index, glw::GLfloat x, glw::GLfloat y, glw::GLfloat z);
void					glVertexAttrib3fv									(glw::GLuint index, const glw::GLfloat *v);
void					glVertexAttrib3s									(glw::GLuint index, glw::GLshort x, glw::GLshort y, glw::GLshort z);
void					glVertexAttrib3sv									(glw::GLuint index, const glw::GLshort *v);
void					glVertexAttrib4Nbv									(glw::GLuint index, const glw::GLbyte *v);
void					glVertexAttrib4Niv									(glw::GLuint index, const glw::GLint *v);
void					glVertexAttrib4Nsv									(glw::GLuint index, const glw::GLshort *v);
void					glVertexAttrib4Nub									(glw::GLuint index, glw::GLubyte x, glw::GLubyte y, glw::GLubyte z, glw::GLubyte w);
void					glVertexAttrib4Nubv									(glw::GLuint index, const glw::GLubyte *v);
void					glVertexAttrib4Nuiv									(glw::GLuint index, const glw::GLuint *v);
void					glVertexAttrib4Nusv									(glw::GLuint index, const glw::GLushort *v);
void					glVertexAttrib4bv									(glw::GLuint index, const glw::GLbyte *v);
void					glVertexAttrib4d									(glw::GLuint index, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z, glw::GLdouble w);
void					glVertexAttrib4dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttrib4f									(glw::GLuint index, glw::GLfloat x, glw::GLfloat y, glw::GLfloat z, glw::GLfloat w);
void					glVertexAttrib4fv									(glw::GLuint index, const glw::GLfloat *v);
void					glVertexAttrib4iv									(glw::GLuint index, const glw::GLint *v);
void					glVertexAttrib4s									(glw::GLuint index, glw::GLshort x, glw::GLshort y, glw::GLshort z, glw::GLshort w);
void					glVertexAttrib4sv									(glw::GLuint index, const glw::GLshort *v);
void					glVertexAttrib4ubv									(glw::GLuint index, const glw::GLubyte *v);
void					glVertexAttrib4uiv									(glw::GLuint index, const glw::GLuint *v);
void					glVertexAttrib4usv									(glw::GLuint index, const glw::GLushort *v);
void					glVertexAttribBinding								(glw::GLuint attribindex, glw::GLuint bindingindex);
void					glVertexAttribDivisor								(glw::GLuint index, glw::GLuint divisor);
void					glVertexAttribFormat								(glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLboolean normalized, glw::GLuint relativeoffset);
void					glVertexAttribI1i									(glw::GLuint index, glw::GLint x);
void					glVertexAttribI1iv									(glw::GLuint index, const glw::GLint *v);
void					glVertexAttribI1ui									(glw::GLuint index, glw::GLuint x);
void					glVertexAttribI1uiv									(glw::GLuint index, const glw::GLuint *v);
void					glVertexAttribI2i									(glw::GLuint index, glw::GLint x, glw::GLint y);
void					glVertexAttribI2iv									(glw::GLuint index, const glw::GLint *v);
void					glVertexAttribI2ui									(glw::GLuint index, glw::GLuint x, glw::GLuint y);
void					glVertexAttribI2uiv									(glw::GLuint index, const glw::GLuint *v);
void					glVertexAttribI3i									(glw::GLuint index, glw::GLint x, glw::GLint y, glw::GLint z);
void					glVertexAttribI3iv									(glw::GLuint index, const glw::GLint *v);
void					glVertexAttribI3ui									(glw::GLuint index, glw::GLuint x, glw::GLuint y, glw::GLuint z);
void					glVertexAttribI3uiv									(glw::GLuint index, const glw::GLuint *v);
void					glVertexAttribI4bv									(glw::GLuint index, const glw::GLbyte *v);
void					glVertexAttribI4i									(glw::GLuint index, glw::GLint x, glw::GLint y, glw::GLint z, glw::GLint w);
void					glVertexAttribI4iv									(glw::GLuint index, const glw::GLint *v);
void					glVertexAttribI4sv									(glw::GLuint index, const glw::GLshort *v);
void					glVertexAttribI4ubv									(glw::GLuint index, const glw::GLubyte *v);
void					glVertexAttribI4ui									(glw::GLuint index, glw::GLuint x, glw::GLuint y, glw::GLuint z, glw::GLuint w);
void					glVertexAttribI4uiv									(glw::GLuint index, const glw::GLuint *v);
void					glVertexAttribI4usv									(glw::GLuint index, const glw::GLushort *v);
void					glVertexAttribIFormat								(glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLuint relativeoffset);
void					glVertexAttribIPointer								(glw::GLuint index, glw::GLint size, glw::GLenum type, glw::GLsizei stride, const void *pointer);
void					glVertexAttribL1d									(glw::GLuint index, glw::GLdouble x);
void					glVertexAttribL1dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttribL2d									(glw::GLuint index, glw::GLdouble x, glw::GLdouble y);
void					glVertexAttribL2dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttribL3d									(glw::GLuint index, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z);
void					glVertexAttribL3dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttribL4d									(glw::GLuint index, glw::GLdouble x, glw::GLdouble y, glw::GLdouble z, glw::GLdouble w);
void					glVertexAttribL4dv									(glw::GLuint index, const glw::GLdouble *v);
void					glVertexAttribLFormat								(glw::GLuint attribindex, glw::GLint size, glw::GLenum type, glw::GLuint relativeoffset);
void					glVertexAttribLPointer								(glw::GLuint index, glw::GLint size, glw::GLenum type, glw::GLsizei stride, const void *pointer);
void					glVertexAttribP1ui									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, glw::GLuint value);
void					glVertexAttribP1uiv									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, const glw::GLuint *value);
void					glVertexAttribP2ui									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, glw::GLuint value);
void					glVertexAttribP2uiv									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, const glw::GLuint *value);
void					glVertexAttribP3ui									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, glw::GLuint value);
void					glVertexAttribP3uiv									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, const glw::GLuint *value);
void					glVertexAttribP4ui									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, glw::GLuint value);
void					glVertexAttribP4uiv									(glw::GLuint index, glw::GLenum type, glw::GLboolean normalized, const glw::GLuint *value);
void					glVertexAttribPointer								(glw::GLuint index, glw::GLint size, glw::GLenum type, glw::GLboolean normalized, glw::GLsizei stride, const void *pointer);
void					glVertexBindingDivisor								(glw::GLuint bindingindex, glw::GLuint divisor);
void					glViewport											(glw::GLint x, glw::GLint y, glw::GLsizei width, glw::GLsizei height);
void					glViewportArrayv									(glw::GLuint first, glw::GLsizei count, const glw::GLfloat *v);
void					glViewportIndexedf									(glw::GLuint index, glw::GLfloat x, glw::GLfloat y, glw::GLfloat w, glw::GLfloat h);
void					glViewportIndexedfv									(glw::GLuint index, const glw::GLfloat *v);
void					glWaitSync											(glw::GLsync sync, glw::GLbitfield flags, glw::GLuint64 timeout);
