/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gles_dispatch.h"
#include "gles_ftable.h"
#include <EGL/egl.h>
#include <cutils/log.h>

static struct gles_dispatch *s_dispatch = NULL;

void init_gles(void *gles_android)
{
    s_dispatch = create_gles_dispatch(gles_android);
    if (s_dispatch == NULL) {
        ALOGE("failed to create gles dispatch\n");
    }
}

static struct gles_dispatch *getDispatch()
{
    if (!s_dispatch) {
        fprintf(stderr,"FATAL ERROR: GLES has not been initialized\n");
        exit(-1);
    }

    return s_dispatch;
}

__eglMustCastToProperFunctionPointerType gles_getProcAddress(const char *procname)
{
     for (int i=0; i<gles_num_funcs; i++) {
         if (!strcmp(gles_funcs_by_name[i].name, procname)) {
             return (__eglMustCastToProperFunctionPointerType)gles_funcs_by_name[i].proc;
         }
     }

     return NULL;
}

///////////// Path-through functions ///////////////
void glAlphaFunc(GLenum func, GLclampf ref)
{
     getDispatch()->glAlphaFunc(func, ref);
}

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
{
     getDispatch()->glClearColor(red, green, blue, alpha);
}

void glClearDepthf(GLclampf depth)
{
     getDispatch()->glClearDepthf(depth);
}

void glClipPlanef(GLenum plane, const GLfloat *equation)
{
     getDispatch()->glClipPlanef(plane, equation);
}

void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
{
     getDispatch()->glColor4f(red, green, blue, alpha);
}

void glDepthRangef(GLclampf zNear, GLclampf zFar)
{
     getDispatch()->glDepthRangef(zNear, zFar);
}

void glFogf(GLenum pname, GLfloat param)
{
     getDispatch()->glFogf(pname, param);
}

void glFogfv(GLenum pname, const GLfloat *params)
{
     getDispatch()->glFogfv(pname, params);
}

void glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
     getDispatch()->glFrustumf(left, right, bottom, top, zNear, zFar);
}

void glGetClipPlanef(GLenum pname, GLfloat eqn[4])
{
     getDispatch()->glGetClipPlanef(pname, eqn);
}

void glGetFloatv(GLenum pname, GLfloat *params)
{
     getDispatch()->glGetFloatv(pname, params);
}

void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
{
     getDispatch()->glGetLightfv(light, pname, params);
}

void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
{
     getDispatch()->glGetMaterialfv(face, pname, params);
}

void glGetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)
{
     getDispatch()->glGetTexEnvfv(env, pname, params);
}

void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
{
     getDispatch()->glGetTexParameterfv(target, pname, params);
}

void glLightModelf(GLenum pname, GLfloat param)
{
     getDispatch()->glLightModelf(pname, param);
}

void glLightModelfv(GLenum pname, const GLfloat *params)
{
     getDispatch()->glLightModelfv(pname, params);
}

void glLightf(GLenum light, GLenum pname, GLfloat param)
{
     getDispatch()->glLightf(light, pname, param);
}

void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
{
     getDispatch()->glLightfv(light, pname, params);
}

void glLineWidth(GLfloat width)
{
     getDispatch()->glLineWidth(width);
}

void glLoadMatrixf(const GLfloat *m)
{
     getDispatch()->glLoadMatrixf(m);
}

void glMaterialf(GLenum face, GLenum pname, GLfloat param)
{
     getDispatch()->glMaterialf(face, pname, param);
}

void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
{
     getDispatch()->glMaterialfv(face, pname, params);
}

void glMultMatrixf(const GLfloat *m)
{
     getDispatch()->glMultMatrixf(m);
}

void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
{
     getDispatch()->glMultiTexCoord4f(target, s, t, r, q);
}

void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
{
     getDispatch()->glNormal3f(nx, ny, nz);
}

void glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
     getDispatch()->glOrthof(left, right, bottom, top, zNear, zFar);
}

void glPointParameterf(GLenum pname, GLfloat param)
{
     getDispatch()->glPointParameterf(pname, param);
}

void glPointParameterfv(GLenum pname, const GLfloat *params)
{
     getDispatch()->glPointParameterfv(pname, params);
}

