void API_ENTRY(glAlphaFunc)(GLenum func, GLfloat ref) {
    CALL_GL_API(glAlphaFunc, func, ref);
}
void API_ENTRY(glClearColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
    CALL_GL_API(glClearColor, red, green, blue, alpha);
}
void API_ENTRY(glClearDepthf)(GLfloat d) {
    CALL_GL_API(glClearDepthf, d);
}
void API_ENTRY(glClipPlanef)(GLenum p, const GLfloat * eqn) {
    CALL_GL_API(glClipPlanef, p, eqn);
}
void API_ENTRY(glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
    CALL_GL_API(glColor4f, red, green, blue, alpha);
}
void API_ENTRY(glDepthRangef)(GLfloat n, GLfloat f) {
    CALL_GL_API(glDepthRangef, n, f);
}
void API_ENTRY(glFogf)(GLenum pname, GLfloat param) {
    CALL_GL_API(glFogf, pname, param);
}
void API_ENTRY(glFogfv)(GLenum pname, const GLfloat * params) {
    CALL_GL_API(glFogfv, pname, params);
}
void API_ENTRY(glFrustumf)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) {
    CALL_GL_API(glFrustumf, l, r, b, t, n, f);
}
void API_ENTRY(glGetClipPlanef)(GLenum plane, GLfloat * equation) {
    CALL_GL_API(glGetClipPlanef, plane, equation);
}
void API_ENTRY(glGetFloatv)(GLenum pname, GLfloat * data) {
    CALL_GL_API(glGetFloatv, pname, data);
}
void API_ENTRY(glGetLightfv)(GLenum light, GLenum pname, GLfloat * params) {
    CALL_GL_API(glGetLightfv, light, pname, params);
}
void API_ENTRY(glGetMaterialfv)(GLenum face, GLenum pname, GLfloat * params) {
    CALL_GL_API(glGetMaterialfv, face, pname, params);
}
void API_ENTRY(glGetTexEnvfv)(GLenum target, GLenum pname, GLfloat * params) {
    CALL_GL_API(glGetTexEnvfv, target, pname, params);
}
void API_ENTRY(glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat * params) {
    CALL_GL_API(glGetTexParameterfv, target, pname, params);
}
void API_ENTRY(glLightModelf)(GLenum pname, GLfloat param) {
    CALL_GL_API(glLightModelf, pname, param);
}
void API_ENTRY(glLightModelfv)(GLenum pname, const GLfloat * params) {
    CALL_GL_API(glLightModelfv, pname, params);
}
void API_ENTRY(glLightf)(GLenum light, GLenum pname, GLfloat param) {
    CALL_GL_API(glLightf, light, pname, param);
}
void API_ENTRY(glLightfv)(GLenum light, GLenum pname, const GLfloat * params) {
    CALL_GL_API(glLightfv, light, pname, params);
}
void API_ENTRY(glLineWidth)(GLfloat width) {
    CALL_GL_API(glLineWidth, width);
}
void API_ENTRY(glLoadMatrixf)(const GLfloat * m) {
    CALL_GL_API(glLoadMatrixf, m);
}
void API_ENTRY(glMaterialf)(GLenum face, GLenum pname, GLfloat param) {
    CALL_GL_API(glMaterialf, face, pname, param);
}
void API_ENTRY(glMaterialfv)(GLenum face, GLenum pname, const GLfloat * params) {
    CALL_GL_API(glMaterialfv, face, pname, params);
}
void API_ENTRY(glMultMatrixf)(const GLfloat * m) {
    CALL_GL_API(glMultMatrixf, m);
}
void API_ENTRY(glMultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
    CALL_GL_API(glMultiTexCoord4f, target, s, t, r, q);
}
void API_ENTRY(glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz) {
    CALL_GL_API(glNormal3f, nx, ny, nz);
}
void API_ENTRY(glOrthof)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) {
    CALL_GL_API(glOrthof, l, r, b, t, n, f);
}
void API_ENTRY(glPointParameterf)(GLenum pname, GLfloat param) {
    CALL_GL_API(glPointParameterf, pname, param);
}
void API_ENTRY(glPointParameterfv)(GLenum pname, const GLfloat * params) {
    CALL_GL_API(glPointParameterfv, pname, params);
}
void API_ENTRY(glPointSize)(GLfloat size) {
    CALL_GL_API(glPointSize, size);
}
void API_ENTRY(glPolygonOffset)(GLfloat factor, GLfloat units) {
    CALL_GL_API(glPolygonOffset, factor, units);
}
void API_ENTRY(glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {
    CALL_GL_API(glRotatef, angle, x, y, z);
}
void API_ENTRY(glScalef)(GLfloat x, GLfloat y, GLfloat z) {
    CALL_GL_API(glScalef, x, y, z);
}
void API_ENTRY(glTexEnvf)(GLenum target, GLenum pname, GLfloat param) {
    CALL_GL_API(glTexEnvf, target, pname, param);
}
void API_ENTRY(glTexEnvfv)(GLenum target, GLenum pname, const GLfloat * params) {
    CALL_GL_API(glTexEnvfv, target, pname, params);
}
void API_ENTRY(glTexParameterf)(GLenum target, GLenum pname, GLfloat param) {
    CALL_GL_API(glTexParameterf, target, pname, param);
}
void API_ENTRY(glTexParameterfv)(GLenum target, GLenum pname, const GLfloat * params) {
    CALL_GL_API(glTexParameterfv, target, pname, params);
}
void API_ENTRY(glTranslatef)(GLfloat x, GLfloat y, GLfloat z) {
    CALL_GL_API(glTranslatef, x, y, z);
}
void API_ENTRY(glActiveTexture)(GLenum texture) {
    CALL_GL_API(glActiveTexture, texture);
}
void API_ENTRY(glAlphaFuncx)(GLenum func, GLfixed ref) {
    CALL_GL_API(glAlphaFuncx, func, ref);
}
void API_ENTRY(glBindBuffer)(GLenum target, GLuint buffer) {
    CALL_GL_API(glBindBuffer, target, buffer);
}
void API_ENTRY(glBindTexture)(GLenum target, GLuint texture) {
    CALL_GL_API(glBindTexture, target, texture);
}
void API_ENTRY(glBlendFunc)(GLenum sfactor, GLenum dfactor) {
    CALL_GL_API(glBlendFunc, sfactor, dfactor);
}
void API_ENTRY(glBufferData)(GLenum target, GLsizeiptr size, const void * data, GLenum usage) {
    CALL_GL_API(glBufferData, target, size, data, usage);
}
void API_ENTRY(glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data) {
    CALL_GL_API(glBufferSubData, target, offset, size, data);
}
void API_ENTRY(glClear)(GLbitfield mask) {
    CALL_GL_API(glClear, mask);
}
void API_ENTRY(glClearColorx)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
    CALL_GL_API(glClearColorx, red, green, blue, alpha);
}
void API_ENTRY(glClearDepthx)(GLfixed depth) {
    CALL_GL_API(glClearDepthx, depth);
}
void API_ENTRY(glClearStencil)(GLint s) {
    CALL_GL_API(glClearStencil, s);
}
void API_ENTRY(glClientActiveTexture)(GLenum texture) {
    CALL_GL_API(glClientActiveTexture, texture);
}
void API_ENTRY(glClipPlanex)(GLenum plane, const GLfixed * equation) {
    CALL_GL_API(glClipPlanex, plane, equation);
}
void API_ENTRY(glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) {
    CALL_GL_API(glColor4ub, red, green, blue, alpha);
}
void API_ENTRY(glColor4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
    CALL_GL_API(glColor4x, red, green, blue, alpha);
}
void API_ENTRY(glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
    CALL_GL_API(glColorMask, red, green, blue, alpha);
}
void API_ENTRY(glColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer) {
    CALL_GL_API(glColorPointer, size, type, stride, pointer);
}
void API_ENTRY(glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data) {
    CALL_GL_API(glCompressedTexImage2D, target, level, internalformat, width, height, border, imageSize, data);
}
void API_ENTRY(glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data) {
    CALL_GL_API(glCompressedTexSubImage2D, target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
void API_ENTRY(glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
    CALL_GL_API(glCopyTexImage2D, target, level, internalformat, x, y, width, height, border);
}
void API_ENTRY(glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
    CALL_GL_API(glCopyTexSubImage2D, target, level, xoffset, yoffset, x, y, width, height);
}
void API_ENTRY(glCullFace)(GLenum mode) {
    CALL_GL_API(glCullFace, mode);
}
void API_ENTRY(glDeleteBuffers)(GLsizei n, const GLuint * buffers) {
    CALL_GL_API(glDeleteBuffers, n, buffers);
}
void API_ENTRY(glDeleteTextures)(GLsizei n, const GLuint * textures) {
    CALL_GL_API(glDeleteTextures, n, textures);
}
void API_ENTRY(glDepthFunc)(GLenum func) {
    CALL_GL_API(glDepthFunc, func);
}
void API_ENTRY(glDepthMask)(GLboolean flag) {
    CALL_GL_API(glDepthMask, flag);
}
void API_ENTRY(glDepthRangex)(GLfixed n, GLfixed f) {
    CALL_GL_API(glDepthRangex, n, f);
}
void API_ENTRY(glDisable)(GLenum cap) {
    CALL_GL_API(glDisable, cap);
}
void API_ENTRY(glDisableClientState)(GLenum array) {
    CALL_GL_API(glDisableClientState, array);
}
void API_ENTRY(glDrawArrays)(GLenum mode, GLint first, GLsizei count) {
    CALL_GL_API(glDrawArrays, mode, first, count);
}
void API_ENTRY(glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void * indices) {
    CALL_GL_API(glDrawElements, mode, count, type, indices);
}
void API_ENTRY(glEnable)(GLenum cap) {
    CALL_GL_API(glEnable, cap);
}
void API_ENTRY(glEnableClientState)(GLenum array) {
    CALL_GL_API(glEnableClientState, array);
}
void API_ENTRY(glFinish)(void) {
    CALL_GL_API(glFinish);
}
void API_ENTRY(glFlush)(void) {
    CALL_GL_API(glFlush);
}
void API_ENTRY(glFogx)(GLenum pname, GLfixed param) {
    CALL_GL_API(glFogx, pname, param);
}
void API_ENTRY(glFogxv)(GLenum pname, const GLfixed * param) {
    CALL_GL_API(glFogxv, pname, param);
}
void API_ENTRY(glFrontFace)(GLenum mode) {
    CALL_GL_API(glFrontFace, mode);
}
void API_ENTRY(glFrustumx)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f) {
    CALL_GL_API(glFrustumx, l, r, b, t, n, f);
}
void API_ENTRY(glGetBooleanv)(GLenum pname, GLboolean * data) {
    CALL_GL_API(glGetBooleanv, pname, data);
}
void API_ENTRY(glGetBufferParameteriv)(GLenum target, GLenum pname, GLint * params) {
    CALL_GL_API(glGetBufferParameteriv, target, pname, params);
}
void API_ENTRY(glGetClipPlanex)(GLenum plane, GLfixed * equation) {
    CALL_GL_API(glGetClipPlanex, plane, equation);
}
void API_ENTRY(glGenBuffers)(GLsizei n, GLuint * buffers) {
    CALL_GL_API(glGenBuffers, n, buffers);
}
void API_ENTRY(glGenTextures)(GLsizei n, GLuint * textures) {
    CALL_GL_API(glGenTextures, n, textures);
}
GLenum API_ENTRY(glGetError)(void) {
    CALL_GL_API_RETURN(glGetError);
}
void API_ENTRY(glGetFixedv)(GLenum pname, GLfixed * params) {
    CALL_GL_API(glGetFixedv, pname, params);
}
void API_ENTRY(glGetIntegerv)(GLenum pname, GLint * data) {
    CALL_GL_API(glGetIntegerv, pname, data);
}
void API_ENTRY(glGetLightxv)(GLenum light, GLenum pname, GLfixed * params) {
    CALL_GL_API(glGetLightxv, light, pname, params);
}
void API_ENTRY(glGetMaterialxv)(GLenum face, GLenum pname, GLfixed * params) {
    CALL_GL_API(glGetMaterialxv, face, pname, params);
}
void API_ENTRY(glGetPointerv)(GLenum pname, void ** params) {
    CALL_GL_API(glGetPointerv, pname, params);
}
const GLubyte * API_ENTRY(__glGetString)(GLenum name) {
    CALL_GL_API_RETURN(glGetString, name);
}
void API_ENTRY(glGetTexEnviv)(GLenum target, GLenum pname, GLint * params) {
    CALL_GL_API(glGetTexEnviv, target, pname, params);
}
void API_ENTRY(glGetTexEnvxv)(GLenum target, GLenum pname, GLfixed * params) {
    CALL_GL_API(glGetTexEnvxv, target, pname, params);
}
void API_ENTRY(glGetTexParameteriv)(GLenum target, GLenum pname, GLint * params) {
    CALL_GL_API(glGetTexParameteriv, target, pname, params);
}
void API_ENTRY(glGetTexParameterxv)(GLenum target, GLenum pname, GLfixed * params) {
    CALL_GL_API(glGetTexParameterxv, target, pname, params);
}
void API_ENTRY(glHint)(GLenum target, GLenum mode) {
    CALL_GL_API(glHint, target, mode);
}
GLboolean API_ENTRY(glIsBuffer)(GLuint buffer) {
    CALL_GL_API_RETURN(glIsBuffer, buffer);
}
GLboolean API_ENTRY(glIsEnabled)(GLenum cap) {
    CALL_GL_API_RETURN(glIsEnabled, cap);
}
GLboolean API_ENTRY(glIsTexture)(GLuint texture) {
    CALL_GL_API_RETURN(glIsTexture, texture);
}
void API_ENTRY(glLightModelx)(GLenum pname, GLfixed param) {
    CALL_GL_API(glLightModelx, pname, param);
}
void API_ENTRY(glLightModelxv)(GLenum pname, const GLfixed * param) {
    CALL_GL_API(glLightModelxv, pname, param);
}
void API_ENTRY(glLightx)(GLenum light, GLenum pname, GLfixed param) {
    CALL_GL_API(glLightx, light, pname, param);
}
void API_ENTRY(glLightxv)(GLenum light, GLenum pname, const GLfixed * params) {
    CALL_GL_API(glLightxv, light, pname, params);
}
void API_ENTRY(glLineWidthx)(GLfixed width) {
    CALL_GL_API(glLineWidthx, width);
}
void API_ENTRY(glLoadIdentity)(void) {
    CALL_GL_API(glLoadIdentity);
}
void API_ENTRY(glLoadMatrixx)(const GLfixed * m) {
    CALL_GL_API(glLoadMatrixx, m);
}
void API_ENTRY(glLogicOp)(GLenum opcode) {
    CALL_GL_API(glLogicOp, opcode);
}
void API_ENTRY(glMaterialx)(GLenum face, GLenum pname, GLfixed param) {
    CALL_GL_API(glMaterialx, face, pname, param);
}
void API_ENTRY(glMaterialxv)(GLenum face, GLenum pname, const GLfixed * param) {
    CALL_GL_API(glMaterialxv, face, pname, param);
}
void API_ENTRY(glMatrixMode)(GLenum mode) {
    CALL_GL_API(glMatrixMode, mode);
}
void API_ENTRY(glMultMatrixx)(const GLfixed * m) {
    CALL_GL_API(glMultMatrixx, m);
}
void API_ENTRY(glMultiTexCoord4x)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q) {
    CALL_GL_API(glMultiTexCoord4x, texture, s, t, r, q);
}
void API_ENTRY(glNormal3x)(GLfixed nx, GLfixed ny, GLfixed nz) {
    CALL_GL_API(glNormal3x, nx, ny, nz);
}
void API_ENTRY(glNormalPointer)(GLenum type, GLsizei stride, const void * pointer) {
    CALL_GL_API(glNormalPointer, type, stride, pointer);
}
void API_ENTRY(glOrthox)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f) {
    CALL_GL_API(glOrthox, l, r, b, t, n, f);
}
void API_ENTRY(glPixelStorei)(GLenum pname, GLint param) {
    CALL_GL_API(glPixelStorei, pname, param);
}
void API_ENTRY(glPointParameterx)(GLenum pname, GLfixed param) {
    CALL_GL_API(glPointParameterx, pname, param);
}
void API_ENTRY(glPointParameterxv)(GLenum pname, const GLfixed * params) {
    CALL_GL_API(glPointParameterxv, pname, params);
}
void API_ENTRY(glPointSizex)(GLfixed size) {
    CALL_GL_API(glPointSizex, size);
}
void API_ENTRY(glPolygonOffsetx)(GLfixed factor, GLfixed units) {
    CALL_GL_API(glPolygonOffsetx, factor, units);
}
void API_ENTRY(glPopMatrix)(void) {
    CALL_GL_API(glPopMatrix);
}
void API_ENTRY(glPushMatrix)(void) {
    CALL_GL_API(glPushMatrix);
}
void API_ENTRY(glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels) {
    CALL_GL_API(glReadPixels, x, y, width, height, format, type, pixels);
}
void API_ENTRY(glRotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
    CALL_GL_API(glRotatex, angle, x, y, z);
}
void API_ENTRY(glSampleCoverage)(GLfloat value, GLboolean invert) {
    CALL_GL_API(glSampleCoverage, value, invert);
}
void API_ENTRY(glSampleCoveragex)(GLclampx value, GLboolean invert) {
    CALL_GL_API(glSampleCoveragex, value, invert);
}
void API_ENTRY(glScalex)(GLfixed x, GLfixed y, GLfixed z) {
    CALL_GL_API(glScalex, x, y, z);
}
void API_ENTRY(glScissor)(GLint x, GLint y, GLsizei width, GLsizei height) {
    CALL_GL_API(glScissor, x, y, width, height);
}
void API_ENTRY(glShadeModel)(GLenum mode) {
    CALL_GL_API(glShadeModel, mode);
}
void API_ENTRY(glStencilFunc)(GLenum func, GLint ref, GLuint mask) {
    CALL_GL_API(glStencilFunc, func, ref, mask);
}
void API_ENTRY(glStencilMask)(GLuint mask) {
    CALL_GL_API(glStencilMask, mask);
}
void API_ENTRY(glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass) {
    CALL_GL_API(glStencilOp, fail, zfail, zpass);
}
void API_ENTRY(glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer) {
    CALL_GL_API(glTexCoordPointer, size, type, stride, pointer);
}
void API_ENTRY(glTexEnvi)(GLenum target, GLenum pname, GLint param) {
    CALL_GL_API(glTexEnvi, target, pname, param);
}
void API_ENTRY(glTexEnvx)(GLenum target, GLenum pname, GLfixed param) {
    CALL_GL_API(glTexEnvx, target, pname, param);
}
void API_ENTRY(glTexEnviv)(GLenum target, GLenum pname, const GLint * params) {
    CALL_GL_API(glTexEnviv, target, pname, params);
}
void API_ENTRY(glTexEnvxv)(GLenum target, GLenum pname, const GLfixed * params) {
    CALL_GL_API(glTexEnvxv, target, pname, params);
}
void API_ENTRY(glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels) {
    CALL_GL_API(glTexImage2D, target, level, internalformat, width, height, border, format, type, pixels);
}
void API_ENTRY(glTexParameteri)(GLenum target, GLenum pname, GLint param) {
    CALL_GL_API(glTexParameteri, target, pname, param);
}
void API_ENTRY(glTexParameterx)(GLenum target, GLenum pname, GLfixed param) {
    CALL_GL_API(glTexParameterx, target, pname, param);
}
void API_ENTRY(glTexParameteriv)(GLenum target, GLenum pname, const GLint * params) {
    CALL_GL_API(glTexParameteriv, target, pname, params);
}
void API_ENTRY(glTexParameterxv)(GLenum target, GLenum pname, const GLfixed * params) {
    CALL_GL_API(glTexParameterxv, target, pname, params);
}
void API_ENTRY(glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels) {
    CALL_GL_API(glTexSubImage2D, target, level, xoffset, yoffset, width, height, format, type, pixels);
}
void API_ENTRY(glTranslatex)(GLfixed x, GLfixed y, GLfixed z) {
    CALL_GL_API(glTranslatex, x, y, z);
}
void API_ENTRY(glVertexPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer) {
    CALL_GL_API(glVertexPointer, size, type, stride, pointer);
}
void API_ENTRY(glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) {
    CALL_GL_API(glViewport, x, y, width, height);
}
