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