void glPointSize(GLfloat size)
{
     getDispatch()->glPointSize(size);
}

void glPolygonOffset(GLfloat factor, GLfloat units)
{
     getDispatch()->glPolygonOffset(factor, units);
}

void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
{
     getDispatch()->glRotatef(angle, x, y, z);
}

void glScalef(GLfloat x, GLfloat y, GLfloat z)
{
     getDispatch()->glScalef(x, y, z);
}

void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
{
     getDispatch()->glTexEnvf(target, pname, param);
}

void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
{
     getDispatch()->glTexEnvfv(target, pname, params);
}

void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
{
     getDispatch()->glTexParameterf(target, pname, param);
}

void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
{
     getDispatch()->glTexParameterfv(target, pname, params);
}

void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
{
     getDispatch()->glTranslatef(x, y, z);
}

void glActiveTexture(GLenum texture)
{
     getDispatch()->glActiveTexture(texture);
}

void glAlphaFuncx(GLenum func, GLclampx ref)
{
     getDispatch()->glAlphaFuncx(func, ref);
}

void glBindBuffer(GLenum target, GLuint buffer)
{
     getDispatch()->glBindBuffer(target, buffer);
}

void glBindTexture(GLenum target, GLuint texture)
{
     getDispatch()->glBindTexture(target, texture);
}

void glBlendFunc(GLenum sfactor, GLenum dfactor)
{
     getDispatch()->glBlendFunc(sfactor, dfactor);
}

void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
{
     getDispatch()->glBufferData(target, size, data, usage);
}

void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)
{
     getDispatch()->glBufferSubData(target, offset, size, data);
}

void glClear(GLbitfield mask)
{
     getDispatch()->glClear(mask);
}

void glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
{
     getDispatch()->glClearColorx(red, green, blue, alpha);
}

void glClearDepthx(GLclampx depth)
{
     getDispatch()->glClearDepthx(depth);
}

void glClearStencil(GLint s)
{
     getDispatch()->glClearStencil(s);
}

void glClientActiveTexture(GLenum texture)
{
     getDispatch()->glClientActiveTexture(texture);
}

void glClipPlanex(GLenum plane, const GLfixed *equation)
{
     getDispatch()->glClipPlanex(plane, equation);
}

void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
{
     getDispatch()->glColor4ub(red, green, blue, alpha);
}

void glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
{
     getDispatch()->glColor4x(red, green, blue, alpha);
}

void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
{
     getDispatch()->glColorMask(red, green, blue, alpha);
}

void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glColorPointer(size, type, stride, pointer);
}

void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
{
     getDispatch()->glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}

void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
{
     getDispatch()->glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}

void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
     getDispatch()->glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}

void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
{
     getDispatch()->glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}

void glCullFace(GLenum mode)
{
     getDispatch()->glCullFace(mode);
}

void glDeleteBuffers(GLsizei n, const GLuint *buffers)
{
     getDispatch()->glDeleteBuffers(n, buffers);
}

void glDeleteTextures(GLsizei n, const GLuint *textures)
{
     getDispatch()->glDeleteTextures(n, textures);
}

void glDepthFunc(GLenum func)
{
     getDispatch()->glDepthFunc(func);
}

void glDepthMask(GLboolean flag)
{
     getDispatch()->glDepthMask(flag);
}

void glDepthRangex(GLclampx zNear, GLclampx zFar)
{
     getDispatch()->glDepthRangex(zNear, zFar);
}

void glDisable(GLenum cap)
{
     getDispatch()->glDisable(cap);
}

void glDisableClientState(GLenum array)
{
     getDispatch()->glDisableClientState(array);
}

void glDrawArrays(GLenum mode, GLint first, GLsizei count)
{
     getDispatch()->glDrawArrays(mode, first, count);
}

void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
{
     getDispatch()->glDrawElements(mode, count, type, indices);
}

void glEnable(GLenum cap)
{
     getDispatch()->glEnable(cap);
}

void glEnableClientState(GLenum array)
{
     getDispatch()->glEnableClientState(array);
}

