/* 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 32093.
 */
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					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					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);
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					glClearNamedBufferSubData						(glw::GLuint buffer, glw::GLenum internalformat, glw::GLintptr offset, glw::GLsizeiptr size, glw::GLenum format, glw::GLenum type, const void *data);
void					glClearNamedFramebufferfi						(glw::GLuint framebuffer, glw::GLenum buffer, const 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);
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					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					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					glCompressedTextureSubImage1D					(glw::GLuint texture, glw::GLint level, glw::GLint xoffset, glw::GLsizei width, glw::GLenum format, glw::GLsizei imageSize, const void *data);
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					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					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					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					glCopyTextureSubImage1D							(glw::GLuint texture, 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					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					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					glDepthFunc										(glw::GLenum func);
void					glDepthMask										(glw::GLboolean flag);
void					glDepthRange									(glw::GLdouble near, glw::GLdouble far);
void					glDepthRangeArrayv								(glw::GLuint first, glw::GLsizei count, const glw::GLdouble *v);
void					glDepthRangeIndexed								(glw::GLuint index, glw::GLdouble n, glw::GLdouble f);
void					glDepthRangef									(glw::GLfloat n, glw::GLfloat f);
void					glDetachShader									(glw::GLuint program, glw::GLuint shader);
void					glDisable										(glw::GLenum cap);
void					glDisableVertexArrayAttrib						(glw::GLuint vaobj, glw::GLuint index);
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					glEnableVertexArrayAttrib						(glw::GLuint vaobj, glw::GLuint index);
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					glFramebufferParameteri							(glw::GLenum target, glw::GLenum pname, glw::GLint param);
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					glFramebufferTextureLayer						(glw::GLenum target, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLint layer);
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					glGenerateTextureMipmap							(glw::GLuint texture);
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					glGetCompressedTexImage							(glw::GLenum target, glw::GLint level, void *img);
void					glGetCompressedTextureImage						(glw::GLuint texture, glw::GLint level, glw::GLsizei bufSize, void *pixels);
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);
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					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					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					glGetNamedBufferPointerv						(glw::GLuint buffer, glw::GLenum pname, void **params);
void					glGetNamedBufferSubData							(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					glGetNamedFramebufferParameteriv				(glw::GLuint framebuffer, glw::GLenum pname, glw::GLint *param);
void					glGetNamedRenderbufferParameteriv				(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					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					glGetTextureLevelParameterfv					(glw::GLuint texture, glw::GLint level, glw::GLenum pname, glw::GLfloat *params);
void					glGetTextureLevelParameteriv					(glw::GLuint texture, glw::GLint level, glw::GLenum pname, glw::GLint *params);
void					glGetTextureParameterIiv						(glw::GLuint texture, glw::GLenum pname, glw::GLint *params);
void					glGetTextureParameterIuiv						(glw::GLuint texture, glw::GLenum pname, glw::GLuint *params);
void					glGetTextureParameterfv							(glw::GLuint texture, glw::GLenum pname, glw::GLfloat *params);
void					glGetTextureParameteriv							(glw::GLuint texture, 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					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 *					glMapNamedBufferRange							(glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr length, glw::GLbitfield access);
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					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					glNamedBufferData								(glw::GLuint buffer, glw::GLsizeiptr size, const void *data, glw::GLenum usage);
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					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					glNamedFramebufferReadBuffer					(glw::GLuint framebuffer, glw::GLenum src);
void					glNamedFramebufferRenderbuffer					(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					glNamedFramebufferTextureLayer					(glw::GLuint framebuffer, glw::GLenum attachment, glw::GLuint texture, glw::GLint level, glw::GLint layer);
void					glNamedRenderbufferStorage						(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					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					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					glProgramUniform1dv								(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					glProgramUniform2dv								(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					glProgramUniform3dv								(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					glProgramUniform4dv								(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					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					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					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					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					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					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					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					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					glProgramUniformMatrix4x3fv						(glw::GLuint program, glw::GLint location, glw::GLsizei count, glw::GLboolean transpose, const glw::GLfloat *value);
void					glProvokingVertex								(glw::GLenum mode);
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					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					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					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					glTextureBarrier								(void);
void					glTextureBuffer									(glw::GLuint texture, glw::GLenum internalformat, glw::GLuint buffer);
void					glTextureBufferRange							(glw::GLuint texture, glw::GLenum internalformat, glw::GLuint buffer, glw::GLintptr offset, glw::GLsizeiptr size);
void					glTextureParameterIiv							(glw::GLuint texture, glw::GLenum pname, const glw::GLint *params);
void					glTextureParameterIuiv							(glw::GLuint texture, glw::GLenum pname, const glw::GLuint *params);
void					glTextureParameterf								(glw::GLuint texture, glw::GLenum pname, glw::GLfloat param);
void					glTextureParameterfv							(glw::GLuint texture, glw::GLenum pname, const glw::GLfloat *param);
void					glTextureParameteri								(glw::GLuint texture, glw::GLenum pname, glw::GLint param);
void					glTextureParameteriv							(glw::GLuint texture, glw::GLenum pname, const glw::GLint *param);
void					glTextureStorage1D								(glw::GLuint texture, 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					glTextureStorage2DMultisample					(glw::GLuint texture, 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					glTextureStorage3DMultisample					(glw::GLuint texture, 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					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					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					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);
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					glVertexArrayBindingDivisor						(glw::GLuint vaobj, glw::GLuint bindingindex, glw::GLuint divisor);
void					glVertexArrayElementBuffer						(glw::GLuint vaobj, glw::GLuint buffer);
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					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);
