/* 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 30159.
 */
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					glBlendBarrierKHR								(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					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					glPrimitiveBoundingBoxEXT						(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					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);