void glFinish()
{
     getDispatch()->glFinish();
}

void glFlush()
{
     getDispatch()->glFlush();
}

void glFogx(GLenum pname, GLfixed param)
{
     getDispatch()->glFogx(pname, param);
}

void glFogxv(GLenum pname, const GLfixed *params)
{
     getDispatch()->glFogxv(pname, params);
}

void glFrontFace(GLenum mode)
{
     getDispatch()->glFrontFace(mode);
}

void glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
     getDispatch()->glFrustumx(left, right, bottom, top, zNear, zFar);
}

void glGetBooleanv(GLenum pname, GLboolean *params)
{
     getDispatch()->glGetBooleanv(pname, params);
}

void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
{
     getDispatch()->glGetBufferParameteriv(target, pname, params);
}

void glGetClipPlanex(GLenum pname, GLfixed eqn[4])
{
     getDispatch()->glGetClipPlanex(pname, eqn);
}

void glGenBuffers(GLsizei n, GLuint *buffers)
{
     getDispatch()->glGenBuffers(n, buffers);
}

void glGenTextures(GLsizei n, GLuint *textures)
{
     getDispatch()->glGenTextures(n, textures);
}

GLenum glGetError()
{
     return getDispatch()->glGetError();
}

void glGetFixedv(GLenum pname, GLfixed *params)
{
     getDispatch()->glGetFixedv(pname, params);
}

void glGetIntegerv(GLenum pname, GLint *params)
{
     getDispatch()->glGetIntegerv(pname, params);
}

void glGetLightxv(GLenum light, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetLightxv(light, pname, params);
}

void glGetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetMaterialxv(face, pname, params);
}

void glGetPointerv(GLenum pname, GLvoid **params)
{
     getDispatch()->glGetPointerv(pname, params);
}

const GLubyte* glGetString(GLenum name)
{
     return getDispatch()->glGetString(name);
}

void glGetTexEnviv(GLenum env, GLenum pname, GLint *params)
{
     getDispatch()->glGetTexEnviv(env, pname, params);
}

void glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetTexEnvxv(env, pname, params);
}

void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
{
     getDispatch()->glGetTexParameteriv(target, pname, params);
}

void glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetTexParameterxv(target, pname, params);
}

void glHint(GLenum target, GLenum mode)
{
     getDispatch()->glHint(target, mode);
}

GLboolean glIsBuffer(GLuint buffer)
{
     return getDispatch()->glIsBuffer(buffer);
}

GLboolean glIsEnabled(GLenum cap)
{
     return getDispatch()->glIsEnabled(cap);
}

GLboolean glIsTexture(GLuint texture)
{
     return getDispatch()->glIsTexture(texture);
}

void glLightModelx(GLenum pname, GLfixed param)
{
     getDispatch()->glLightModelx(pname, param);
}

void glLightModelxv(GLenum pname, const GLfixed *params)
{
     getDispatch()->glLightModelxv(pname, params);
}

void glLightx(GLenum light, GLenum pname, GLfixed param)
{
     getDispatch()->glLightx(light, pname, param);
}

void glLightxv(GLenum light, GLenum pname, const GLfixed *params)
{
     getDispatch()->glLightxv(light, pname, params);
}

void glLineWidthx(GLfixed width)
{
     getDispatch()->glLineWidthx(width);
}

void glLoadIdentity()
{
     getDispatch()->glLoadIdentity();
}

void glLoadMatrixx(const GLfixed *m)
{
     getDispatch()->glLoadMatrixx(m);
}

void glLogicOp(GLenum opcode)
{
     getDispatch()->glLogicOp(opcode);
}

void glMaterialx(GLenum face, GLenum pname, GLfixed param)
{
     getDispatch()->glMaterialx(face, pname, param);
}

void glMaterialxv(GLenum face, GLenum pname, const GLfixed *params)
{
     getDispatch()->glMaterialxv(face, pname, params);
}

void glMatrixMode(GLenum mode)
{
     getDispatch()->glMatrixMode(mode);
}

void glMultMatrixx(const GLfixed *m)
{
     getDispatch()->glMultMatrixx(m);
}

void glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
{
     getDispatch()->glMultiTexCoord4x(target, s, t, r, q);
}

void glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz)
{
     getDispatch()->glNormal3x(nx, ny, nz);
}

void glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glNormalPointer(type, stride, pointer);
}

void glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
     getDispatch()->glOrthox(left, right, bottom, top, zNear, zFar);
}

void glPixelStorei(GLenum pname, GLint param)
{
     getDispatch()->glPixelStorei(pname, param);
}

void glPointParameterx(GLenum pname, GLfixed param)
{
     getDispatch()->glPointParameterx(pname, param);
}

void glPointParameterxv(GLenum pname, const GLfixed *params)
{
     getDispatch()->glPointParameterxv(pname, params);
}

void glPointSizex(GLfixed size)
{
     getDispatch()->glPointSizex(size);
}

void glPolygonOffsetx(GLfixed factor, GLfixed units)
{
     getDispatch()->glPolygonOffsetx(factor, units);
}

void glPopMatrix()
{
     getDispatch()->glPopMatrix();
}

void glPushMatrix()
{
     getDispatch()->glPushMatrix();
}

void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
{
     getDispatch()->glReadPixels(x, y, width, height, format, type, pixels);
}

void glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
{
     getDispatch()->glRotatex(angle, x, y, z);
}

void glSampleCoverage(GLclampf value, GLboolean invert)
{
     getDispatch()->glSampleCoverage(value, invert);
}

void glSampleCoveragex(GLclampx value, GLboolean invert)
{
     getDispatch()->glSampleCoveragex(value, invert);
}

void glScalex(GLfixed x, GLfixed y, GLfixed z)
{
     getDispatch()->glScalex(x, y, z);
}

void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
{
     getDispatch()->glScissor(x, y, width, height);
}

void glShadeModel(GLenum mode)
{
     getDispatch()->glShadeModel(mode);
}

void glStencilFunc(GLenum func, GLint ref, GLuint mask)
{
     getDispatch()->glStencilFunc(func, ref, mask);
}

void glStencilMask(GLuint mask)
{
     getDispatch()->glStencilMask(mask);
}

void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
{
     getDispatch()->glStencilOp(fail, zfail, zpass);
}

void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glTexCoordPointer(size, type, stride, pointer);
}

void glTexEnvi(GLenum target, GLenum pname, GLint param)
{
     getDispatch()->glTexEnvi(target, pname, param);
}

void glTexEnvx(GLenum target, GLenum pname, GLfixed param)
{
     getDispatch()->glTexEnvx(target, pname, param);
}

void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
{
     getDispatch()->glTexEnviv(target, pname, params);
}

void glTexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
{
     getDispatch()->glTexEnvxv(target, pname, params);
}

void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
     getDispatch()->glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
}

void glTexParameteri(GLenum target, GLenum pname, GLint param)
{
     getDispatch()->glTexParameteri(target, pname, param);
}

void glTexParameterx(GLenum target, GLenum pname, GLfixed param)
{
     getDispatch()->glTexParameterx(target, pname, param);
}

void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
{
     getDispatch()->glTexParameteriv(target, pname, params);
}

void glTexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
{
     getDispatch()->glTexParameterxv(target, pname, params);
}

void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
{
     getDispatch()->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
}

void glTranslatex(GLfixed x, GLfixed y, GLfixed z)
{
     getDispatch()->glTranslatex(x, y, z);
}

void glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glVertexPointer(size, type, stride, pointer);
}

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
{
     getDispatch()->glViewport(x, y, width, height);
}

void glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glPointSizePointerOES(type, stride, pointer);
}

void glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha)
{
     getDispatch()->glBlendEquationSeparateOES(modeRGB, modeAlpha);
}

void glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{
     getDispatch()->glBlendFuncSeparateOES(srcRGB, dstRGB, srcAlpha, dstAlpha);
}

void glBlendEquationOES(GLenum mode)
{
     getDispatch()->glBlendEquationOES(mode);
}

void glDrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
{
     getDispatch()->glDrawTexsOES(x, y, z, width, height);
}

void glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
{
     getDispatch()->glDrawTexiOES(x, y, z, width, height);
}

void glDrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
{
     getDispatch()->glDrawTexxOES(x, y, z, width, height);
}

void glDrawTexsvOES(const GLshort *coords)
{
     getDispatch()->glDrawTexsvOES(coords);
}

void glDrawTexivOES(const GLint *coords)
{
     getDispatch()->glDrawTexivOES(coords);
}

void glDrawTexxvOES(const GLfixed *coords)
{
     getDispatch()->glDrawTexxvOES(coords);
}

void glDrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
{
     getDispatch()->glDrawTexfOES(x, y, z, width, height);
}

void glDrawTexfvOES(const GLfloat *coords)
{
     getDispatch()->glDrawTexfvOES(coords);
}

void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
{
     getDispatch()->glEGLImageTargetTexture2DOES(target, image);
}

void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
{
     getDispatch()->glEGLImageTargetRenderbufferStorageOES(target, image);
}

void glAlphaFuncxOES(GLenum func, GLclampx ref)
{
     getDispatch()->glAlphaFuncxOES(func, ref);
}

void glClearColorxOES(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
{
     getDispatch()->glClearColorxOES(red, green, blue, alpha);
}

void glClearDepthxOES(GLclampx depth)
{
     getDispatch()->glClearDepthxOES(depth);
}

void glClipPlanexOES(GLenum plane, const GLfixed *equation)
{
     getDispatch()->glClipPlanexOES(plane, equation);
}

void glColor4xOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
{
     getDispatch()->glColor4xOES(red, green, blue, alpha);
}

void glDepthRangexOES(GLclampx zNear, GLclampx zFar)
{
     getDispatch()->glDepthRangexOES(zNear, zFar);
}

void glFogxOES(GLenum pname, GLfixed param)
{
     getDispatch()->glFogxOES(pname, param);
}

void glFogxvOES(GLenum pname, const GLfixed *params)
{
     getDispatch()->glFogxvOES(pname, params);
}

void glFrustumxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
     getDispatch()->glFrustumxOES(left, right, bottom, top, zNear, zFar);
}

void glGetClipPlanexOES(GLenum pname, GLfixed eqn[4])
{
     getDispatch()->glGetClipPlanexOES(pname, eqn);
}

void glGetFixedvOES(GLenum pname, GLfixed *params)
{
     getDispatch()->glGetFixedvOES(pname, params);
}

void glGetLightxvOES(GLenum light, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetLightxvOES(light, pname, params);
}

void glGetMaterialxvOES(GLenum face, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetMaterialxvOES(face, pname, params);
}

void glGetTexEnvxvOES(GLenum env, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetTexEnvxvOES(env, pname, params);
}

void glGetTexParameterxvOES(GLenum target, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetTexParameterxvOES(target, pname, params);
}

void glLightModelxOES(GLenum pname, GLfixed param)
{
     getDispatch()->glLightModelxOES(pname, param);
}

void glLightModelxvOES(GLenum pname, const GLfixed *params)
{
     getDispatch()->glLightModelxvOES(pname, params);
}

void glLightxOES(GLenum light, GLenum pname, GLfixed param)
{
     getDispatch()->glLightxOES(light, pname, param);
}

void glLightxvOES(GLenum light, GLenum pname, const GLfixed *params)
{
     getDispatch()->glLightxvOES(light, pname, params);
}

void glLineWidthxOES(GLfixed width)
{
     getDispatch()->glLineWidthxOES(width);
}

void glLoadMatrixxOES(const GLfixed *m)
{
     getDispatch()->glLoadMatrixxOES(m);
}

void glMaterialxOES(GLenum face, GLenum pname, GLfixed param)
{
     getDispatch()->glMaterialxOES(face, pname, param);
}

void glMaterialxvOES(GLenum face, GLenum pname, const GLfixed *params)
{
     getDispatch()->glMaterialxvOES(face, pname, params);
}

void glMultMatrixxOES(const GLfixed *m)
{
     getDispatch()->glMultMatrixxOES(m);
}

