/* 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 d8371b44919d61c02e60f446a4b5461fda910f71.
 */
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					glFramebufferShadingRateEXT							(glw::GLenum target, glw::GLenum attachment, glw::GLuint texture, glw::GLint baseLayer, glw::GLsizei numLayers, glw::GLsizei texelWidth, glw::GLsizei texelHeight);
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					glGetFragmentShadingRatesEXT						(glw::GLsizei samples, glw::GLsizei maxCount, glw::GLsizei *count, glw::GLenum *shadingRates);
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 count, glw::GLint *params);
void					glGetInternalformati64v								(glw::GLenum target, glw::GLenum internalformat, glw::GLenum pname, glw::GLsizei count, glw::GLint64 *params);
void					glGetInternalformativ								(glw::GLenum target, glw::GLenum internalformat, glw::GLenum pname, glw::GLsizei count, 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 count, 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 count, 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					glShadingRateEXT									(glw::GLenum rate);
void					glShadingRateCombinerOpsEXT							(glw::GLenum combinerOp0, glw::GLenum combinerOp1);
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);
