void API_ENTRY(glBlendBarrierKHR)(void) {
    CALL_GL_API(glBlendBarrierKHR);
}
void API_ENTRY(glDebugMessageControlKHR)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled) {
    CALL_GL_API(glDebugMessageControlKHR, source, type, severity, count, ids, enabled);
}
void API_ENTRY(glDebugMessageInsertKHR)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf) {
    CALL_GL_API(glDebugMessageInsertKHR, source, type, id, severity, length, buf);
}
void API_ENTRY(glDebugMessageCallbackKHR)(GLDEBUGPROCKHR callback, const void *userParam) {
    CALL_GL_API(glDebugMessageCallbackKHR, callback, userParam);
}
GLuint API_ENTRY(glGetDebugMessageLogKHR)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog) {
    CALL_GL_API_RETURN(glGetDebugMessageLogKHR, count, bufSize, sources, types, ids, severities, lengths, messageLog);
}
void API_ENTRY(glPushDebugGroupKHR)(GLenum source, GLuint id, GLsizei length, const GLchar *message) {
    CALL_GL_API(glPushDebugGroupKHR, source, id, length, message);
}
void API_ENTRY(glPopDebugGroupKHR)(void) {
    CALL_GL_API(glPopDebugGroupKHR);
}
void API_ENTRY(glObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label) {
    CALL_GL_API(glObjectLabelKHR, identifier, name, length, label);
}
void API_ENTRY(glGetObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label) {
    CALL_GL_API(glGetObjectLabelKHR, identifier, name, bufSize, length, label);
}
void API_ENTRY(glObjectPtrLabelKHR)(const void *ptr, GLsizei length, const GLchar *label) {
    CALL_GL_API(glObjectPtrLabelKHR, ptr, length, label);
}
void API_ENTRY(glGetObjectPtrLabelKHR)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label) {
    CALL_GL_API(glGetObjectPtrLabelKHR, ptr, bufSize, length, label);
}
void API_ENTRY(glGetPointervKHR)(GLenum pname, void **params) {
    CALL_GL_API(glGetPointervKHR, pname, params);
}
void API_ENTRY(glMaxShaderCompilerThreadsKHR)(GLuint count) {
    CALL_GL_API(glMaxShaderCompilerThreadsKHR, count);
}
GLenum API_ENTRY(glGetGraphicsResetStatusKHR)(void) {
    CALL_GL_API_RETURN(glGetGraphicsResetStatusKHR);
}
void API_ENTRY(glReadnPixelsKHR)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data) {
    CALL_GL_API(glReadnPixelsKHR, x, y, width, height, format, type, bufSize, data);
}
void API_ENTRY(glGetnUniformfvKHR)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params) {
    CALL_GL_API(glGetnUniformfvKHR, program, location, bufSize, params);
}
void API_ENTRY(glGetnUniformivKHR)(GLuint program, GLint location, GLsizei bufSize, GLint *params) {
    CALL_GL_API(glGetnUniformivKHR, program, location, bufSize, params);
}
void API_ENTRY(glGetnUniformuivKHR)(GLuint program, GLint location, GLsizei bufSize, GLuint *params) {
    CALL_GL_API(glGetnUniformuivKHR, program, location, bufSize, params);
}
void API_ENTRY(glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image) {
    CALL_GL_API(glEGLImageTargetTexture2DOES, target, image);
}
void API_ENTRY(glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {
    CALL_GL_API(glEGLImageTargetRenderbufferStorageOES, target, image);
}
void API_ENTRY(glCopyImageSubDataOES)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) {
    CALL_GL_API(glCopyImageSubDataOES, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
}
void API_ENTRY(glEnableiOES)(GLenum target, GLuint index) {
    CALL_GL_API(glEnableiOES, target, index);
}
void API_ENTRY(glDisableiOES)(GLenum target, GLuint index) {
    CALL_GL_API(glDisableiOES, target, index);
}
void API_ENTRY(glBlendEquationiOES)(GLuint buf, GLenum mode) {
    CALL_GL_API(glBlendEquationiOES, buf, mode);
}
void API_ENTRY(glBlendEquationSeparateiOES)(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {
    CALL_GL_API(glBlendEquationSeparateiOES, buf, modeRGB, modeAlpha);
}
void API_ENTRY(glBlendFunciOES)(GLuint buf, GLenum src, GLenum dst) {
    CALL_GL_API(glBlendFunciOES, buf, src, dst);
}
void API_ENTRY(glBlendFuncSeparateiOES)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
    CALL_GL_API(glBlendFuncSeparateiOES, buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
}
void API_ENTRY(glColorMaskiOES)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {
    CALL_GL_API(glColorMaskiOES, index, r, g, b, a);
}
GLboolean API_ENTRY(glIsEnablediOES)(GLenum target, GLuint index) {
    CALL_GL_API_RETURN(glIsEnablediOES, target, index);
}
void API_ENTRY(glDrawElementsBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex) {
    CALL_GL_API(glDrawElementsBaseVertexOES, mode, count, type, indices, basevertex);
}
void API_ENTRY(glDrawRangeElementsBaseVertexOES)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex) {
    CALL_GL_API(glDrawRangeElementsBaseVertexOES, mode, start, end, count, type, indices, basevertex);
}
void API_ENTRY(glDrawElementsInstancedBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) {
    CALL_GL_API(glDrawElementsInstancedBaseVertexOES, mode, count, type, indices, instancecount, basevertex);
}
void API_ENTRY(glMultiDrawElementsBaseVertexEXT)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex) {
    CALL_GL_API(glMultiDrawElementsBaseVertexEXT, mode, count, type, indices, primcount, basevertex);
}
void API_ENTRY(glFramebufferTextureOES)(GLenum target, GLenum attachment, GLuint texture, GLint level) {
    CALL_GL_API(glFramebufferTextureOES, target, attachment, texture, level);
}
void API_ENTRY(glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary) {
    CALL_GL_API(glGetProgramBinaryOES, program, bufSize, length, binaryFormat, binary);
}
void API_ENTRY(glProgramBinaryOES)(GLuint program, GLenum binaryFormat, const void *binary, GLint length) {
    CALL_GL_API(glProgramBinaryOES, program, binaryFormat, binary, length);
}
void * API_ENTRY(glMapBufferOES)(GLenum target, GLenum access) {
    CALL_GL_API_RETURN(glMapBufferOES, target, access);
}
GLboolean API_ENTRY(glUnmapBufferOES)(GLenum target) {
    CALL_GL_API_RETURN(glUnmapBufferOES, target);
}
void API_ENTRY(glGetBufferPointervOES)(GLenum target, GLenum pname, void **params) {
    CALL_GL_API(glGetBufferPointervOES, target, pname, params);
}
void API_ENTRY(glPrimitiveBoundingBoxOES)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW) {
    CALL_GL_API(glPrimitiveBoundingBoxOES, minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
}
void API_ENTRY(glMinSampleShadingOES)(GLfloat value) {
    CALL_GL_API(glMinSampleShadingOES, value);
}
void API_ENTRY(glPatchParameteriOES)(GLenum pname, GLint value) {
    CALL_GL_API(glPatchParameteriOES, pname, value);
}
void API_ENTRY(glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels) {
    CALL_GL_API(glTexImage3DOES, target, level, internalformat, width, height, depth, border, format, type, pixels);
}
void API_ENTRY(glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels) {
    CALL_GL_API(glTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
}
void API_ENTRY(glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
    CALL_GL_API(glCopyTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, x, y, width, height);
}
void API_ENTRY(glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data) {
    CALL_GL_API(glCompressedTexImage3DOES, target, level, internalformat, width, height, depth, border, imageSize, data);
}
void API_ENTRY(glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data) {
    CALL_GL_API(glCompressedTexSubImage3DOES, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
}
void API_ENTRY(glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {
    CALL_GL_API(glFramebufferTexture3DOES, target, attachment, textarget, texture, level, zoffset);
}
void API_ENTRY(glTexParameterIivOES)(GLenum target, GLenum pname, const GLint *params) {
    CALL_GL_API(glTexParameterIivOES, target, pname, params);
}
void API_ENTRY(glTexParameterIuivOES)(GLenum target, GLenum pname, const GLuint *params) {
    CALL_GL_API(glTexParameterIuivOES, target, pname, params);
}
void API_ENTRY(glGetTexParameterIivOES)(GLenum target, GLenum pname, GLint *params) {
    CALL_GL_API(glGetTexParameterIivOES, target, pname, params);
}
void API_ENTRY(glGetTexParameterIuivOES)(GLenum target, GLenum pname, GLuint *params) {
    CALL_GL_API(glGetTexParameterIuivOES, target, pname, params);
}
void API_ENTRY(glSamplerParameterIivOES)(GLuint sampler, GLenum pname, const GLint *param) {
    CALL_GL_API(glSamplerParameterIivOES, sampler, pname, param);
}
void API_ENTRY(glSamplerParameterIuivOES)(GLuint sampler, GLenum pname, const GLuint *param) {
    CALL_GL_API(glSamplerParameterIuivOES, sampler, pname, param);
}
void API_ENTRY(glGetSamplerParameterIivOES)(GLuint sampler, GLenum pname, GLint *params) {
    CALL_GL_API(glGetSamplerParameterIivOES, sampler, pname, params);
}
void API_ENTRY(glGetSamplerParameterIuivOES)(GLuint sampler, GLenum pname, GLuint *params) {
    CALL_GL_API(glGetSamplerParameterIuivOES, sampler, pname, params);
}
void API_ENTRY(glTexBufferOES)(GLenum target, GLenum internalformat, GLuint buffer) {
    CALL_GL_API(glTexBufferOES, target, internalformat, buffer);
}
void API_ENTRY(glTexBufferRangeOES)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) {
    CALL_GL_API(glTexBufferRangeOES, target, internalformat, buffer, offset, size);
}
void API_ENTRY(glTexStorage3DMultisampleOES)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) {
    CALL_GL_API(glTexStorage3DMultisampleOES, target, samples, internalformat, width, height, depth, fixedsamplelocations);
}
void API_ENTRY(glTextureViewOES)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) {
    CALL_GL_API(glTextureViewOES, texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);
}
void API_ENTRY(glBindVertexArrayOES)(GLuint array) {
    CALL_GL_API(glBindVertexArrayOES, array);
}
void API_ENTRY(glDeleteVertexArraysOES)(GLsizei n, const GLuint *arrays) {
    CALL_GL_API(glDeleteVertexArraysOES, n, arrays);
}
void API_ENTRY(glGenVertexArraysOES)(GLsizei n, GLuint *arrays) {
    CALL_GL_API(glGenVertexArraysOES, n, arrays);
}
GLboolean API_ENTRY(glIsVertexArrayOES)(GLuint array) {
    CALL_GL_API_RETURN(glIsVertexArrayOES, array);
}
void API_ENTRY(glViewportArrayvOES)(GLuint first, GLsizei count, const GLfloat *v) {
    CALL_GL_API(glViewportArrayvOES, first, count, v);
}
void API_ENTRY(glViewportIndexedfOES)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) {
    CALL_GL_API(glViewportIndexedfOES, index, x, y, w, h);
}
void API_ENTRY(glViewportIndexedfvOES)(GLuint index, const GLfloat *v) {
    CALL_GL_API(glViewportIndexedfvOES, index, v);
}
void API_ENTRY(glScissorArrayvOES)(GLuint first, GLsizei count, const GLint *v) {
    CALL_GL_API(glScissorArrayvOES, first, count, v);
}
void API_ENTRY(glScissorIndexedOES)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) {
    CALL_GL_API(glScissorIndexedOES, index, left, bottom, width, height);
}
void API_ENTRY(glScissorIndexedvOES)(GLuint index, const GLint *v) {
    CALL_GL_API(glScissorIndexedvOES, index, v);
}
void API_ENTRY(glDepthRangeArrayfvOES)(GLuint first, GLsizei count, const GLfloat *v) {
    CALL_GL_API(glDepthRangeArrayfvOES, first, count, v);
}
void API_ENTRY(glDepthRangeIndexedfOES)(GLuint index, GLfloat n, GLfloat f) {
    CALL_GL_API(glDepthRangeIndexedfOES, index, n, f);
}
void API_ENTRY(glGetFloati_vOES)(GLenum target, GLuint index, GLfloat *data) {
    CALL_GL_API(glGetFloati_vOES, target, index, data);
}
void API_ENTRY(glGetPerfMonitorGroupsAMD)(GLint *numGroups, GLsizei groupsSize, GLuint *groups) {
    CALL_GL_API(glGetPerfMonitorGroupsAMD, numGroups, groupsSize, groups);
}
void API_ENTRY(glGetPerfMonitorCountersAMD)(GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters) {
    CALL_GL_API(glGetPerfMonitorCountersAMD, group, numCounters, maxActiveCounters, counterSize, counters);
}
void API_ENTRY(glGetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString) {
    CALL_GL_API(glGetPerfMonitorGroupStringAMD, group, bufSize, length, groupString);
}
void API_ENTRY(glGetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString) {
    CALL_GL_API(glGetPerfMonitorCounterStringAMD, group, counter, bufSize, length, counterString);
}
void API_ENTRY(glGetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, void *data) {
    CALL_GL_API(glGetPerfMonitorCounterInfoAMD, group, counter, pname, data);
}
void API_ENTRY(glGenPerfMonitorsAMD)(GLsizei n, GLuint *monitors) {
    CALL_GL_API(glGenPerfMonitorsAMD, n, monitors);
}
void API_ENTRY(glDeletePerfMonitorsAMD)(GLsizei n, GLuint *monitors) {
    CALL_GL_API(glDeletePerfMonitorsAMD, n, monitors);
}
void API_ENTRY(glSelectPerfMonitorCountersAMD)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList) {
    CALL_GL_API(glSelectPerfMonitorCountersAMD, monitor, enable, group, numCounters, counterList);
}
void API_ENTRY(glBeginPerfMonitorAMD)(GLuint monitor) {
    CALL_GL_API(glBeginPerfMonitorAMD, monitor);
}
void API_ENTRY(glEndPerfMonitorAMD)(GLuint monitor) {
    CALL_GL_API(glEndPerfMonitorAMD, monitor);
}
void API_ENTRY(glGetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten) {
    CALL_GL_API(glGetPerfMonitorCounterDataAMD, monitor, pname, dataSize, data, bytesWritten);
}
void API_ENTRY(glBlitFramebufferANGLE)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
    CALL_GL_API(glBlitFramebufferANGLE, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
void API_ENTRY(glRenderbufferStorageMultisampleANGLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleANGLE, target, samples, internalformat, width, height);
}
void API_ENTRY(glDrawArraysInstancedANGLE)(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
    CALL_GL_API(glDrawArraysInstancedANGLE, mode, first, count, primcount);
}
void API_ENTRY(glDrawElementsInstancedANGLE)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) {
    CALL_GL_API(glDrawElementsInstancedANGLE, mode, count, type, indices, primcount);
}
void API_ENTRY(glVertexAttribDivisorANGLE)(GLuint index, GLuint divisor) {
    CALL_GL_API(glVertexAttribDivisorANGLE, index, divisor);
}
void API_ENTRY(glGetTranslatedShaderSourceANGLE)(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source) {
    CALL_GL_API(glGetTranslatedShaderSourceANGLE, shader, bufsize, length, source);
}
void API_ENTRY(glCopyTextureLevelsAPPLE)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount) {
    CALL_GL_API(glCopyTextureLevelsAPPLE, destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount);
}
void API_ENTRY(glRenderbufferStorageMultisampleAPPLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleAPPLE, target, samples, internalformat, width, height);
}
void API_ENTRY(glResolveMultisampleFramebufferAPPLE)(void) {
    CALL_GL_API(glResolveMultisampleFramebufferAPPLE);
}
GLsync API_ENTRY(glFenceSyncAPPLE)(GLenum condition, GLbitfield flags) {
    CALL_GL_API_RETURN(glFenceSyncAPPLE, condition, flags);
}
GLboolean API_ENTRY(glIsSyncAPPLE)(GLsync sync) {
    CALL_GL_API_RETURN(glIsSyncAPPLE, sync);
}
void API_ENTRY(glDeleteSyncAPPLE)(GLsync sync) {
    CALL_GL_API(glDeleteSyncAPPLE, sync);
}
GLenum API_ENTRY(glClientWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout) {
    CALL_GL_API_RETURN(glClientWaitSyncAPPLE, sync, flags, timeout);
}
void API_ENTRY(glWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout) {
    CALL_GL_API(glWaitSyncAPPLE, sync, flags, timeout);
}
void API_ENTRY(glGetInteger64vAPPLE)(GLenum pname, GLint64 *params) {
    CALL_GL_API(glGetInteger64vAPPLE, pname, params);
}
void API_ENTRY(glGetSyncivAPPLE)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) {
    CALL_GL_API(glGetSyncivAPPLE, sync, pname, bufSize, length, values);
}
void API_ENTRY(glEGLImageTargetTexStorageEXT)(GLenum target, GLeglImageOES image, const GLint* attrib_list) {
    CALL_GL_API(glEGLImageTargetTexStorageEXT, target, image, attrib_list);
}
void API_ENTRY(glEGLImageTargetTextureStorageEXT)(GLuint texture, GLeglImageOES image, const GLint* attrib_list) {
    CALL_GL_API(glEGLImageTargetTextureStorageEXT, texture, image, attrib_list);
}
void API_ENTRY(glDrawArraysInstancedBaseInstanceEXT)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) {
    CALL_GL_API(glDrawArraysInstancedBaseInstanceEXT, mode, first, count, instancecount, baseinstance);
}
void API_ENTRY(glDrawElementsInstancedBaseInstanceEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance) {
    CALL_GL_API(glDrawElementsInstancedBaseInstanceEXT, mode, count, type, indices, instancecount, baseinstance);
}
void API_ENTRY(glDrawElementsInstancedBaseVertexBaseInstanceEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) {
    CALL_GL_API(glDrawElementsInstancedBaseVertexBaseInstanceEXT, mode, count, type, indices, instancecount, basevertex, baseinstance);
}
void API_ENTRY(glBindFragDataLocationIndexedEXT)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name) {
    CALL_GL_API(glBindFragDataLocationIndexedEXT, program, colorNumber, index, name);
}
void API_ENTRY(glBindFragDataLocationEXT)(GLuint program, GLuint color, const GLchar *name) {
    CALL_GL_API(glBindFragDataLocationEXT, program, color, name);
}
GLint API_ENTRY(glGetProgramResourceLocationIndexEXT)(GLuint program, GLenum programInterface, const GLchar *name) {
    CALL_GL_API_RETURN(glGetProgramResourceLocationIndexEXT, program, programInterface, name);
}
GLint API_ENTRY(glGetFragDataIndexEXT)(GLuint program, const GLchar *name) {
    CALL_GL_API_RETURN(glGetFragDataIndexEXT, program, name);
}
void API_ENTRY(glBufferStorageEXT)(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags) {
    CALL_GL_API(glBufferStorageEXT, target, size, data, flags);
}
void API_ENTRY(glClearTexImageEXT)(GLuint texture, GLint level, GLenum format, GLenum type, const void *data) {
    CALL_GL_API(glClearTexImageEXT, texture, level, format, type, data);
}
void API_ENTRY(glClearTexSubImageEXT)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data) {
    CALL_GL_API(glClearTexSubImageEXT, texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
}
void API_ENTRY(glClipControlEXT)(GLenum origin, GLenum depth) {
    CALL_GL_API(glClipControlEXT, origin, depth);
}
void API_ENTRY(glCopyImageSubDataEXT)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) {
    CALL_GL_API(glCopyImageSubDataEXT, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);
}
void API_ENTRY(glLabelObjectEXT)(GLenum type, GLuint object, GLsizei length, const GLchar *label) {
    CALL_GL_API(glLabelObjectEXT, type, object, length, label);
}
void API_ENTRY(glGetObjectLabelEXT)(GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label) {
    CALL_GL_API(glGetObjectLabelEXT, type, object, bufSize, length, label);
}
void API_ENTRY(glInsertEventMarkerEXT)(GLsizei length, const GLchar *marker) {
    CALL_GL_API(glInsertEventMarkerEXT, length, marker);
}
void API_ENTRY(glPushGroupMarkerEXT)(GLsizei length, const GLchar *marker) {
    CALL_GL_API(glPushGroupMarkerEXT, length, marker);
}
void API_ENTRY(glPopGroupMarkerEXT)(void) {
    CALL_GL_API(glPopGroupMarkerEXT);
}
void API_ENTRY(glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum *attachments) {
    CALL_GL_API(glDiscardFramebufferEXT, target, numAttachments, attachments);
}
void API_ENTRY(glGenQueriesEXT)(GLsizei n, GLuint *ids) {
    CALL_GL_API(glGenQueriesEXT, n, ids);
}
void API_ENTRY(glDeleteQueriesEXT)(GLsizei n, const GLuint *ids) {
    CALL_GL_API(glDeleteQueriesEXT, n, ids);
}
GLboolean API_ENTRY(glIsQueryEXT)(GLuint id) {
    CALL_GL_API_RETURN(glIsQueryEXT, id);
}
void API_ENTRY(glBeginQueryEXT)(GLenum target, GLuint id) {
    CALL_GL_API(glBeginQueryEXT, target, id);
}
void API_ENTRY(glEndQueryEXT)(GLenum target) {
    CALL_GL_API(glEndQueryEXT, target);
}
void API_ENTRY(glQueryCounterEXT)(GLuint id, GLenum target) {
    CALL_GL_API(glQueryCounterEXT, id, target);
}
void API_ENTRY(glGetQueryivEXT)(GLenum target, GLenum pname, GLint *params) {
    CALL_GL_API(glGetQueryivEXT, target, pname, params);
}
void API_ENTRY(glGetQueryObjectivEXT)(GLuint id, GLenum pname, GLint *params) {
    CALL_GL_API(glGetQueryObjectivEXT, id, pname, params);
}
void API_ENTRY(glGetQueryObjectuivEXT)(GLuint id, GLenum pname, GLuint *params) {
    CALL_GL_API(glGetQueryObjectuivEXT, id, pname, params);
}
void API_ENTRY(glGetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64 *params) {
    CALL_GL_API(glGetQueryObjecti64vEXT, id, pname, params);
}
void API_ENTRY(glGetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64 *params) {
    CALL_GL_API(glGetQueryObjectui64vEXT, id, pname, params);
}
void API_ENTRY(glDrawBuffersEXT)(GLsizei n, const GLenum *bufs) {
    CALL_GL_API(glDrawBuffersEXT, n, bufs);
}
void API_ENTRY(glEnableiEXT)(GLenum target, GLuint index) {
    CALL_GL_API(glEnableiEXT, target, index);
}
void API_ENTRY(glDisableiEXT)(GLenum target, GLuint index) {
    CALL_GL_API(glDisableiEXT, target, index);
}
void API_ENTRY(glBlendEquationiEXT)(GLuint buf, GLenum mode) {
    CALL_GL_API(glBlendEquationiEXT, buf, mode);
}
void API_ENTRY(glBlendEquationSeparateiEXT)(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {
    CALL_GL_API(glBlendEquationSeparateiEXT, buf, modeRGB, modeAlpha);
}
void API_ENTRY(glBlendFunciEXT)(GLuint buf, GLenum src, GLenum dst) {
    CALL_GL_API(glBlendFunciEXT, buf, src, dst);
}
void API_ENTRY(glBlendFuncSeparateiEXT)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
    CALL_GL_API(glBlendFuncSeparateiEXT, buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
}
void API_ENTRY(glColorMaskiEXT)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {
    CALL_GL_API(glColorMaskiEXT, index, r, g, b, a);
}
GLboolean API_ENTRY(glIsEnablediEXT)(GLenum target, GLuint index) {
    CALL_GL_API_RETURN(glIsEnablediEXT, target, index);
}
void API_ENTRY(glDrawElementsBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex) {
    CALL_GL_API(glDrawElementsBaseVertexEXT, mode, count, type, indices, basevertex);
}
void API_ENTRY(glDrawRangeElementsBaseVertexEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex) {
    CALL_GL_API(glDrawRangeElementsBaseVertexEXT, mode, start, end, count, type, indices, basevertex);
}
void API_ENTRY(glDrawElementsInstancedBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) {
    CALL_GL_API(glDrawElementsInstancedBaseVertexEXT, mode, count, type, indices, instancecount, basevertex);
}
void API_ENTRY(glMultiDrawElementsBaseVertexOES)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex) {
    CALL_GL_API(glMultiDrawElementsBaseVertexOES, mode, count, type, indices, primcount, basevertex);
}
void API_ENTRY(glDrawArraysInstancedEXT)(GLenum mode, GLint start, GLsizei count, GLsizei primcount) {
    CALL_GL_API(glDrawArraysInstancedEXT, mode, start, count, primcount);
}
void API_ENTRY(glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) {
    CALL_GL_API(glDrawElementsInstancedEXT, mode, count, type, indices, primcount);
}
void API_ENTRY(glDrawTransformFeedbackEXT)(GLenum mode, GLuint id) {
    CALL_GL_API(glDrawTransformFeedbackEXT, mode, id);
}
void API_ENTRY(glDrawTransformFeedbackInstancedEXT)(GLenum mode, GLuint id, GLsizei instancecount) {
    CALL_GL_API(glDrawTransformFeedbackInstancedEXT, mode, id, instancecount);
}
void API_ENTRY(glBufferStorageExternalEXT)(GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) {
    CALL_GL_API(glBufferStorageExternalEXT, target, offset, size, clientBuffer, flags);
}
void API_ENTRY(glNamedBufferStorageExternalEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) {
    CALL_GL_API(glNamedBufferStorageExternalEXT, buffer, offset, size, clientBuffer, flags);
}
void API_ENTRY(glFramebufferTextureEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level) {
    CALL_GL_API(glFramebufferTextureEXT, target, attachment, texture, level);
}
void API_ENTRY(glVertexAttribDivisorEXT)(GLuint index, GLuint divisor) {
    CALL_GL_API(glVertexAttribDivisorEXT, index, divisor);
}
void * API_ENTRY(glMapBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {
    CALL_GL_API_RETURN(glMapBufferRangeEXT, target, offset, length, access);
}
void API_ENTRY(glFlushMappedBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length) {
    CALL_GL_API(glFlushMappedBufferRangeEXT, target, offset, length);
}
void API_ENTRY(glGetUnsignedBytevEXT)(GLenum pname, GLubyte *data) {
    CALL_GL_API(glGetUnsignedBytevEXT, pname, data);
}
void API_ENTRY(glGetUnsignedBytei_vEXT)(GLenum target, GLuint index, GLubyte *data) {
    CALL_GL_API(glGetUnsignedBytei_vEXT, target, index, data);
}
void API_ENTRY(glDeleteMemoryObjectsEXT)(GLsizei n, const GLuint *memoryObjects) {
    CALL_GL_API(glDeleteMemoryObjectsEXT, n, memoryObjects);
}
GLboolean API_ENTRY(glIsMemoryObjectEXT)(GLuint memoryObject) {
    CALL_GL_API_RETURN(glIsMemoryObjectEXT, memoryObject);
}
void API_ENTRY(glCreateMemoryObjectsEXT)(GLsizei n, GLuint *memoryObjects) {
    CALL_GL_API(glCreateMemoryObjectsEXT, n, memoryObjects);
}
void API_ENTRY(glMemoryObjectParameterivEXT)(GLuint memoryObject, GLenum pname, const GLint *params) {
    CALL_GL_API(glMemoryObjectParameterivEXT, memoryObject, pname, params);
}
void API_ENTRY(glGetMemoryObjectParameterivEXT)(GLuint memoryObject, GLenum pname, GLint *params) {
    CALL_GL_API(glGetMemoryObjectParameterivEXT, memoryObject, pname, params);
}
void API_ENTRY(glTexStorageMem2DEXT)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTexStorageMem2DEXT, target, levels, internalFormat, width, height, memory, offset);
}
void API_ENTRY(glTexStorageMem2DMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTexStorageMem2DMultisampleEXT, target, samples, internalFormat, width, height, fixedSampleLocations, memory, offset);
}
void API_ENTRY(glTexStorageMem3DEXT)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTexStorageMem3DEXT, target, levels, internalFormat, width, height, depth, memory, offset);
}
void API_ENTRY(glTexStorageMem3DMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTexStorageMem3DMultisampleEXT, target, samples, internalFormat, width, height, depth, fixedSampleLocations, memory, offset);
}
void API_ENTRY(glBufferStorageMemEXT)(GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glBufferStorageMemEXT, target, size, memory, offset);
}
void API_ENTRY(glTextureStorageMem2DEXT)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTextureStorageMem2DEXT, texture, levels, internalFormat, width, height, memory, offset);
}
void API_ENTRY(glTextureStorageMem2DMultisampleEXT)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTextureStorageMem2DMultisampleEXT, texture, samples, internalFormat, width, height, fixedSampleLocations, memory, offset);
}
void API_ENTRY(glTextureStorageMem3DEXT)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTextureStorageMem3DEXT, texture, levels, internalFormat, width, height, depth, memory, offset);
}
void API_ENTRY(glTextureStorageMem3DMultisampleEXT)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glTextureStorageMem3DMultisampleEXT, texture, samples, internalFormat, width, height, depth, fixedSampleLocations, memory, offset);
}
void API_ENTRY(glNamedBufferStorageMemEXT)(GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset) {
    CALL_GL_API(glNamedBufferStorageMemEXT, buffer, size, memory, offset);
}
void API_ENTRY(glImportMemoryFdEXT)(GLuint memory, GLuint64 size, GLenum handleType, GLint fd) {
    CALL_GL_API(glImportMemoryFdEXT, memory, size, handleType, fd);
}
void API_ENTRY(glMultiDrawArraysEXT)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount) {
    CALL_GL_API(glMultiDrawArraysEXT, mode, first, count, primcount);
}
void API_ENTRY(glMultiDrawElementsEXT)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount) {
    CALL_GL_API(glMultiDrawElementsEXT, mode, count, type, indices, primcount);
}
void API_ENTRY(glMultiDrawArraysIndirectEXT)(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride) {
    CALL_GL_API(glMultiDrawArraysIndirectEXT, mode, indirect, drawcount, stride);
}
void API_ENTRY(glMultiDrawElementsIndirectEXT)(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride) {
    CALL_GL_API(glMultiDrawElementsIndirectEXT, mode, type, indirect, drawcount, stride);
}
void API_ENTRY(glRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleEXT, target, samples, internalformat, width, height);
}
void API_ENTRY(glFramebufferTexture2DMultisampleEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
    CALL_GL_API(glFramebufferTexture2DMultisampleEXT, target, attachment, textarget, texture, level, samples);
}
void API_ENTRY(glReadBufferIndexedEXT)(GLenum src, GLint index) {
    CALL_GL_API(glReadBufferIndexedEXT, src, index);
}
void API_ENTRY(glDrawBuffersIndexedEXT)(GLint n, const GLenum *location, const GLint *indices) {
    CALL_GL_API(glDrawBuffersIndexedEXT, n, location, indices);
}
void API_ENTRY(glGetIntegeri_vEXT)(GLenum target, GLuint index, GLint *data) {
    CALL_GL_API(glGetIntegeri_vEXT, target, index, data);
}
void API_ENTRY(glPolygonOffsetClampEXT)(GLfloat factor, GLfloat units, GLfloat clamp) {
    CALL_GL_API(glPolygonOffsetClampEXT, factor, units, clamp);
}
void API_ENTRY(glPrimitiveBoundingBoxEXT)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW) {
    CALL_GL_API(glPrimitiveBoundingBoxEXT, minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
}
void API_ENTRY(glRasterSamplesEXT)(GLuint samples, GLboolean fixedsamplelocations) {
    CALL_GL_API(glRasterSamplesEXT, samples, fixedsamplelocations);
}
GLenum API_ENTRY(glGetGraphicsResetStatusEXT)(void) {
    CALL_GL_API_RETURN(glGetGraphicsResetStatusEXT);
}
void API_ENTRY(glReadnPixelsEXT)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data) {
    CALL_GL_API(glReadnPixelsEXT, x, y, width, height, format, type, bufSize, data);
}
void API_ENTRY(glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params) {
    CALL_GL_API(glGetnUniformfvEXT, program, location, bufSize, params);
}
void API_ENTRY(glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint *params) {
    CALL_GL_API(glGetnUniformivEXT, program, location, bufSize, params);
}
void API_ENTRY(glGenSemaphoresEXT)(GLsizei n, GLuint *semaphores) {
    CALL_GL_API(glGenSemaphoresEXT, n, semaphores);
}
void API_ENTRY(glDeleteSemaphoresEXT)(GLsizei n, const GLuint *semaphores) {
    CALL_GL_API(glDeleteSemaphoresEXT, n, semaphores);
}
GLboolean API_ENTRY(glIsSemaphoreEXT)(GLuint semaphore) {
    CALL_GL_API_RETURN(glIsSemaphoreEXT, semaphore);
}
void API_ENTRY(glSemaphoreParameterui64vEXT)(GLuint semaphore, GLenum pname, const GLuint64 *params) {
    CALL_GL_API(glSemaphoreParameterui64vEXT, semaphore, pname, params);
}
void API_ENTRY(glGetSemaphoreParameterui64vEXT)(GLuint semaphore, GLenum pname, GLuint64 *params) {
    CALL_GL_API(glGetSemaphoreParameterui64vEXT, semaphore, pname, params);
}
void API_ENTRY(glWaitSemaphoreEXT)(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts) {
    CALL_GL_API(glWaitSemaphoreEXT, semaphore, numBufferBarriers, buffers, numTextureBarriers, textures, srcLayouts);
}
void API_ENTRY(glSignalSemaphoreEXT)(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts) {
    CALL_GL_API(glSignalSemaphoreEXT, semaphore, numBufferBarriers, buffers, numTextureBarriers, textures, dstLayouts);
}
void API_ENTRY(glImportSemaphoreFdEXT)(GLuint semaphore, GLenum handleType, GLint fd) {
    CALL_GL_API(glImportSemaphoreFdEXT, semaphore, handleType, fd);
}
void API_ENTRY(glActiveShaderProgramEXT)(GLuint pipeline, GLuint program) {
    CALL_GL_API(glActiveShaderProgramEXT, pipeline, program);
}
void API_ENTRY(glBindProgramPipelineEXT)(GLuint pipeline) {
    CALL_GL_API(glBindProgramPipelineEXT, pipeline);
}
GLuint API_ENTRY(glCreateShaderProgramvEXT)(GLenum type, GLsizei count, const GLchar **strings) {
    CALL_GL_API_RETURN(glCreateShaderProgramvEXT, type, count, strings);
}
void API_ENTRY(glDeleteProgramPipelinesEXT)(GLsizei n, const GLuint *pipelines) {
    CALL_GL_API(glDeleteProgramPipelinesEXT, n, pipelines);
}
void API_ENTRY(glGenProgramPipelinesEXT)(GLsizei n, GLuint *pipelines) {
    CALL_GL_API(glGenProgramPipelinesEXT, n, pipelines);
}
void API_ENTRY(glGetProgramPipelineInfoLogEXT)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog) {
    CALL_GL_API(glGetProgramPipelineInfoLogEXT, pipeline, bufSize, length, infoLog);
}
void API_ENTRY(glGetProgramPipelineivEXT)(GLuint pipeline, GLenum pname, GLint *params) {
    CALL_GL_API(glGetProgramPipelineivEXT, pipeline, pname, params);
}
GLboolean API_ENTRY(glIsProgramPipelineEXT)(GLuint pipeline) {
    CALL_GL_API_RETURN(glIsProgramPipelineEXT, pipeline);
}
void API_ENTRY(glProgramParameteriEXT)(GLuint program, GLenum pname, GLint value) {
    CALL_GL_API(glProgramParameteriEXT, program, pname, value);
}
void API_ENTRY(glProgramUniform1fEXT)(GLuint program, GLint location, GLfloat v0) {
    CALL_GL_API(glProgramUniform1fEXT, program, location, v0);
}
void API_ENTRY(glProgramUniform1fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
    CALL_GL_API(glProgramUniform1fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform1iEXT)(GLuint program, GLint location, GLint v0) {
    CALL_GL_API(glProgramUniform1iEXT, program, location, v0);
}
void API_ENTRY(glProgramUniform1ivEXT)(GLuint program, GLint location, GLsizei count, const GLint *value) {
    CALL_GL_API(glProgramUniform1ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform2fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1) {
    CALL_GL_API(glProgramUniform2fEXT, program, location, v0, v1);
}
void API_ENTRY(glProgramUniform2fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
    CALL_GL_API(glProgramUniform2fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform2iEXT)(GLuint program, GLint location, GLint v0, GLint v1) {
    CALL_GL_API(glProgramUniform2iEXT, program, location, v0, v1);
}
void API_ENTRY(glProgramUniform2ivEXT)(GLuint program, GLint location, GLsizei count, const GLint *value) {
    CALL_GL_API(glProgramUniform2ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform3fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
    CALL_GL_API(glProgramUniform3fEXT, program, location, v0, v1, v2);
}
void API_ENTRY(glProgramUniform3fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
    CALL_GL_API(glProgramUniform3fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform3iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) {
    CALL_GL_API(glProgramUniform3iEXT, program, location, v0, v1, v2);
}
void API_ENTRY(glProgramUniform3ivEXT)(GLuint program, GLint location, GLsizei count, const GLint *value) {
    CALL_GL_API(glProgramUniform3ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform4fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {
    CALL_GL_API(glProgramUniform4fEXT, program, location, v0, v1, v2, v3);
}
void API_ENTRY(glProgramUniform4fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat *value) {
    CALL_GL_API(glProgramUniform4fvEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform4iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {
    CALL_GL_API(glProgramUniform4iEXT, program, location, v0, v1, v2, v3);
}
void API_ENTRY(glProgramUniform4ivEXT)(GLuint program, GLint location, GLsizei count, const GLint *value) {
    CALL_GL_API(glProgramUniform4ivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniformMatrix2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix2fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix3fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix4fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glUseProgramStagesEXT)(GLuint pipeline, GLbitfield stages, GLuint program) {
    CALL_GL_API(glUseProgramStagesEXT, pipeline, stages, program);
}
void API_ENTRY(glValidateProgramPipelineEXT)(GLuint pipeline) {
    CALL_GL_API(glValidateProgramPipelineEXT, pipeline);
}
void API_ENTRY(glProgramUniform1uiEXT)(GLuint program, GLint location, GLuint v0) {
    CALL_GL_API(glProgramUniform1uiEXT, program, location, v0);
}
void API_ENTRY(glProgramUniform2uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1) {
    CALL_GL_API(glProgramUniform2uiEXT, program, location, v0, v1);
}
void API_ENTRY(glProgramUniform3uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) {
    CALL_GL_API(glProgramUniform3uiEXT, program, location, v0, v1, v2);
}
void API_ENTRY(glProgramUniform4uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
    CALL_GL_API(glProgramUniform4uiEXT, program, location, v0, v1, v2, v3);
}
void API_ENTRY(glProgramUniform1uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint *value) {
    CALL_GL_API(glProgramUniform1uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform2uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint *value) {
    CALL_GL_API(glProgramUniform2uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform3uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint *value) {
    CALL_GL_API(glProgramUniform3uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniform4uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint *value) {
    CALL_GL_API(glProgramUniform4uivEXT, program, location, count, value);
}
void API_ENTRY(glProgramUniformMatrix2x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix2x3fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix3x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix3x2fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix2x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix2x4fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix4x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix4x2fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix3x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix3x4fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glProgramUniformMatrix4x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glProgramUniformMatrix4x3fvEXT, program, location, count, transpose, value);
}
void API_ENTRY(glFramebufferFetchBarrierEXT)(void) {
    CALL_GL_API(glFramebufferFetchBarrierEXT);
}
void API_ENTRY(glFramebufferPixelLocalStorageSizeEXT)(GLuint target, GLsizei size) {
    CALL_GL_API(glFramebufferPixelLocalStorageSizeEXT, target, size);
}
GLsizei API_ENTRY(glGetFramebufferPixelLocalStorageSizeEXT)(GLuint target) {
    CALL_GL_API_RETURN(glGetFramebufferPixelLocalStorageSizeEXT, target);
}
void API_ENTRY(glClearPixelLocalStorageuiEXT)(GLsizei offset, GLsizei n, const GLuint *values) {
    CALL_GL_API(glClearPixelLocalStorageuiEXT, offset, n, values);
}
void API_ENTRY(glTexPageCommitmentEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit) {
    CALL_GL_API(glTexPageCommitmentEXT, target, level, xoffset, yoffset, zoffset, width, height, depth, commit);
}
void API_ENTRY(glPatchParameteriEXT)(GLenum pname, GLint value) {
    CALL_GL_API(glPatchParameteriEXT, pname, value);
}
void API_ENTRY(glTexParameterIivEXT)(GLenum target, GLenum pname, const GLint *params) {
    CALL_GL_API(glTexParameterIivEXT, target, pname, params);
}
void API_ENTRY(glTexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint *params) {
    CALL_GL_API(glTexParameterIuivEXT, target, pname, params);
}
void API_ENTRY(glGetTexParameterIivEXT)(GLenum target, GLenum pname, GLint *params) {
    CALL_GL_API(glGetTexParameterIivEXT, target, pname, params);
}
void API_ENTRY(glGetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint *params) {
    CALL_GL_API(glGetTexParameterIuivEXT, target, pname, params);
}
void API_ENTRY(glSamplerParameterIivEXT)(GLuint sampler, GLenum pname, const GLint *param) {
    CALL_GL_API(glSamplerParameterIivEXT, sampler, pname, param);
}
void API_ENTRY(glSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, const GLuint *param) {
    CALL_GL_API(glSamplerParameterIuivEXT, sampler, pname, param);
}
void API_ENTRY(glGetSamplerParameterIivEXT)(GLuint sampler, GLenum pname, GLint *params) {
    CALL_GL_API(glGetSamplerParameterIivEXT, sampler, pname, params);
}
void API_ENTRY(glGetSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, GLuint *params) {
    CALL_GL_API(glGetSamplerParameterIuivEXT, sampler, pname, params);
}
void API_ENTRY(glTexBufferEXT)(GLenum target, GLenum internalformat, GLuint buffer) {
    CALL_GL_API(glTexBufferEXT, target, internalformat, buffer);
}
void API_ENTRY(glTexBufferRangeEXT)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) {
    CALL_GL_API(glTexBufferRangeEXT, target, internalformat, buffer, offset, size);
}
void API_ENTRY(glTexStorage1DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {
    CALL_GL_API(glTexStorage1DEXT, target, levels, internalformat, width);
}
void API_ENTRY(glTexStorage2DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glTexStorage2DEXT, target, levels, internalformat, width, height);
}
void API_ENTRY(glTexStorage3DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
    CALL_GL_API(glTexStorage3DEXT, target, levels, internalformat, width, height, depth);
}
void API_ENTRY(glTextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {
    CALL_GL_API(glTextureStorage1DEXT, texture, target, levels, internalformat, width);
}
void API_ENTRY(glTextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glTextureStorage2DEXT, texture, target, levels, internalformat, width, height);
}
void API_ENTRY(glTextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
    CALL_GL_API(glTextureStorage3DEXT, texture, target, levels, internalformat, width, height, depth);
}
void API_ENTRY(glTextureViewEXT)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) {
    CALL_GL_API(glTextureViewEXT, texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);
}
void API_ENTRY(glWindowRectanglesEXT)(GLenum mode, GLsizei count, const GLint *box) {
    CALL_GL_API(glWindowRectanglesEXT, mode, count, box);
}
GLuint64 API_ENTRY(glGetTextureHandleIMG)(GLuint texture) {
    CALL_GL_API_RETURN(glGetTextureHandleIMG, texture);
}
GLuint64 API_ENTRY(glGetTextureSamplerHandleIMG)(GLuint texture, GLuint sampler) {
    CALL_GL_API_RETURN(glGetTextureSamplerHandleIMG, texture, sampler);
}
void API_ENTRY(glUniformHandleui64IMG)(GLint location, GLuint64 value) {
    CALL_GL_API(glUniformHandleui64IMG, location, value);
}
void API_ENTRY(glUniformHandleui64vIMG)(GLint location, GLsizei count, const GLuint64 *value) {
    CALL_GL_API(glUniformHandleui64vIMG, location, count, value);
}
void API_ENTRY(glProgramUniformHandleui64IMG)(GLuint program, GLint location, GLuint64 value) {
    CALL_GL_API(glProgramUniformHandleui64IMG, program, location, value);
}
void API_ENTRY(glProgramUniformHandleui64vIMG)(GLuint program, GLint location, GLsizei count, const GLuint64 *values) {
    CALL_GL_API(glProgramUniformHandleui64vIMG, program, location, count, values);
}
void API_ENTRY(glFramebufferTexture2DDownsampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale) {
    CALL_GL_API(glFramebufferTexture2DDownsampleIMG, target, attachment, textarget, texture, level, xscale, yscale);
}
void API_ENTRY(glFramebufferTextureLayerDownsampleIMG)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale) {
    CALL_GL_API(glFramebufferTextureLayerDownsampleIMG, target, attachment, texture, level, layer, xscale, yscale);
}
void API_ENTRY(glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleIMG, target, samples, internalformat, width, height);
}
void API_ENTRY(glFramebufferTexture2DMultisampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) {
    CALL_GL_API(glFramebufferTexture2DMultisampleIMG, target, attachment, textarget, texture, level, samples);
}
void API_ENTRY(glApplyFramebufferAttachmentCMAAINTEL)(void) {
    CALL_GL_API(glApplyFramebufferAttachmentCMAAINTEL);
}
void API_ENTRY(glBeginPerfQueryINTEL)(GLuint queryHandle) {
    CALL_GL_API(glBeginPerfQueryINTEL, queryHandle);
}
void API_ENTRY(glCreatePerfQueryINTEL)(GLuint queryId, GLuint *queryHandle) {
    CALL_GL_API(glCreatePerfQueryINTEL, queryId, queryHandle);
}
void API_ENTRY(glDeletePerfQueryINTEL)(GLuint queryHandle) {
    CALL_GL_API(glDeletePerfQueryINTEL, queryHandle);
}
void API_ENTRY(glEndPerfQueryINTEL)(GLuint queryHandle) {
    CALL_GL_API(glEndPerfQueryINTEL, queryHandle);
}
void API_ENTRY(glGetFirstPerfQueryIdINTEL)(GLuint *queryId) {
    CALL_GL_API(glGetFirstPerfQueryIdINTEL, queryId);
}
void API_ENTRY(glGetNextPerfQueryIdINTEL)(GLuint queryId, GLuint *nextQueryId) {
    CALL_GL_API(glGetNextPerfQueryIdINTEL, queryId, nextQueryId);
}
void API_ENTRY(glGetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue) {
    CALL_GL_API(glGetPerfCounterInfoINTEL, queryId, counterId, counterNameLength, counterName, counterDescLength, counterDesc, counterOffset, counterDataSize, counterTypeEnum, counterDataTypeEnum, rawCounterMaxValue);
}
void API_ENTRY(glGetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten) {
    CALL_GL_API(glGetPerfQueryDataINTEL, queryHandle, flags, dataSize, data, bytesWritten);
}
void API_ENTRY(glGetPerfQueryIdByNameINTEL)(GLchar *queryName, GLuint *queryId) {
    CALL_GL_API(glGetPerfQueryIdByNameINTEL, queryName, queryId);
}
void API_ENTRY(glGetPerfQueryInfoINTEL)(GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask) {
    CALL_GL_API(glGetPerfQueryInfoINTEL, queryId, queryNameLength, queryName, dataSize, noCounters, noInstances, capsMask);
}
GLuint64 API_ENTRY(glGetTextureHandleNV)(GLuint texture) {
    CALL_GL_API_RETURN(glGetTextureHandleNV, texture);
}
GLuint64 API_ENTRY(glGetTextureSamplerHandleNV)(GLuint texture, GLuint sampler) {
    CALL_GL_API_RETURN(glGetTextureSamplerHandleNV, texture, sampler);
}
void API_ENTRY(glMakeTextureHandleResidentNV)(GLuint64 handle) {
    CALL_GL_API(glMakeTextureHandleResidentNV, handle);
}
void API_ENTRY(glMakeTextureHandleNonResidentNV)(GLuint64 handle) {
    CALL_GL_API(glMakeTextureHandleNonResidentNV, handle);
}
GLuint64 API_ENTRY(glGetImageHandleNV)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) {
    CALL_GL_API_RETURN(glGetImageHandleNV, texture, level, layered, layer, format);
}
void API_ENTRY(glMakeImageHandleResidentNV)(GLuint64 handle, GLenum access) {
    CALL_GL_API(glMakeImageHandleResidentNV, handle, access);
}
void API_ENTRY(glMakeImageHandleNonResidentNV)(GLuint64 handle) {
    CALL_GL_API(glMakeImageHandleNonResidentNV, handle);
}
void API_ENTRY(glUniformHandleui64NV)(GLint location, GLuint64 value) {
    CALL_GL_API(glUniformHandleui64NV, location, value);
}
void API_ENTRY(glUniformHandleui64vNV)(GLint location, GLsizei count, const GLuint64 *value) {
    CALL_GL_API(glUniformHandleui64vNV, location, count, value);
}
void API_ENTRY(glProgramUniformHandleui64NV)(GLuint program, GLint location, GLuint64 value) {
    CALL_GL_API(glProgramUniformHandleui64NV, program, location, value);
}
void API_ENTRY(glProgramUniformHandleui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64 *values) {
    CALL_GL_API(glProgramUniformHandleui64vNV, program, location, count, values);
}
GLboolean API_ENTRY(glIsTextureHandleResidentNV)(GLuint64 handle) {
    CALL_GL_API_RETURN(glIsTextureHandleResidentNV, handle);
}
GLboolean API_ENTRY(glIsImageHandleResidentNV)(GLuint64 handle) {
    CALL_GL_API_RETURN(glIsImageHandleResidentNV, handle);
}
void API_ENTRY(glBlendParameteriNV)(GLenum pname, GLint value) {
    CALL_GL_API(glBlendParameteriNV, pname, value);
}
void API_ENTRY(glBlendBarrierNV)(void) {
    CALL_GL_API(glBlendBarrierNV);
}
void API_ENTRY(glViewportPositionWScaleNV)(GLuint index, GLfloat xcoeff, GLfloat ycoeff) {
    CALL_GL_API(glViewportPositionWScaleNV, index, xcoeff, ycoeff);
}
void API_ENTRY(glBeginConditionalRenderNV)(GLuint id, GLenum mode) {
    CALL_GL_API(glBeginConditionalRenderNV, id, mode);
}
void API_ENTRY(glEndConditionalRenderNV)(void) {
    CALL_GL_API(glEndConditionalRenderNV);
}
void API_ENTRY(glSubpixelPrecisionBiasNV)(GLuint xbits, GLuint ybits) {
    CALL_GL_API(glSubpixelPrecisionBiasNV, xbits, ybits);
}
void API_ENTRY(glConservativeRasterParameteriNV)(GLenum pname, GLint param) {
    CALL_GL_API(glConservativeRasterParameteriNV, pname, param);
}
void API_ENTRY(glCopyBufferSubDataNV)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) {
    CALL_GL_API(glCopyBufferSubDataNV, readTarget, writeTarget, readOffset, writeOffset, size);
}
void API_ENTRY(glCoverageMaskNV)(GLboolean mask) {
    CALL_GL_API(glCoverageMaskNV, mask);
}
void API_ENTRY(glCoverageOperationNV)(GLenum operation) {
    CALL_GL_API(glCoverageOperationNV, operation);
}
void API_ENTRY(glDrawBuffersNV)(GLsizei n, const GLenum *bufs) {
    CALL_GL_API(glDrawBuffersNV, n, bufs);
}
void API_ENTRY(glDrawArraysInstancedNV)(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
    CALL_GL_API(glDrawArraysInstancedNV, mode, first, count, primcount);
}
void API_ENTRY(glDrawElementsInstancedNV)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) {
    CALL_GL_API(glDrawElementsInstancedNV, mode, count, type, indices, primcount);
}
void API_ENTRY(glDrawVkImageNV)(GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) {
    CALL_GL_API(glDrawVkImageNV, vkImage, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1);
}
GLVULKANPROCNV API_ENTRY(glGetVkProcAddrNV)(const GLchar *name) {
    CALL_GL_API_RETURN(glGetVkProcAddrNV, name);
}
void API_ENTRY(glWaitVkSemaphoreNV)(GLuint64 vkSemaphore) {
    CALL_GL_API(glWaitVkSemaphoreNV, vkSemaphore);
}
void API_ENTRY(glSignalVkSemaphoreNV)(GLuint64 vkSemaphore) {
    CALL_GL_API(glSignalVkSemaphoreNV, vkSemaphore);
}
void API_ENTRY(glSignalVkFenceNV)(GLuint64 vkFence) {
    CALL_GL_API(glSignalVkFenceNV, vkFence);
}
void API_ENTRY(glDeleteFencesNV)(GLsizei n, const GLuint *fences) {
    CALL_GL_API(glDeleteFencesNV, n, fences);
}
void API_ENTRY(glGenFencesNV)(GLsizei n, GLuint *fences) {
    CALL_GL_API(glGenFencesNV, n, fences);
}
GLboolean API_ENTRY(glIsFenceNV)(GLuint fence) {
    CALL_GL_API_RETURN(glIsFenceNV, fence);
}
GLboolean API_ENTRY(glTestFenceNV)(GLuint fence) {
    CALL_GL_API_RETURN(glTestFenceNV, fence);
}
void API_ENTRY(glGetFenceivNV)(GLuint fence, GLenum pname, GLint *params) {
    CALL_GL_API(glGetFenceivNV, fence, pname, params);
}
void API_ENTRY(glFinishFenceNV)(GLuint fence) {
    CALL_GL_API(glFinishFenceNV, fence);
}
void API_ENTRY(glSetFenceNV)(GLuint fence, GLenum condition) {
    CALL_GL_API(glSetFenceNV, fence, condition);
}
void API_ENTRY(glFragmentCoverageColorNV)(GLuint color) {
    CALL_GL_API(glFragmentCoverageColorNV, color);
}
void API_ENTRY(glBlitFramebufferNV)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
    CALL_GL_API(glBlitFramebufferNV, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
void API_ENTRY(glCoverageModulationTableNV)(GLsizei n, const GLfloat *v) {
    CALL_GL_API(glCoverageModulationTableNV, n, v);
}
void API_ENTRY(glGetCoverageModulationTableNV)(GLsizei bufsize, GLfloat *v) {
    CALL_GL_API(glGetCoverageModulationTableNV, bufsize, v);
}
void API_ENTRY(glCoverageModulationNV)(GLenum components) {
    CALL_GL_API(glCoverageModulationNV, components);
}
void API_ENTRY(glRenderbufferStorageMultisampleNV)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
    CALL_GL_API(glRenderbufferStorageMultisampleNV, target, samples, internalformat, width, height);
}
void API_ENTRY(glUniform1i64NV)(GLint location, GLint64EXT x) {
    CALL_GL_API(glUniform1i64NV, location, x);
}
void API_ENTRY(glUniform2i64NV)(GLint location, GLint64EXT x, GLint64EXT y) {
    CALL_GL_API(glUniform2i64NV, location, x, y);
}
void API_ENTRY(glUniform3i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) {
    CALL_GL_API(glUniform3i64NV, location, x, y, z);
}
void API_ENTRY(glUniform4i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) {
    CALL_GL_API(glUniform4i64NV, location, x, y, z, w);
}
void API_ENTRY(glUniform1i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glUniform1i64vNV, location, count, value);
}
void API_ENTRY(glUniform2i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glUniform2i64vNV, location, count, value);
}
void API_ENTRY(glUniform3i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glUniform3i64vNV, location, count, value);
}
void API_ENTRY(glUniform4i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glUniform4i64vNV, location, count, value);
}
void API_ENTRY(glUniform1ui64NV)(GLint location, GLuint64EXT x) {
    CALL_GL_API(glUniform1ui64NV, location, x);
}
void API_ENTRY(glUniform2ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y) {
    CALL_GL_API(glUniform2ui64NV, location, x, y);
}
void API_ENTRY(glUniform3ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) {
    CALL_GL_API(glUniform3ui64NV, location, x, y, z);
}
void API_ENTRY(glUniform4ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) {
    CALL_GL_API(glUniform4ui64NV, location, x, y, z, w);
}
void API_ENTRY(glUniform1ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glUniform1ui64vNV, location, count, value);
}
void API_ENTRY(glUniform2ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glUniform2ui64vNV, location, count, value);
}
void API_ENTRY(glUniform3ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glUniform3ui64vNV, location, count, value);
}
void API_ENTRY(glUniform4ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glUniform4ui64vNV, location, count, value);
}
void API_ENTRY(glGetUniformi64vNV)(GLuint program, GLint location, GLint64EXT *params) {
    CALL_GL_API(glGetUniformi64vNV, program, location, params);
}
void API_ENTRY(glProgramUniform1i64NV)(GLuint program, GLint location, GLint64EXT x) {
    CALL_GL_API(glProgramUniform1i64NV, program, location, x);
}
void API_ENTRY(glProgramUniform2i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y) {
    CALL_GL_API(glProgramUniform2i64NV, program, location, x, y);
}
void API_ENTRY(glProgramUniform3i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) {
    CALL_GL_API(glProgramUniform3i64NV, program, location, x, y, z);
}
void API_ENTRY(glProgramUniform4i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) {
    CALL_GL_API(glProgramUniform4i64NV, program, location, x, y, z, w);
}
void API_ENTRY(glProgramUniform1i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glProgramUniform1i64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform2i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glProgramUniform2i64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform3i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glProgramUniform3i64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform4i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) {
    CALL_GL_API(glProgramUniform4i64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform1ui64NV)(GLuint program, GLint location, GLuint64EXT x) {
    CALL_GL_API(glProgramUniform1ui64NV, program, location, x);
}
void API_ENTRY(glProgramUniform2ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) {
    CALL_GL_API(glProgramUniform2ui64NV, program, location, x, y);
}
void API_ENTRY(glProgramUniform3ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) {
    CALL_GL_API(glProgramUniform3ui64NV, program, location, x, y, z);
}
void API_ENTRY(glProgramUniform4ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) {
    CALL_GL_API(glProgramUniform4ui64NV, program, location, x, y, z, w);
}
void API_ENTRY(glProgramUniform1ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glProgramUniform1ui64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform2ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glProgramUniform2ui64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform3ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glProgramUniform3ui64vNV, program, location, count, value);
}
void API_ENTRY(glProgramUniform4ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) {
    CALL_GL_API(glProgramUniform4ui64vNV, program, location, count, value);
}
void API_ENTRY(glVertexAttribDivisorNV)(GLuint index, GLuint divisor) {
    CALL_GL_API(glVertexAttribDivisorNV, index, divisor);
}
void API_ENTRY(glGetInternalformatSampleivNV)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params) {
    CALL_GL_API(glGetInternalformatSampleivNV, target, internalformat, samples, pname, bufSize, params);
}
void API_ENTRY(glUniformMatrix2x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glUniformMatrix2x3fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix3x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glUniformMatrix3x2fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix2x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glUniformMatrix2x4fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix4x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glUniformMatrix4x2fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix3x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glUniformMatrix3x4fvNV, location, count, transpose, value);
}
void API_ENTRY(glUniformMatrix4x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
    CALL_GL_API(glUniformMatrix4x3fvNV, location, count, transpose, value);
}
GLuint API_ENTRY(glGenPathsNV)(GLsizei range) {
    CALL_GL_API_RETURN(glGenPathsNV, range);
}
void API_ENTRY(glDeletePathsNV)(GLuint path, GLsizei range) {
    CALL_GL_API(glDeletePathsNV, path, range);
}
GLboolean API_ENTRY(glIsPathNV)(GLuint path) {
    CALL_GL_API_RETURN(glIsPathNV, path);
}
void API_ENTRY(glPathCommandsNV)(GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords) {
    CALL_GL_API(glPathCommandsNV, path, numCommands, commands, numCoords, coordType, coords);
}
void API_ENTRY(glPathCoordsNV)(GLuint path, GLsizei numCoords, GLenum coordType, const void *coords) {
    CALL_GL_API(glPathCoordsNV, path, numCoords, coordType, coords);
}
void API_ENTRY(glPathSubCommandsNV)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords) {
    CALL_GL_API(glPathSubCommandsNV, path, commandStart, commandsToDelete, numCommands, commands, numCoords, coordType, coords);
}
void API_ENTRY(glPathSubCoordsNV)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords) {
    CALL_GL_API(glPathSubCoordsNV, path, coordStart, numCoords, coordType, coords);
}
void API_ENTRY(glPathStringNV)(GLuint path, GLenum format, GLsizei length, const void *pathString) {
    CALL_GL_API(glPathStringNV, path, format, length, pathString);
}
void API_ENTRY(glPathGlyphsNV)(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) {
    CALL_GL_API(glPathGlyphsNV, firstPathName, fontTarget, fontName, fontStyle, numGlyphs, type, charcodes, handleMissingGlyphs, pathParameterTemplate, emScale);
}
void API_ENTRY(glPathGlyphRangeNV)(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) {
    CALL_GL_API(glPathGlyphRangeNV, firstPathName, fontTarget, fontName, fontStyle, firstGlyph, numGlyphs, handleMissingGlyphs, pathParameterTemplate, emScale);
}
void API_ENTRY(glWeightPathsNV)(GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights) {
    CALL_GL_API(glWeightPathsNV, resultPath, numPaths, paths, weights);
}
void API_ENTRY(glCopyPathNV)(GLuint resultPath, GLuint srcPath) {
    CALL_GL_API(glCopyPathNV, resultPath, srcPath);
}
void API_ENTRY(glInterpolatePathsNV)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) {
    CALL_GL_API(glInterpolatePathsNV, resultPath, pathA, pathB, weight);
}
void API_ENTRY(glTransformPathNV)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glTransformPathNV, resultPath, srcPath, transformType, transformValues);
}
void API_ENTRY(glPathParameterivNV)(GLuint path, GLenum pname, const GLint *value) {
    CALL_GL_API(glPathParameterivNV, path, pname, value);
}
void API_ENTRY(glPathParameteriNV)(GLuint path, GLenum pname, GLint value) {
    CALL_GL_API(glPathParameteriNV, path, pname, value);
}
void API_ENTRY(glPathParameterfvNV)(GLuint path, GLenum pname, const GLfloat *value) {
    CALL_GL_API(glPathParameterfvNV, path, pname, value);
}
void API_ENTRY(glPathParameterfNV)(GLuint path, GLenum pname, GLfloat value) {
    CALL_GL_API(glPathParameterfNV, path, pname, value);
}
void API_ENTRY(glPathDashArrayNV)(GLuint path, GLsizei dashCount, const GLfloat *dashArray) {
    CALL_GL_API(glPathDashArrayNV, path, dashCount, dashArray);
}
void API_ENTRY(glPathStencilFuncNV)(GLenum func, GLint ref, GLuint mask) {
    CALL_GL_API(glPathStencilFuncNV, func, ref, mask);
}
void API_ENTRY(glPathStencilDepthOffsetNV)(GLfloat factor, GLfloat units) {
    CALL_GL_API(glPathStencilDepthOffsetNV, factor, units);
}
void API_ENTRY(glStencilFillPathNV)(GLuint path, GLenum fillMode, GLuint mask) {
    CALL_GL_API(glStencilFillPathNV, path, fillMode, mask);
}
void API_ENTRY(glStencilStrokePathNV)(GLuint path, GLint reference, GLuint mask) {
    CALL_GL_API(glStencilStrokePathNV, path, reference, mask);
}
void API_ENTRY(glStencilFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glStencilFillPathInstancedNV, numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues);
}
void API_ENTRY(glStencilStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glStencilStrokePathInstancedNV, numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues);
}
void API_ENTRY(glPathCoverDepthFuncNV)(GLenum func) {
    CALL_GL_API(glPathCoverDepthFuncNV, func);
}
void API_ENTRY(glCoverFillPathNV)(GLuint path, GLenum coverMode) {
    CALL_GL_API(glCoverFillPathNV, path, coverMode);
}
void API_ENTRY(glCoverStrokePathNV)(GLuint path, GLenum coverMode) {
    CALL_GL_API(glCoverStrokePathNV, path, coverMode);
}
void API_ENTRY(glCoverFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glCoverFillPathInstancedNV, numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
}
void API_ENTRY(glCoverStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glCoverStrokePathInstancedNV, numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
}
void API_ENTRY(glGetPathParameterivNV)(GLuint path, GLenum pname, GLint *value) {
    CALL_GL_API(glGetPathParameterivNV, path, pname, value);
}
void API_ENTRY(glGetPathParameterfvNV)(GLuint path, GLenum pname, GLfloat *value) {
    CALL_GL_API(glGetPathParameterfvNV, path, pname, value);
}
void API_ENTRY(glGetPathCommandsNV)(GLuint path, GLubyte *commands) {
    CALL_GL_API(glGetPathCommandsNV, path, commands);
}
void API_ENTRY(glGetPathCoordsNV)(GLuint path, GLfloat *coords) {
    CALL_GL_API(glGetPathCoordsNV, path, coords);
}
void API_ENTRY(glGetPathDashArrayNV)(GLuint path, GLfloat *dashArray) {
    CALL_GL_API(glGetPathDashArrayNV, path, dashArray);
}
void API_ENTRY(glGetPathMetricsNV)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics) {
    CALL_GL_API(glGetPathMetricsNV, metricQueryMask, numPaths, pathNameType, paths, pathBase, stride, metrics);
}
void API_ENTRY(glGetPathMetricRangeNV)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics) {
    CALL_GL_API(glGetPathMetricRangeNV, metricQueryMask, firstPathName, numPaths, stride, metrics);
}
void API_ENTRY(glGetPathSpacingNV)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing) {
    CALL_GL_API(glGetPathSpacingNV, pathListMode, numPaths, pathNameType, paths, pathBase, advanceScale, kerningScale, transformType, returnedSpacing);
}
GLboolean API_ENTRY(glIsPointInFillPathNV)(GLuint path, GLuint mask, GLfloat x, GLfloat y) {
    CALL_GL_API_RETURN(glIsPointInFillPathNV, path, mask, x, y);
}
GLboolean API_ENTRY(glIsPointInStrokePathNV)(GLuint path, GLfloat x, GLfloat y) {
    CALL_GL_API_RETURN(glIsPointInStrokePathNV, path, x, y);
}
GLfloat API_ENTRY(glGetPathLengthNV)(GLuint path, GLsizei startSegment, GLsizei numSegments) {
    CALL_GL_API_RETURN(glGetPathLengthNV, path, startSegment, numSegments);
}
GLboolean API_ENTRY(glPointAlongPathNV)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY) {
    CALL_GL_API_RETURN(glPointAlongPathNV, path, startSegment, numSegments, distance, x, y, tangentX, tangentY);
}
void API_ENTRY(glMatrixLoad3x2fNV)(GLenum matrixMode, const GLfloat *m) {
    CALL_GL_API(glMatrixLoad3x2fNV, matrixMode, m);
}
void API_ENTRY(glMatrixLoad3x3fNV)(GLenum matrixMode, const GLfloat *m) {
    CALL_GL_API(glMatrixLoad3x3fNV, matrixMode, m);
}
void API_ENTRY(glMatrixLoadTranspose3x3fNV)(GLenum matrixMode, const GLfloat *m) {
    CALL_GL_API(glMatrixLoadTranspose3x3fNV, matrixMode, m);
}
void API_ENTRY(glMatrixMult3x2fNV)(GLenum matrixMode, const GLfloat *m) {
    CALL_GL_API(glMatrixMult3x2fNV, matrixMode, m);
}
void API_ENTRY(glMatrixMult3x3fNV)(GLenum matrixMode, const GLfloat *m) {
    CALL_GL_API(glMatrixMult3x3fNV, matrixMode, m);
}
void API_ENTRY(glMatrixMultTranspose3x3fNV)(GLenum matrixMode, const GLfloat *m) {
    CALL_GL_API(glMatrixMultTranspose3x3fNV, matrixMode, m);
}
void API_ENTRY(glStencilThenCoverFillPathNV)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode) {
    CALL_GL_API(glStencilThenCoverFillPathNV, path, fillMode, mask, coverMode);
}
void API_ENTRY(glStencilThenCoverStrokePathNV)(GLuint path, GLint reference, GLuint mask, GLenum coverMode) {
    CALL_GL_API(glStencilThenCoverStrokePathNV, path, reference, mask, coverMode);
}
void API_ENTRY(glStencilThenCoverFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glStencilThenCoverFillPathInstancedNV, numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType, transformValues);
}
void API_ENTRY(glStencilThenCoverStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) {
    CALL_GL_API(glStencilThenCoverStrokePathInstancedNV, numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType, transformValues);
}
GLenum API_ENTRY(glPathGlyphIndexRangeNV)(GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]) {
    CALL_GL_API_RETURN(glPathGlyphIndexRangeNV, fontTarget, fontName, fontStyle, pathParameterTemplate, emScale, baseAndCount);
}
GLenum API_ENTRY(glPathGlyphIndexArrayNV)(GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale) {
    CALL_GL_API_RETURN(glPathGlyphIndexArrayNV, firstPathName, fontTarget, fontName, fontStyle, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale);
}
GLenum API_ENTRY(glPathMemoryGlyphIndexArrayNV)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale) {
    CALL_GL_API_RETURN(glPathMemoryGlyphIndexArrayNV, firstPathName, fontTarget, fontSize, fontData, faceIndex, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale);
}
void API_ENTRY(glProgramPathFragmentInputGenNV)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs) {
    CALL_GL_API(glProgramPathFragmentInputGenNV, program, location, genMode, components, coeffs);
}
void API_ENTRY(glGetProgramResourcefvNV)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params) {
    CALL_GL_API(glGetProgramResourcefvNV, program, programInterface, index, propCount, props, bufSize, length, params);
}
void API_ENTRY(glMatrixFrustumEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {
    CALL_GL_API(glMatrixFrustumEXT, mode, left, right, bottom, top, zNear, zFar);
}
void API_ENTRY(glMatrixLoadIdentityEXT)(GLenum mode) {
    CALL_GL_API(glMatrixLoadIdentityEXT, mode);
}
void API_ENTRY(glMatrixLoadTransposefEXT)(GLenum mode, const GLfloat *m) {
    CALL_GL_API(glMatrixLoadTransposefEXT, mode, m);
}
void API_ENTRY(glMatrixLoadTransposedEXT)(GLenum mode, const GLdouble *m) {
    CALL_GL_API(glMatrixLoadTransposedEXT, mode, m);
}
void API_ENTRY(glMatrixLoadfEXT)(GLenum mode, const GLfloat *m) {
    CALL_GL_API(glMatrixLoadfEXT, mode, m);
}
void API_ENTRY(glMatrixLoaddEXT)(GLenum mode, const GLdouble *m) {
    CALL_GL_API(glMatrixLoaddEXT, mode, m);
}
void API_ENTRY(glMatrixMultTransposefEXT)(GLenum mode, const GLfloat *m) {
    CALL_GL_API(glMatrixMultTransposefEXT, mode, m);
}
void API_ENTRY(glMatrixMultTransposedEXT)(GLenum mode, const GLdouble *m) {
    CALL_GL_API(glMatrixMultTransposedEXT, mode, m);
}
void API_ENTRY(glMatrixMultfEXT)(GLenum mode, const GLfloat *m) {
    CALL_GL_API(glMatrixMultfEXT, mode, m);
}
void API_ENTRY(glMatrixMultdEXT)(GLenum mode, const GLdouble *m) {
    CALL_GL_API(glMatrixMultdEXT, mode, m);
}
void API_ENTRY(glMatrixOrthoEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {
    CALL_GL_API(glMatrixOrthoEXT, mode, left, right, bottom, top, zNear, zFar);
}
void API_ENTRY(glMatrixPopEXT)(GLenum mode) {
    CALL_GL_API(glMatrixPopEXT, mode);
}
void API_ENTRY(glMatrixPushEXT)(GLenum mode) {
    CALL_GL_API(glMatrixPushEXT, mode);
}
void API_ENTRY(glMatrixRotatefEXT)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {
    CALL_GL_API(glMatrixRotatefEXT, mode, angle, x, y, z);
}
void API_ENTRY(glMatrixRotatedEXT)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) {
    CALL_GL_API(glMatrixRotatedEXT, mode, angle, x, y, z);
}
void API_ENTRY(glMatrixScalefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z) {
    CALL_GL_API(glMatrixScalefEXT, mode, x, y, z);
}
void API_ENTRY(glMatrixScaledEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z) {
    CALL_GL_API(glMatrixScaledEXT, mode, x, y, z);
}
void API_ENTRY(glMatrixTranslatefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z) {
    CALL_GL_API(glMatrixTranslatefEXT, mode, x, y, z);
}
void API_ENTRY(glMatrixTranslatedEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z) {
    CALL_GL_API(glMatrixTranslatedEXT, mode, x, y, z);
}
void API_ENTRY(glPolygonModeNV)(GLenum face, GLenum mode) {
    CALL_GL_API(glPolygonModeNV, face, mode);
}
void API_ENTRY(glReadBufferNV)(GLenum mode) {
    CALL_GL_API(glReadBufferNV, mode);
}
void API_ENTRY(glFramebufferSampleLocationsfvNV)(GLenum target, GLuint start, GLsizei count, const GLfloat *v) {
    CALL_GL_API(glFramebufferSampleLocationsfvNV, target, start, count, v);
}
void API_ENTRY(glNamedFramebufferSampleLocationsfvNV)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v) {
    CALL_GL_API(glNamedFramebufferSampleLocationsfvNV, framebuffer, start, count, v);
}
void API_ENTRY(glResolveDepthValuesNV)(void) {
    CALL_GL_API(glResolveDepthValuesNV);
}
void API_ENTRY(glViewportArrayvNV)(GLuint first, GLsizei count, const GLfloat *v) {
    CALL_GL_API(glViewportArrayvNV, first, count, v);
}
void API_ENTRY(glViewportIndexedfNV)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) {
    CALL_GL_API(glViewportIndexedfNV, index, x, y, w, h);
}
void API_ENTRY(glViewportIndexedfvNV)(GLuint index, const GLfloat *v) {
    CALL_GL_API(glViewportIndexedfvNV, index, v);
}
void API_ENTRY(glScissorArrayvNV)(GLuint first, GLsizei count, const GLint *v) {
    CALL_GL_API(glScissorArrayvNV, first, count, v);
}
void API_ENTRY(glScissorIndexedNV)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) {
    CALL_GL_API(glScissorIndexedNV, index, left, bottom, width, height);
}
void API_ENTRY(glScissorIndexedvNV)(GLuint index, const GLint *v) {
    CALL_GL_API(glScissorIndexedvNV, index, v);
}
void API_ENTRY(glDepthRangeArrayfvNV)(GLuint first, GLsizei count, const GLfloat *v) {
    CALL_GL_API(glDepthRangeArrayfvNV, first, count, v);
}
void API_ENTRY(glDepthRangeIndexedfNV)(GLuint index, GLfloat n, GLfloat f) {
    CALL_GL_API(glDepthRangeIndexedfNV, index, n, f);
}
void API_ENTRY(glGetFloati_vNV)(GLenum target, GLuint index, GLfloat *data) {
    CALL_GL_API(glGetFloati_vNV, target, index, data);
}
void API_ENTRY(glEnableiNV)(GLenum target, GLuint index) {
    CALL_GL_API(glEnableiNV, target, index);
}
void API_ENTRY(glDisableiNV)(GLenum target, GLuint index) {
    CALL_GL_API(glDisableiNV, target, index);
}
GLboolean API_ENTRY(glIsEnablediNV)(GLenum target, GLuint index) {
    CALL_GL_API_RETURN(glIsEnablediNV, target, index);
}
void API_ENTRY(glViewportSwizzleNV)(GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew) {
    CALL_GL_API(glViewportSwizzleNV, index, swizzlex, swizzley, swizzlez, swizzlew);
}
void API_ENTRY(glFramebufferTextureMultiviewOVR)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews) {
    CALL_GL_API(glFramebufferTextureMultiviewOVR, target, attachment, texture, level, baseViewIndex, numViews);
}
void API_ENTRY(glFramebufferTextureMultisampleMultiviewOVR)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews) {
    CALL_GL_API(glFramebufferTextureMultisampleMultiviewOVR, target, attachment, texture, level, samples, baseViewIndex, numViews);
}
void API_ENTRY(glAlphaFuncQCOM)(GLenum func, GLclampf ref) {
    CALL_GL_API(glAlphaFuncQCOM, func, ref);
}
void API_ENTRY(glGetDriverControlsQCOM)(GLint *num, GLsizei size, GLuint *driverControls) {
    CALL_GL_API(glGetDriverControlsQCOM, num, size, driverControls);
}
void API_ENTRY(glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString) {
    CALL_GL_API(glGetDriverControlStringQCOM, driverControl, bufSize, length, driverControlString);
}
void API_ENTRY(glEnableDriverControlQCOM)(GLuint driverControl) {
    CALL_GL_API(glEnableDriverControlQCOM, driverControl);
}
void API_ENTRY(glDisableDriverControlQCOM)(GLuint driverControl) {
    CALL_GL_API(glDisableDriverControlQCOM, driverControl);
}
void API_ENTRY(glExtGetTexturesQCOM)(GLuint *textures, GLint maxTextures, GLint *numTextures) {
    CALL_GL_API(glExtGetTexturesQCOM, textures, maxTextures, numTextures);
}
void API_ENTRY(glExtGetBuffersQCOM)(GLuint *buffers, GLint maxBuffers, GLint *numBuffers) {
    CALL_GL_API(glExtGetBuffersQCOM, buffers, maxBuffers, numBuffers);
}
void API_ENTRY(glExtGetRenderbuffersQCOM)(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers) {
    CALL_GL_API(glExtGetRenderbuffersQCOM, renderbuffers, maxRenderbuffers, numRenderbuffers);
}
void API_ENTRY(glExtGetFramebuffersQCOM)(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers) {
    CALL_GL_API(glExtGetFramebuffersQCOM, framebuffers, maxFramebuffers, numFramebuffers);
}
void API_ENTRY(glExtGetTexLevelParameterivQCOM)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params) {
    CALL_GL_API(glExtGetTexLevelParameterivQCOM, texture, face, level, pname, params);
}
void API_ENTRY(glExtTexObjectStateOverrideiQCOM)(GLenum target, GLenum pname, GLint param) {
    CALL_GL_API(glExtTexObjectStateOverrideiQCOM, target, pname, param);
}
void API_ENTRY(glExtGetTexSubImageQCOM)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels) {
    CALL_GL_API(glExtGetTexSubImageQCOM, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
}
void API_ENTRY(glExtGetBufferPointervQCOM)(GLenum target, void **params) {
    CALL_GL_API(glExtGetBufferPointervQCOM, target, params);
}
void API_ENTRY(glExtGetShadersQCOM)(GLuint *shaders, GLint maxShaders, GLint *numShaders) {
    CALL_GL_API(glExtGetShadersQCOM, shaders, maxShaders, numShaders);
}
void API_ENTRY(glExtGetProgramsQCOM)(GLuint *programs, GLint maxPrograms, GLint *numPrograms) {
    CALL_GL_API(glExtGetProgramsQCOM, programs, maxPrograms, numPrograms);
}
GLboolean API_ENTRY(glExtIsProgramBinaryQCOM)(GLuint program) {
    CALL_GL_API_RETURN(glExtIsProgramBinaryQCOM, program);
}
void API_ENTRY(glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar *source, GLint *length) {
    CALL_GL_API(glExtGetProgramBinarySourceQCOM, program, shadertype, source, length);
}
void API_ENTRY(glFramebufferFoveationConfigQCOM)(GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures) {
    CALL_GL_API(glFramebufferFoveationConfigQCOM, framebuffer, numLayers, focalPointsPerLayer, requestedFeatures, providedFeatures);
}
void API_ENTRY(glFramebufferFoveationParametersQCOM)(GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea) {
    CALL_GL_API(glFramebufferFoveationParametersQCOM, framebuffer, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea);
}
void API_ENTRY(glFramebufferFetchBarrierQCOM)(void) {
    CALL_GL_API(glFramebufferFetchBarrierQCOM);
}
void API_ENTRY(glTextureFoveationParametersQCOM)(GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea) {
    CALL_GL_API(glTextureFoveationParametersQCOM, texture, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea);
}
void API_ENTRY(glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) {
    CALL_GL_API(glStartTilingQCOM, x, y, width, height, preserveMask);
}
void API_ENTRY(glEndTilingQCOM)(GLbitfield preserveMask) {
    CALL_GL_API(glEndTilingQCOM, preserveMask);
}