void glMultiTexCoord4xOES(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
{
     getDispatch()->glMultiTexCoord4xOES(target, s, t, r, q);
}

void glNormal3xOES(GLfixed nx, GLfixed ny, GLfixed nz)
{
     getDispatch()->glNormal3xOES(nx, ny, nz);
}

void glOrthoxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
     getDispatch()->glOrthoxOES(left, right, bottom, top, zNear, zFar);
}

void glPointParameterxOES(GLenum pname, GLfixed param)
{
     getDispatch()->glPointParameterxOES(pname, param);
}

void glPointParameterxvOES(GLenum pname, const GLfixed *params)
{
     getDispatch()->glPointParameterxvOES(pname, params);
}

void glPointSizexOES(GLfixed size)
{
     getDispatch()->glPointSizexOES(size);
}

void glPolygonOffsetxOES(GLfixed factor, GLfixed units)
{
     getDispatch()->glPolygonOffsetxOES(factor, units);
}

void glRotatexOES(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
{
     getDispatch()->glRotatexOES(angle, x, y, z);
}

void glSampleCoveragexOES(GLclampx value, GLboolean invert)
{
     getDispatch()->glSampleCoveragexOES(value, invert);
}

void glScalexOES(GLfixed x, GLfixed y, GLfixed z)
{
     getDispatch()->glScalexOES(x, y, z);
}

void glTexEnvxOES(GLenum target, GLenum pname, GLfixed param)
{
     getDispatch()->glTexEnvxOES(target, pname, param);
}

void glTexEnvxvOES(GLenum target, GLenum pname, const GLfixed *params)
{
     getDispatch()->glTexEnvxvOES(target, pname, params);
}

void glTexParameterxOES(GLenum target, GLenum pname, GLfixed param)
{
     getDispatch()->glTexParameterxOES(target, pname, param);
}

void glTexParameterxvOES(GLenum target, GLenum pname, const GLfixed *params)
{
     getDispatch()->glTexParameterxvOES(target, pname, params);
}

void glTranslatexOES(GLfixed x, GLfixed y, GLfixed z)
{
     getDispatch()->glTranslatexOES(x, y, z);
}

GLboolean glIsRenderbufferOES(GLuint renderbuffer)
{
     return getDispatch()->glIsRenderbufferOES(renderbuffer);
}

void glBindRenderbufferOES(GLenum target, GLuint renderbuffer)
{
     getDispatch()->glBindRenderbufferOES(target, renderbuffer);
}

void glDeleteRenderbuffersOES(GLsizei n, const GLuint *renderbuffers)
{
     getDispatch()->glDeleteRenderbuffersOES(n, renderbuffers);
}

void glGenRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
{
     getDispatch()->glGenRenderbuffersOES(n, renderbuffers);
}

void glRenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{
     getDispatch()->glRenderbufferStorageOES(target, internalformat, width, height);
}

void glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint *params)
{
     getDispatch()->glGetRenderbufferParameterivOES(target, pname, params);
}

GLboolean glIsFramebufferOES(GLuint framebuffer)
{
     return getDispatch()->glIsFramebufferOES(framebuffer);
}

void glBindFramebufferOES(GLenum target, GLuint framebuffer)
{
     getDispatch()->glBindFramebufferOES(target, framebuffer);
}

void glDeleteFramebuffersOES(GLsizei n, const GLuint *framebuffers)
{
     getDispatch()->glDeleteFramebuffersOES(n, framebuffers);
}

void glGenFramebuffersOES(GLsizei n, GLuint *framebuffers)
{
     getDispatch()->glGenFramebuffersOES(n, framebuffers);
}

GLenum glCheckFramebufferStatusOES(GLenum target)
{
     return getDispatch()->glCheckFramebufferStatusOES(target);
}

void glFramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
     getDispatch()->glFramebufferRenderbufferOES(target, attachment, renderbuffertarget, renderbuffer);
}

void glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{
     getDispatch()->glFramebufferTexture2DOES(target, attachment, textarget, texture, level);
}

void glGetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint *params)
{
     getDispatch()->glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params);
}

void glGenerateMipmapOES(GLenum target)
{
     getDispatch()->glGenerateMipmapOES(target);
}

void* glMapBufferOES(GLenum target, GLenum access)
{
     return getDispatch()->glMapBufferOES(target, access);
}

GLboolean glUnmapBufferOES(GLenum target)
{
     return getDispatch()->glUnmapBufferOES(target);
}

void glGetBufferPointervOES(GLenum target, GLenum pname, GLvoid **ptr)
{
     getDispatch()->glGetBufferPointervOES(target, pname, ptr);
}

void glCurrentPaletteMatrixOES(GLuint matrixpaletteindex)
{
     getDispatch()->glCurrentPaletteMatrixOES(matrixpaletteindex);
}

void glLoadPaletteFromModelViewMatrixOES()
{
     getDispatch()->glLoadPaletteFromModelViewMatrixOES();
}

void glMatrixIndexPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glMatrixIndexPointerOES(size, type, stride, pointer);
}

void glWeightPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
     getDispatch()->glWeightPointerOES(size, type, stride, pointer);
}

GLbitfield glQueryMatrixxOES(GLfixed mantissa[16], GLint exponent[16])
{
     return getDispatch()->glQueryMatrixxOES(mantissa, exponent);
}

void glDepthRangefOES(GLclampf zNear, GLclampf zFar)
{
     getDispatch()->glDepthRangefOES(zNear, zFar);
}

void glFrustumfOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
     getDispatch()->glFrustumfOES(left, right, bottom, top, zNear, zFar);
}

void glOrthofOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
     getDispatch()->glOrthofOES(left, right, bottom, top, zNear, zFar);
}

void glClipPlanefOES(GLenum plane, const GLfloat *equation)
{
     getDispatch()->glClipPlanefOES(plane, equation);
}

void glGetClipPlanefOES(GLenum pname, GLfloat eqn[4])
{
     getDispatch()->glGetClipPlanefOES(pname, eqn);
}

void glClearDepthfOES(GLclampf depth)
{
     getDispatch()->glClearDepthfOES(depth);
}

void glTexGenfOES(GLenum coord, GLenum pname, GLfloat param)
{
     getDispatch()->glTexGenfOES(coord, pname, param);
}

void glTexGenfvOES(GLenum coord, GLenum pname, const GLfloat *params)
{
     getDispatch()->glTexGenfvOES(coord, pname, params);
}

void glTexGeniOES(GLenum coord, GLenum pname, GLint param)
{
     getDispatch()->glTexGeniOES(coord, pname, param);
}

void glTexGenivOES(GLenum coord, GLenum pname, const GLint *params)
{
     getDispatch()->glTexGenivOES(coord, pname, params);
}

void glTexGenxOES(GLenum coord, GLenum pname, GLfixed param)
{
     getDispatch()->glTexGenxOES(coord, pname, param);
}

void glTexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)
{
     getDispatch()->glTexGenxvOES(coord, pname, params);
}

void glGetTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params)
{
     getDispatch()->glGetTexGenfvOES(coord, pname, params);
}

void glGetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
{
     getDispatch()->glGetTexGenivOES(coord, pname, params);
}

void glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
{
     getDispatch()->glGetTexGenxvOES(coord, pname, params);
}

void glBindVertexArrayOES(GLuint array)
{
     getDispatch()->glBindVertexArrayOES(array);
}

void glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
{
     getDispatch()->glDeleteVertexArraysOES(n, arrays);
}

void glGenVertexArraysOES(GLsizei n, GLuint *arrays)
{
     getDispatch()->glGenVertexArraysOES(n, arrays);
}

GLboolean glIsVertexArrayOES(GLuint array)
{
     return getDispatch()->glIsVertexArrayOES(array);
}

void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments)
{
     getDispatch()->glDiscardFramebufferEXT(target, numAttachments, attachments);
}

void glMultiDrawArraysEXT(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount)
{
     getDispatch()->glMultiDrawArraysEXT(mode, first, count, primcount);
}

void glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)
{
     getDispatch()->glMultiDrawElementsEXT(mode, count, type, indices, primcount);
}

void glClipPlanefIMG(GLenum p, const GLfloat *eqn)
{
     getDispatch()->glClipPlanefIMG(p, eqn);
}

void glClipPlanexIMG(GLenum p, const GLfixed *eqn)
{
     getDispatch()->glClipPlanexIMG(p, eqn);
}

void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
{
     getDispatch()->glRenderbufferStorageMultisampleIMG(target, samples, internalformat, width, height);
}

void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
{
     getDispatch()->glFramebufferTexture2DMultisampleIMG(target, attachment, textarget, texture, level, samples);
}

void glDeleteFencesNV(GLsizei n, const GLuint *fences)
{
     getDispatch()->glDeleteFencesNV(n, fences);
}

void glGenFencesNV(GLsizei n, GLuint *fences)
{
     getDispatch()->glGenFencesNV(n, fences);
}

GLboolean glIsFenceNV(GLuint fence)
{
     return getDispatch()->glIsFenceNV(fence);
}

GLboolean glTestFenceNV(GLuint fence)
{
     return getDispatch()->glTestFenceNV(fence);
}

void glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
{
     getDispatch()->glGetFenceivNV(fence, pname, params);
}

void glFinishFenceNV(GLuint fence)
{
     getDispatch()->glFinishFenceNV(fence);
}

void glSetFenceNV(GLuint fence, GLenum condition)
{
     getDispatch()->glSetFenceNV(fence, condition);
}

void glGetDriverControlsQCOM(GLint *num, GLsizei size, GLuint *driverControls)
{
     getDispatch()->glGetDriverControlsQCOM(num, size, driverControls);
}

void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString)
{
     getDispatch()->glGetDriverControlStringQCOM(driverControl, bufSize, length, driverControlString);
}

void glEnableDriverControlQCOM(GLuint driverControl)
{
     getDispatch()->glEnableDriverControlQCOM(driverControl);
}

void glDisableDriverControlQCOM(GLuint driverControl)
{
     getDispatch()->glDisableDriverControlQCOM(driverControl);
}

void glExtGetTexturesQCOM(GLuint *textures, GLint maxTextures, GLint *numTextures)
{
     getDispatch()->glExtGetTexturesQCOM(textures, maxTextures, numTextures);
}

void glExtGetBuffersQCOM(GLuint *buffers, GLint maxBuffers, GLint *numBuffers)
{
     getDispatch()->glExtGetBuffersQCOM(buffers, maxBuffers, numBuffers);
}

void glExtGetRenderbuffersQCOM(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers)
{
     getDispatch()->glExtGetRenderbuffersQCOM(renderbuffers, maxRenderbuffers, numRenderbuffers);
}

void glExtGetFramebuffersQCOM(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers)
{
     getDispatch()->glExtGetFramebuffersQCOM(framebuffers, maxFramebuffers, numFramebuffers);
}

void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params)
{
     getDispatch()->glExtGetTexLevelParameterivQCOM(texture, face, level, pname, params);
}

void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param)
{
     getDispatch()->glExtTexObjectStateOverrideiQCOM(target, pname, param);
}

void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels)
{
     getDispatch()->glExtGetTexSubImageQCOM(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
}

void glExtGetBufferPointervQCOM(GLenum target, GLvoid **params)
{
     getDispatch()->glExtGetBufferPointervQCOM(target, params);
}

void glExtGetShadersQCOM(GLuint *shaders, GLint maxShaders, GLint *numShaders)
{
     getDispatch()->glExtGetShadersQCOM(shaders, maxShaders, numShaders);
}

void glExtGetProgramsQCOM(GLuint *programs, GLint maxPrograms, GLint *numPrograms)
{
     getDispatch()->glExtGetProgramsQCOM(programs, maxPrograms, numPrograms);
}

GLboolean glExtIsProgramBinaryQCOM(GLuint program)
{
     return getDispatch()->glExtIsProgramBinaryQCOM(program);
}

void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar *source, GLint *length)
{
     getDispatch()->glExtGetProgramBinarySourceQCOM(program, shadertype, source, length);
}

void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
{
     getDispatch()->glStartTilingQCOM(x, y, width, height, preserveMask);
}

void glEndTilingQCOM(GLbitfield preserveMask)
{
     getDispatch()->glEndTilingQCOM(preserveMask);
}