content: /*
   * Copyright (C) 2007 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.
   */
  
  package android.opengl;
  
  import java.nio.Buffer;
  import java.nio.FloatBuffer;
  import java.nio.IntBuffer;
  import java.nio.ShortBuffer;
  
  import javax.microedition.khronos.opengles.GL;
  
  /**
   * Implement an error checking wrapper. The wrapper will automatically call
       * glError after each GL operation, and throw a GLException if an error
       * occurs. (By design, calling glError itself will not cause an exception
       * to be thrown.) Enabling error checking is an alternative to manually
       *  calling glError after every GL operation.
   */
  class GLErrorWrapper extends GLWrapperBase {
      boolean mCheckError;
      boolean mCheckThread;
      Thread mOurThread;
  
      public GLErrorWrapper(GL gl, int configFlags) {
          super(gl);
          mCheckError = (configFlags & GLDebugHelper.CONFIG_CHECK_GL_ERROR) != 0;
          mCheckThread = (configFlags & GLDebugHelper.CONFIG_CHECK_THREAD) != 0;
      }
  
      private void checkThread() {
          if (mCheckThread) {
              Thread currentThread = Thread.currentThread();
              if (mOurThread == null) {
                  mOurThread = currentThread;
              } else {
                  if (!mOurThread.equals(currentThread)) {
                      throw new GLException(GLDebugHelper.ERROR_WRONG_THREAD,
                              "OpenGL method called from wrong thread.");
                  }
              }
          }
      }
  
      private void checkError() {
          if (mCheckError) {
              int glError;
              if ((glError = mgl.glGetError()) != 0) {
                  throw new GLException(glError);
              }
          }
      }
  
      // ---------------------------------------------------------------------
      // GL10 methods:
  
      public void glActiveTexture(int texture) {
          checkThread();
          mgl.glActiveTexture(texture);
          checkError();
      }
  
      public void glAlphaFunc(int func, float ref) {
          checkThread();
          mgl.glAlphaFunc(func, ref);
          checkError();
      }
  
      public void glAlphaFuncx(int func, int ref) {
          checkThread();
          mgl.glAlphaFuncx(func, ref);
          checkError();
      }
  
      public void glBindTexture(int target, int texture) {
          checkThread();
          mgl.glBindTexture(target, texture);
          checkError();
      }
  
      public void glBlendFunc(int sfactor, int dfactor) {
          checkThread();
          mgl.glBlendFunc(sfactor, dfactor);
          checkError();
      }
  
      public void glClear(int mask) {
          checkThread();
          mgl.glClear(mask);
          checkError();
      }
  
      public void glClearColor(float red, float green, float blue, float alpha) {
          checkThread();
          mgl.glClearColor(red, green, blue, alpha);
          checkError();
      }
  
      public void glClearColorx(int red, int green, int blue, int alpha) {
          checkThread();
          mgl.glClearColorx(red, green, blue, alpha);
          checkError();
      }
  
      public void glClearDepthf(float depth) {
          checkThread();
          mgl.glClearDepthf(depth);
          checkError();
      }
  
      public void glClearDepthx(int depth) {
          checkThread();
          mgl.glClearDepthx(depth);
          checkError();
      }
  
      public void glClearStencil(int s) {
          checkThread();
          mgl.glClearStencil(s);
          checkError();
      }
  
      public void glClientActiveTexture(int texture) {
          checkThread();
          mgl.glClientActiveTexture(texture);
          checkError();
      }
  
      public void glColor4f(float red, float green, float blue, float alpha) {
          checkThread();
          mgl.glColor4f(red, green, blue, alpha);
          checkError();
      }
  
      public void glColor4x(int red, int green, int blue, int alpha) {
          checkThread();
          mgl.glColor4x(red, green, blue, alpha);
          checkError();
      }
  
      public void glColorMask(boolean red, boolean green, boolean blue,
              boolean alpha) {
          checkThread();
          mgl.glColorMask(red, green, blue, alpha);
          checkError();
      }
  
      public void glColorPointer(int size, int type, int stride, Buffer pointer) {
          checkThread();
          mgl.glColorPointer(size, type, stride, pointer);
          checkError();
      }
  
      public void glCompressedTexImage2D(int target, int level,
              int internalformat, int width, int height, int border,
              int imageSize, Buffer data) {
          checkThread();
          mgl.glCompressedTexImage2D(target, level, internalformat, width,
                  height, border, imageSize, data);
          checkError();
      }
  
      public void glCompressedTexSubImage2D(int target, int level, int xoffset,
              int yoffset, int width, int height, int format, int imageSize,
              Buffer data) {
          checkThread();
          mgl.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width,
                  height, format, imageSize, data);
          checkError();
      }
  
      public void glCopyTexImage2D(int target, int level, int internalformat,
              int x, int y, int width, int height, int border) {
          checkThread();
          mgl.glCopyTexImage2D(target, level, internalformat, x, y, width,
                  height, border);
          checkError();
      }
  
      public void glCopyTexSubImage2D(int target, int level, int xoffset,
              int yoffset, int x, int y, int width, int height) {
          checkThread();
          mgl.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width,
                  height);
          checkError();
      }
  
      public void glCullFace(int mode) {
          checkThread();
          mgl.glCullFace(mode);
          checkError();
      }
  
      public void glDeleteTextures(int n, int[] textures, int offset) {
          checkThread();
          mgl.glDeleteTextures(n, textures, offset);
          checkError();
      }
  
      public void glDeleteTextures(int n, IntBuffer textures) {
          checkThread();
          mgl.glDeleteTextures(n, textures);
          checkError();
      }
  
      public void glDepthFunc(int func) {
          checkThread();
          mgl.glDepthFunc(func);
          checkError();
      }
  
      public void glDepthMask(boolean flag) {
          checkThread();
          mgl.glDepthMask(flag);
          checkError();
      }
  
      public void glDepthRangef(float near, float far) {
          checkThread();
          mgl.glDepthRangef(near, far);
          checkError();
      }
  
      public void glDepthRangex(int near, int far) {
          checkThread();
          mgl.glDepthRangex(near, far);
          checkError();
      }
  
      public void glDisable(int cap) {
          checkThread();
          mgl.glDisable(cap);
          checkError();
      }
  
      public void glDisableClientState(int array) {
          checkThread();
          mgl.glDisableClientState(array);
          checkError();
      }
  
      public void glDrawArrays(int mode, int first, int count) {
          checkThread();
          mgl.glDrawArrays(mode, first, count);
          checkError();
      }
  
      public void glDrawElements(int mode, int count, int type, Buffer indices) {
          checkThread();
          mgl.glDrawElements(mode, count, type, indices);
          checkError();
      }
  
      public void glEnable(int cap) {
          checkThread();
          mgl.glEnable(cap);
          checkError();
      }
  
      public void glEnableClientState(int array) {
          checkThread();
          mgl.glEnableClientState(array);
          checkError();
      }
  
      public void glFinish() {
          checkThread();
          mgl.glFinish();
          checkError();
      }
  
      public void glFlush() {
          checkThread();
          mgl.glFlush();
          checkError();
      }
  
      public void glFogf(int pname, float param) {
          checkThread();
          mgl.glFogf(pname, param);
          checkError();
      }
  
      public void glFogfv(int pname, float[] params, int offset) {
          checkThread();
          mgl.glFogfv(pname, params, offset);
          checkError();
      }
  
      public void glFogfv(int pname, FloatBuffer params) {
          checkThread();
          mgl.glFogfv(pname, params);
          checkError();
      }
  
      public void glFogx(int pname, int param) {
          checkThread();
          mgl.glFogx(pname, param);
          checkError();
      }
  
      public void glFogxv(int pname, int[] params, int offset) {
          checkThread();
          mgl.glFogxv(pname, params, offset);
          checkError();
      }
  
      public void glFogxv(int pname, IntBuffer params) {
          checkThread();
          mgl.glFogxv(pname, params);
          checkError();
      }
  
      public void glFrontFace(int mode) {
          checkThread();
          mgl.glFrontFace(mode);
          checkError();
      }
  
      public void glFrustumf(float left, float right, float bottom, float top,
              float near, float far) {
          checkThread();
          mgl.glFrustumf(left, right, bottom, top, near, far);
          checkError();
      }
  
      public void glFrustumx(int left, int right, int bottom, int top, int near,
              int far) {
          checkThread();
          mgl.glFrustumx(left, right, bottom, top, near, far);
          checkError();
      }
  
      public void glGenTextures(int n, int[] textures, int offset) {
          checkThread();
          mgl.glGenTextures(n, textures, offset);
          checkError();
      }
  
      public void glGenTextures(int n, IntBuffer textures) {
          checkThread();
          mgl.glGenTextures(n, textures);
          checkError();
      }
  
      public int glGetError() {
          checkThread();
          int result = mgl.glGetError();
          return result;
      }
  
      public void glGetIntegerv(int pname, int[] params, int offset) {
          checkThread();
          mgl.glGetIntegerv(pname, params, offset);
          checkError();
      }
  
      public void glGetIntegerv(int pname, IntBuffer params) {
          checkThread();
          mgl.glGetIntegerv(pname, params);
          checkError();
      }
  
      public String glGetString(int name) {
          checkThread();
          String result = mgl.glGetString(name);
          checkError();
          return result;
      }
  
      public void glHint(int target, int mode) {
          checkThread();
          mgl.glHint(target, mode);
          checkError();
      }
  
      public void glLightModelf(int pname, float param) {
          checkThread();
          mgl.glLightModelf(pname, param);
          checkError();
      }
  
      public void glLightModelfv(int pname, float[] params, int offset) {
          checkThread();
          mgl.glLightModelfv(pname, params, offset);
          checkError();
      }
  
      public void glLightModelfv(int pname, FloatBuffer params) {
          checkThread();
          mgl.glLightModelfv(pname, params);
          checkError();
      }
  
      public void glLightModelx(int pname, int param) {
          checkThread();
          mgl.glLightModelx(pname, param);
          checkError();
      }
  
      public void glLightModelxv(int pname, int[] params, int offset) {
          checkThread();
          mgl.glLightModelxv(pname, params, offset);
          checkError();
      }
  
      public void glLightModelxv(int pname, IntBuffer params) {
          checkThread();
          mgl.glLightModelxv(pname, params);
          checkError();
      }
  
      public void glLightf(int light, int pname, float param) {
          checkThread();
          mgl.glLightf(light, pname, param);
          checkError();
      }
  
      public void glLightfv(int light, int pname, float[] params, int offset) {
          checkThread();
          mgl.glLightfv(light, pname, params, offset);
          checkError();
      }
  
      public void glLightfv(int light, int pname, FloatBuffer params) {
          checkThread();
          mgl.glLightfv(light, pname, params);
          checkError();
      }
  
      public void glLightx(int light, int pname, int param) {
          checkThread();
          mgl.glLightx(light, pname, param);
          checkError();
      }
  
      public void glLightxv(int light, int pname, int[] params, int offset) {
          checkThread();
          mgl.glLightxv(light, pname, params, offset);
          checkError();
      }
  
      public void glLightxv(int light, int pname, IntBuffer params) {
          checkThread();
          mgl.glLightxv(light, pname, params);
          checkError();
      }
  
      public void glLineWidth(float width) {
          checkThread();
          mgl.glLineWidth(width);
          checkError();
      }
  
      public void glLineWidthx(int width) {
          checkThread();
          mgl.glLineWidthx(width);
          checkError();
      }
  
      public void glLoadIdentity() {
          checkThread();
          mgl.glLoadIdentity();
          checkError();
      }
  
      public void glLoadMatrixf(float[] m, int offset) {
          checkThread();
          mgl.glLoadMatrixf(m, offset);
          checkError();
      }
  
      public void glLoadMatrixf(FloatBuffer m) {
          checkThread();
          mgl.glLoadMatrixf(m);
          checkError();
      }
  
      public void glLoadMatrixx(int[] m, int offset) {
          checkThread();
          mgl.glLoadMatrixx(m, offset);
          checkError();
      }
  
      public void glLoadMatrixx(IntBuffer m) {
          checkThread();
          mgl.glLoadMatrixx(m);
          checkError();
      }
  
      public void glLogicOp(int opcode) {
          checkThread();
          mgl.glLogicOp(opcode);
          checkError();
      }
  
      public void glMaterialf(int face, int pname, float param) {
          checkThread();
          mgl.glMaterialf(face, pname, param);
          checkError();
      }
  
      public void glMaterialfv(int face, int pname, float[] params, int offset) {
          checkThread();
          mgl.glMaterialfv(face, pname, params, offset);
          checkError();
      }
  
      public void glMaterialfv(int face, int pname, FloatBuffer params) {
          checkThread();
          mgl.glMaterialfv(face, pname, params);
          checkError();
      }
  
      public void glMaterialx(int face, int pname, int param) {
          checkThread();
          mgl.glMaterialx(face, pname, param);
          checkError();
      }
  
      public void glMaterialxv(int face, int pname, int[] params, int offset) {
          checkThread();
          mgl.glMaterialxv(face, pname, params, offset);
          checkError();
      }
  
      public void glMaterialxv(int face, int pname, IntBuffer params) {
          checkThread();
          mgl.glMaterialxv(face, pname, params);
          checkError();
      }
  
      public void glMatrixMode(int mode) {
          checkThread();
          mgl.glMatrixMode(mode);
          checkError();
      }
  
      public void glMultMatrixf(float[] m, int offset) {
          checkThread();
          mgl.glMultMatrixf(m, offset);
          checkError();
      }
  
      public void glMultMatrixf(FloatBuffer m) {
          checkThread();
          mgl.glMultMatrixf(m);
          checkError();
      }
  
      public void glMultMatrixx(int[] m, int offset) {
          checkThread();
          mgl.glMultMatrixx(m, offset);
          checkError();
      }
  
      public void glMultMatrixx(IntBuffer m) {
          checkThread();
          mgl.glMultMatrixx(m);
          checkError();
      }
  
      public void glMultiTexCoord4f(int target,
              float s, float t, float r, float q) {
          checkThread();
          mgl.glMultiTexCoord4f(target, s, t, r, q);
          checkError();
      }
  
      public void glMultiTexCoord4x(int target, int s, int t, int r, int q) {
          checkThread();
          mgl.glMultiTexCoord4x(target, s, t, r, q);
          checkError();
      }
  
      public void glNormal3f(float nx, float ny, float nz) {
          checkThread();
          mgl.glNormal3f(nx, ny, nz);
          checkError();
      }
  
      public void glNormal3x(int nx, int ny, int nz) {
          checkThread();
          mgl.glNormal3x(nx, ny, nz);
          checkError();
      }
  
      public void glNormalPointer(int type, int stride, Buffer pointer) {
          checkThread();
          mgl.glNormalPointer(type, stride, pointer);
          checkError();
      }
  
      public void glOrthof(float left, float right, float bottom, float top,
              float near, float far) {
          checkThread();
          mgl.glOrthof(left, right, bottom, top, near, far);
          checkError();
      }
  
      public void glOrthox(int left, int right, int bottom, int top, int near,
              int far) {
          checkThread();
          mgl.glOrthox(left, right, bottom, top, near, far);
          checkError();
      }
  
      public void glPixelStorei(int pname, int param) {
          checkThread();
          mgl.glPixelStorei(pname, param);
          checkError();
      }
  
      public void glPointSize(float size) {
          checkThread();
          mgl.glPointSize(size);
          checkError();
      }
  
      public void glPointSizex(int size) {
          checkThread();
          mgl.glPointSizex(size);
          checkError();
      }
  
      public void glPolygonOffset(float factor, float units) {
          checkThread();
          mgl.glPolygonOffset(factor, units);
          checkError();
      }
  
      public void glPolygonOffsetx(int factor, int units) {
          checkThread();
          mgl.glPolygonOffsetx(factor, units);
          checkError();
      }
  
      public void glPopMatrix() {
          checkThread();
          mgl.glPopMatrix();
          checkError();
      }
  
      public void glPushMatrix() {
          checkThread();
          mgl.glPushMatrix();
          checkError();
      }
  
      public void glReadPixels(int x, int y, int width, int height, int format,
              int type, Buffer pixels) {
          checkThread();
          mgl.glReadPixels(x, y, width, height, format, type, pixels);
          checkError();
      }
  
      public void glRotatef(float angle, float x, float y, float z) {
          checkThread();
          mgl.glRotatef(angle, x, y, z);
          checkError();
      }
  
      public void glRotatex(int angle, int x, int y, int z) {
          checkThread();
          mgl.glRotatex(angle, x, y, z);
          checkError();
      }
  
      public void glSampleCoverage(float value, boolean invert) {
          checkThread();
          mgl.glSampleCoverage(value, invert);
          checkError();
      }
  
      public void glSampleCoveragex(int value, boolean invert) {
          checkThread();
          mgl.glSampleCoveragex(value, invert);
          checkError();
      }
  
      public void glScalef(float x, float y, float z) {
          checkThread();
          mgl.glScalef(x, y, z);
          checkError();
      }
  
      public void glScalex(int x, int y, int z) {
          checkThread();
          mgl.glScalex(x, y, z);
          checkError();
      }
  
      public void glScissor(int x, int y, int width, int height) {
          checkThread();
          mgl.glScissor(x, y, width, height);
          checkError();
      }
  
      public void glShadeModel(int mode) {
          checkThread();
          mgl.glShadeModel(mode);
          checkError();
      }
  
      public void glStencilFunc(int func, int ref, int mask) {
          checkThread();
          mgl.glStencilFunc(func, ref, mask);
          checkError();
      }
  
      public void glStencilMask(int mask) {
          checkThread();
          mgl.glStencilMask(mask);
          checkError();
      }
  
      public void glStencilOp(int fail, int zfail, int zpass) {
          checkThread();
          mgl.glStencilOp(fail, zfail, zpass);
          checkError();
      }
  
      public void glTexCoordPointer(int size, int type,
              int stride, Buffer pointer) {
          checkThread();
          mgl.glTexCoordPointer(size, type, stride, pointer);
          checkError();
      }
  
      public void glTexEnvf(int target, int pname, float param) {
          checkThread();
          mgl.glTexEnvf(target, pname, param);
          checkError();
      }
  
      public void glTexEnvfv(int target, int pname, float[] params, int offset) {
          checkThread();
          mgl.glTexEnvfv(target, pname, params, offset);
          checkError();
      }
  
      public void glTexEnvfv(int target, int pname, FloatBuffer params) {
          checkThread();
          mgl.glTexEnvfv(target, pname, params);
          checkError();
      }
  
      public void glTexEnvx(int target, int pname, int param) {
          checkThread();
          mgl.glTexEnvx(target, pname, param);
          checkError();
      }
  
      public void glTexEnvxv(int target, int pname, int[] params, int offset) {
          checkThread();
          mgl.glTexEnvxv(target, pname, params, offset);
          checkError();
      }
  
      public void glTexEnvxv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl.glTexEnvxv(target, pname, params);
          checkError();
      }
  
      public void glTexImage2D(int target, int level, int internalformat,
              int width, int height, int border, int format, int type,
              Buffer pixels) {
          checkThread();
          mgl.glTexImage2D(target, level, internalformat, width, height, border,
                  format, type, pixels);
          checkError();
      }
  
      public void glTexParameterf(int target, int pname, float param) {
          checkThread();
          mgl.glTexParameterf(target, pname, param);
          checkError();
      }
  
      public void glTexParameterx(int target, int pname, int param) {
          checkThread();
          mgl.glTexParameterx(target, pname, param);
          checkError();
      }
  
      public void glTexParameteriv(int target, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glTexParameteriv(target, pname, params, offset);
          checkError();
      }
  
      public void glTexParameteriv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl11.glTexParameteriv(target, pname, params);
          checkError();
      }
  
      public void glTexSubImage2D(int target, int level, int xoffset,
              int yoffset, int width, int height, int format, int type,
              Buffer pixels) {
          checkThread();
          mgl.glTexSubImage2D(target, level, xoffset, yoffset, width, height,
                  format, type, pixels);
          checkError();
      }
  
      public void glTranslatef(float x, float y, float z) {
          checkThread();
          mgl.glTranslatef(x, y, z);
          checkError();
      }
  
      public void glTranslatex(int x, int y, int z) {
          checkThread();
          mgl.glTranslatex(x, y, z);
          checkError();
      }
  
      public void glVertexPointer(int size, int type,
              int stride, Buffer pointer) {
          checkThread();
          mgl.glVertexPointer(size, type, stride, pointer);
          checkError();
      }
  
      public void glViewport(int x, int y, int width, int height) {
          checkThread();
          mgl.glViewport(x, y, width, height);
          checkError();
      }
  
      public void glClipPlanef(int plane, float[] equation, int offset) {
          checkThread();
          mgl11.glClipPlanef(plane, equation, offset);
          checkError();
      }
  
      public void glClipPlanef(int plane, FloatBuffer equation) {
          checkThread();
          mgl11.glClipPlanef(plane, equation);
          checkError();
      }
  
      public void glClipPlanex(int plane, int[] equation, int offset) {
          checkThread();
          mgl11.glClipPlanex(plane, equation, offset);
          checkError();
      }
  
      public void glClipPlanex(int plane, IntBuffer equation) {
          checkThread();
          mgl11.glClipPlanex(plane, equation);
          checkError();
      }
  
      // Draw Texture Extension
  
      public void glDrawTexfOES(float x, float y, float z,
          float width, float height) {
          checkThread();
          mgl11Ext.glDrawTexfOES(x, y, z, width, height);
          checkError();
      }
  
      public void glDrawTexfvOES(float[] coords, int offset) {
          checkThread();
          mgl11Ext.glDrawTexfvOES(coords, offset);
          checkError();
      }
  
      public void glDrawTexfvOES(FloatBuffer coords) {
          checkThread();
          mgl11Ext.glDrawTexfvOES(coords);
          checkError();
      }
  
      public void glDrawTexiOES(int x, int y, int z, int width, int height) {
          checkThread();
          mgl11Ext.glDrawTexiOES(x, y, z, width, height);
          checkError();
      }
  
      public void glDrawTexivOES(int[] coords, int offset) {
          checkThread();
          mgl11Ext.glDrawTexivOES(coords, offset);
          checkError();
      }
  
      public void glDrawTexivOES(IntBuffer coords) {
          checkThread();
          mgl11Ext.glDrawTexivOES(coords);
          checkError();
      }
  
      public void glDrawTexsOES(short x, short y, short z,
          short width, short height) {
          checkThread();
          mgl11Ext.glDrawTexsOES(x, y, z, width, height);
          checkError();
      }
  
      public void glDrawTexsvOES(short[] coords, int offset) {
          checkThread();
          mgl11Ext.glDrawTexsvOES(coords, offset);
          checkError();
      }
  
      public void glDrawTexsvOES(ShortBuffer coords) {
          checkThread();
          mgl11Ext.glDrawTexsvOES(coords);
          checkError();
      }
  
      public void glDrawTexxOES(int x, int y, int z, int width, int height) {
          checkThread();
          mgl11Ext.glDrawTexxOES(x, y, z, width, height);
          checkError();
      }
  
      public void glDrawTexxvOES(int[] coords, int offset) {
          checkThread();
          mgl11Ext.glDrawTexxvOES(coords, offset);
          checkError();
      }
  
      public void glDrawTexxvOES(IntBuffer coords) {
          checkThread();
          mgl11Ext.glDrawTexxvOES(coords);
          checkError();
      }
  
      public int glQueryMatrixxOES(int[] mantissa, int mantissaOffset,
          int[] exponent, int exponentOffset) {
          checkThread();
          int valid = mgl10Ext.glQueryMatrixxOES(mantissa, mantissaOffset,
              exponent, exponentOffset);
          checkError();
          return valid;
      }
  
      public int glQueryMatrixxOES(IntBuffer mantissa, IntBuffer exponent) {
          checkThread();
          int valid = mgl10Ext.glQueryMatrixxOES(mantissa, exponent);
          checkError();
          return valid;
      }
  
      public void glBindBuffer(int target, int buffer) {
          checkThread();
          mgl11.glBindBuffer(target, buffer);
          checkError();
      }
  
      public void glBufferData(int target, int size, Buffer data, int usage) {
          checkThread();
          mgl11.glBufferData(target, size, data, usage);
          checkError();
      }
  
      public void glBufferSubData(int target, int offset, int size, Buffer data) {
          checkThread();
          mgl11.glBufferSubData(target, offset, size, data);
          checkError();
      }
  
      public void glColor4ub(byte red, byte green, byte blue, byte alpha) {
          checkThread();
          mgl11.glColor4ub(red, green, blue, alpha);
          checkError();    }
  
      public void glColorPointer(int size, int type, int stride, int offset) {
          checkThread();
          mgl11.glColorPointer(size, type, stride, offset);
          checkError();
      }
  
      public void glDeleteBuffers(int n, int[] buffers, int offset) {
          checkThread();
          mgl11.glDeleteBuffers(n, buffers, offset);
          checkError();
      }
  
      public void glDeleteBuffers(int n, IntBuffer buffers) {
          checkThread();
          mgl11.glDeleteBuffers(n, buffers);
          checkError();
      }
  
      public void glDrawElements(int mode, int count, int type, int offset) {
          checkThread();
          mgl11.glDrawElements(mode, count, type, offset);
          checkError();
      }
  
      public void glGenBuffers(int n, int[] buffers, int offset) {
          checkThread();
          mgl11.glGenBuffers(n, buffers, offset);
          checkError();
      }
  
      public void glGenBuffers(int n, IntBuffer buffers) {
          checkThread();
          mgl11.glGenBuffers(n, buffers);
          checkError();
      }
  
      public void glGetBooleanv(int pname, boolean[] params, int offset) {
          checkThread();
          mgl11.glGetBooleanv(pname, params, offset);
          checkError();
      }
  
      public void glGetBooleanv(int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetBooleanv(pname, params);
          checkError();
      }
  
      public void glGetBufferParameteriv(int target, int pname, int[] params,
              int offset) {
          checkThread();
          mgl11.glGetBufferParameteriv(target, pname, params, offset);
          checkError();
      }
  
      public void glGetBufferParameteriv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetBufferParameteriv(target, pname, params);
          checkError();
      }
  
      public void glGetClipPlanef(int pname, float[] eqn, int offset) {
          checkThread();
          mgl11.glGetClipPlanef(pname, eqn, offset);
          checkError();
      }
  
      public void glGetClipPlanef(int pname, FloatBuffer eqn) {
          checkThread();
          mgl11.glGetClipPlanef(pname, eqn);
          checkError();
      }
  
      public void glGetClipPlanex(int pname, int[] eqn, int offset) {
          checkThread();
          mgl11.glGetClipPlanex(pname, eqn, offset);
          checkError();
      }
  
      public void glGetClipPlanex(int pname, IntBuffer eqn) {
          checkThread();
          mgl11.glGetClipPlanex(pname, eqn);
          checkError();
      }
  
      public void glGetFixedv(int pname, int[] params, int offset) {
          checkThread();
          mgl11.glGetFixedv(pname, params, offset);
          checkError();
      }
  
      public void glGetFixedv(int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetFixedv(pname, params);
          checkError();
      }
  
      public void glGetFloatv(int pname, float[] params, int offset) {
          checkThread();
          mgl11.glGetFloatv(pname, params, offset);
          checkError();
      }
  
      public void glGetFloatv(int pname, FloatBuffer params) {
          checkThread();
          mgl11.glGetFloatv(pname, params);
          checkError();
      }
  
      public void glGetLightfv(int light, int pname, float[] params, int offset) {
          checkThread();
          mgl11.glGetLightfv(light, pname, params, offset);
          checkError();
      }
  
      public void glGetLightfv(int light, int pname, FloatBuffer params) {
          checkThread();
          mgl11.glGetLightfv(light, pname, params);
          checkError();
      }
  
      public void glGetLightxv(int light, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glGetLightxv(light, pname, params, offset);
          checkError();
      }
  
      public void glGetLightxv(int light, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetLightxv(light, pname, params);
          checkError();
      }
  
      public void glGetMaterialfv(int face, int pname, float[] params, int offset) {
          checkThread();
          mgl11.glGetMaterialfv(face, pname, params, offset);
          checkError();
      }
  
      public void glGetMaterialfv(int face, int pname, FloatBuffer params) {
          checkThread();
          mgl11.glGetMaterialfv(face, pname, params);
          checkError();
      }
  
      public void glGetMaterialxv(int face, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glGetMaterialxv(face, pname, params, offset);
          checkError();
      }
  
      public void glGetMaterialxv(int face, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetMaterialxv(face, pname, params);
          checkError();
      }
  
      public void glGetPointerv(int pname, Buffer[] params) {
          checkThread();
          mgl11.glGetPointerv(pname, params);
          checkError();
      }
  
      public void glGetTexEnviv(int env, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glGetTexEnviv(env, pname, params, offset);
          checkError();
      }
  
      public void glGetTexEnviv(int env, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetTexEnviv(env, pname, params);
          checkError();
      }
  
      public void glGetTexEnvxv(int env, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glGetTexEnvxv(env, pname, params, offset);
          checkError();
      }
  
      public void glGetTexEnvxv(int env, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetTexEnvxv(env, pname, params);
          checkError();
      }
  
      public void glGetTexParameterfv(int target, int pname, float[] params,
              int offset) {
          checkThread();
          mgl11.glGetTexParameterfv(target, pname, params, offset);
          checkError();
      }
  
      public void glGetTexParameterfv(int target, int pname, FloatBuffer params) {
          checkThread();
          mgl11.glGetTexParameterfv(target, pname, params);
          checkError();
      }
  
      public void glGetTexParameteriv(int target, int pname, int[] params,
              int offset) {
          checkThread();
          mgl11.glGetTexParameteriv(target, pname, params, offset);
          checkError();
      }
  
      public void glGetTexParameteriv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetTexParameteriv(target, pname, params);
          checkError();
      }
  
      public void glGetTexParameterxv(int target, int pname, int[] params,
              int offset) {
          checkThread();
          mgl11.glGetTexParameterxv(target, pname, params, offset);
          checkError();
      }
  
      public void glGetTexParameterxv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl11.glGetTexParameterxv(target, pname, params);
          checkError();
      }
  
      public boolean glIsBuffer(int buffer) {
          checkThread();
          boolean valid = mgl11.glIsBuffer(buffer);
          checkError();
          return valid;
      }
  
      public boolean glIsEnabled(int cap) {
          checkThread();
          boolean valid = mgl11.glIsEnabled(cap);
          checkError();
          return valid;
      }
  
      public boolean glIsTexture(int texture) {
          checkThread();
          boolean valid = mgl11.glIsTexture(texture);
          checkError();
          return valid;
      }
  
      public void glNormalPointer(int type, int stride, int offset) {
          checkThread();
          mgl11.glNormalPointer(type, stride, offset);
          checkError();
      }
  
      public void glPointParameterf(int pname, float param) {
          checkThread();
          mgl11.glPointParameterf(pname, param);
          checkError();
      }
  
      public void glPointParameterfv(int pname, float[] params, int offset) {
          checkThread();
          mgl11.glPointParameterfv(pname, params, offset);
          checkError();
      }
  
      public void glPointParameterfv(int pname, FloatBuffer params) {
          checkThread();
          mgl11.glPointParameterfv(pname, params);
          checkError();
      }
  
      public void glPointParameterx(int pname, int param) {
          checkThread();
          mgl11.glPointParameterx(pname, param);
          checkError();
      }
  
      public void glPointParameterxv(int pname, int[] params, int offset) {
          checkThread();
          mgl11.glPointParameterxv(pname, params, offset);
          checkError();
      }
  
      public void glPointParameterxv(int pname, IntBuffer params) {
          checkThread();
          mgl11.glPointParameterxv(pname, params);
          checkError();
      }
  
      public void glPointSizePointerOES(int type, int stride, Buffer pointer) {
          checkThread();
          mgl11.glPointSizePointerOES(type, stride, pointer);
          checkError();
      }
  
      public void glTexCoordPointer(int size, int type, int stride, int offset) {
          checkThread();
          mgl11.glTexCoordPointer(size, type, stride, offset);
          checkError();
      }
  
      public void glTexEnvi(int target, int pname, int param) {
          checkThread();
          mgl11.glTexEnvi(target, pname, param);
          checkError();
      }
  
      public void glTexEnviv(int target, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glTexEnviv(target, pname, params, offset);
          checkError();
      }
  
      public void glTexEnviv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl11.glTexEnviv(target, pname, params);
          checkError();
      }
  
      public void glTexParameterfv(int target, int pname, float[] params,
              int offset) {
          checkThread();
          mgl11.glTexParameterfv(target, pname, params, offset);
          checkError();
      }
  
      public void glTexParameterfv(int target, int pname, FloatBuffer params) {
          checkThread();
          mgl11.glTexParameterfv(target, pname, params);
          checkError();
      }
  
      public void glTexParameteri(int target, int pname, int param) {
          checkThread();
          mgl11.glTexParameteri(target, pname, param);
          checkError();
      }
  
      public void glTexParameterxv(int target, int pname, int[] params, int offset) {
          checkThread();
          mgl11.glTexParameterxv(target, pname, params, offset);
          checkError();
      }
  
      public void glTexParameterxv(int target, int pname, IntBuffer params) {
          checkThread();
          mgl11.glTexParameterxv(target, pname, params);
          checkError();
      }
  
      public void glVertexPointer(int size, int type, int stride, int offset) {
          checkThread();
          mgl11.glVertexPointer(size, type, stride, offset);
          checkError();
      }
  
      public void glCurrentPaletteMatrixOES(int matrixpaletteindex) {
          checkThread();
          mgl11Ext.glCurrentPaletteMatrixOES(matrixpaletteindex);
          checkError();
      }
  
      public void glLoadPaletteFromModelViewMatrixOES() {
          checkThread();
          mgl11Ext.glLoadPaletteFromModelViewMatrixOES();
          checkError();
      }
  
      public void glMatrixIndexPointerOES(int size, int type, int stride,
              Buffer pointer) {
          checkThread();
          mgl11Ext.glMatrixIndexPointerOES(size, type, stride, pointer);
          checkError();
      }
  
      public void glMatrixIndexPointerOES(int size, int type, int stride,
              int offset) {
          checkThread();
          mgl11Ext.glMatrixIndexPointerOES(size, type, stride, offset);
          checkError();
      }
  
      public void glWeightPointerOES(int size, int type, int stride,
              Buffer pointer) {
          checkThread();
          mgl11Ext.glWeightPointerOES(size, type, stride, pointer);
          checkError();
      }
  
      public void glWeightPointerOES(int size, int type, int stride, int offset) {
          checkThread();
          mgl11Ext.glWeightPointerOES(size, type, stride, offset);
          checkError();
      }
  
      @Override
      public void glBindFramebufferOES(int target, int framebuffer) {
          checkThread();
          mgl11ExtensionPack.glBindFramebufferOES(target, framebuffer);
          checkError();
      }
  
      @Override
      public void glBindRenderbufferOES(int target, int renderbuffer) {
          checkThread();
          mgl11ExtensionPack.glBindRenderbufferOES(target, renderbuffer);
          checkError();
      }
  
      @Override
      public void glBlendEquation(int mode) {
          checkThread();
          mgl11ExtensionPack.glBlendEquation(mode);
          checkError();
      }
  
      @Override
      public void glBlendEquationSeparate(int modeRGB, int modeAlpha) {
          checkThread();
          mgl11ExtensionPack.glBlendEquationSeparate(modeRGB, modeAlpha);
          checkError();
      }
  
      @Override
      public void glBlendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha,
              int dstAlpha) {
          checkThread();
          mgl11ExtensionPack.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
          checkError();
      }
  
      @Override
      public int glCheckFramebufferStatusOES(int target) {
          checkThread();
          int result = mgl11ExtensionPack.glCheckFramebufferStatusOES(target);
          checkError();
          return result;
      }
  
      @Override
      public void glDeleteFramebuffersOES(int n, int[] framebuffers, int offset) {
          checkThread();
          mgl11ExtensionPack.glDeleteFramebuffersOES(n, framebuffers, offset);
          checkError();
      }
  
      @Override
      public void glDeleteFramebuffersOES(int n, IntBuffer framebuffers) {
          checkThread();
          mgl11ExtensionPack.glDeleteFramebuffersOES(n, framebuffers);
          checkError();
      }
  
      @Override
      public void glDeleteRenderbuffersOES(int n, int[] renderbuffers, int offset) {
          checkThread();
          mgl11ExtensionPack.glDeleteRenderbuffersOES(n, renderbuffers, offset);
          checkError();
      }
  
      @Override
      public void glDeleteRenderbuffersOES(int n, IntBuffer renderbuffers) {
          checkThread();
          mgl11ExtensionPack.glDeleteRenderbuffersOES(n, renderbuffers);
          checkError();
      }
  
      @Override
      public void glFramebufferRenderbufferOES(int target, int attachment,
              int renderbuffertarget, int renderbuffer) {
          checkThread();
          mgl11ExtensionPack.glFramebufferRenderbufferOES(target, attachment, renderbuffertarget, renderbuffer);
          checkError();
      }
  
      @Override
      public void glFramebufferTexture2DOES(int target, int attachment,
              int textarget, int texture, int level) {
          checkThread();
          mgl11ExtensionPack.glFramebufferTexture2DOES(target, attachment, textarget, texture, level);
          checkError();
      }
  
      @Override
      public void glGenerateMipmapOES(int target) {
          checkThread();
          mgl11ExtensionPack.glGenerateMipmapOES(target);
          checkError();
      }
  
      @Override
      public void glGenFramebuffersOES(int n, int[] framebuffers, int offset) {
          checkThread();
          mgl11ExtensionPack.glGenFramebuffersOES(n, framebuffers, offset);
          checkError();
      }
  
      @Override
      public void glGenFramebuffersOES(int n, IntBuffer framebuffers) {
          checkThread();
          mgl11ExtensionPack.glGenFramebuffersOES(n, framebuffers);
          checkError();
      }
  
      @Override
      public void glGenRenderbuffersOES(int n, int[] renderbuffers, int offset) {
          checkThread();
          mgl11ExtensionPack.glGenRenderbuffersOES(n, renderbuffers, offset);
          checkError();
      }
  
      @Override
      public void glGenRenderbuffersOES(int n, IntBuffer renderbuffers) {
          checkThread();
          mgl11ExtensionPack.glGenRenderbuffersOES(n, renderbuffers);
          checkError();
      }
  
      @Override
      public void glGetFramebufferAttachmentParameterivOES(int target,
              int attachment, int pname, int[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glGetFramebufferAttachmentParameterivOES(int target,
              int attachment, int pname, IntBuffer params) {
          checkThread();
          mgl11ExtensionPack.glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params);
          checkError();
      }
  
      @Override
      public void glGetRenderbufferParameterivOES(int target, int pname,
              int[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glGetRenderbufferParameterivOES(target, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glGetRenderbufferParameterivOES(int target, int pname,
              IntBuffer params) {
          checkThread();
          mgl11ExtensionPack.glGetRenderbufferParameterivOES(target, pname, params);
          checkError();
      }
  
      @Override
      public void glGetTexGenfv(int coord, int pname, float[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glGetTexGenfv(coord, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glGetTexGenfv(int coord, int pname, FloatBuffer params) {
          checkThread();
          mgl11ExtensionPack.glGetTexGenfv(coord, pname, params);
          checkError();
      }
  
      @Override
      public void glGetTexGeniv(int coord, int pname, int[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glGetTexGeniv(coord, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glGetTexGeniv(int coord, int pname, IntBuffer params) {
          checkThread();
          mgl11ExtensionPack.glGetTexGeniv(coord, pname, params);
          checkError();
      }
  
      @Override
      public void glGetTexGenxv(int coord, int pname, int[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glGetTexGenxv(coord, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glGetTexGenxv(int coord, int pname, IntBuffer params) {
          checkThread();
          mgl11ExtensionPack.glGetTexGenxv(coord, pname, params);
          checkError();
      }
  
      @Override
      public boolean glIsFramebufferOES(int framebuffer) {
          checkThread();
          boolean result = mgl11ExtensionPack.glIsFramebufferOES(framebuffer);
          checkError();
          return result;
      }
  
      @Override
      public boolean glIsRenderbufferOES(int renderbuffer) {
          checkThread();
          mgl11ExtensionPack.glIsRenderbufferOES(renderbuffer);
          checkError();
          return false;
      }
  
      @Override
      public void glRenderbufferStorageOES(int target, int internalformat,
              int width, int height) {
          checkThread();
          mgl11ExtensionPack.glRenderbufferStorageOES(target, internalformat, width, height);
          checkError();
      }
  
      @Override
      public void glTexGenf(int coord, int pname, float param) {
          checkThread();
          mgl11ExtensionPack.glTexGenf(coord, pname, param);
          checkError();
      }
  
      @Override
      public void glTexGenfv(int coord, int pname, float[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glTexGenfv(coord, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glTexGenfv(int coord, int pname, FloatBuffer params) {
          checkThread();
          mgl11ExtensionPack.glTexGenfv(coord, pname, params);
          checkError();
      }
  
      @Override
      public void glTexGeni(int coord, int pname, int param) {
          checkThread();
          mgl11ExtensionPack.glTexGeni(coord, pname, param);
          checkError();
      }
  
      @Override
      public void glTexGeniv(int coord, int pname, int[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glTexGeniv(coord, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glTexGeniv(int coord, int pname, IntBuffer params) {
          checkThread();
          mgl11ExtensionPack.glTexGeniv(coord, pname, params);
          checkError();
      }
  
      @Override
      public void glTexGenx(int coord, int pname, int param) {
          checkThread();
          mgl11ExtensionPack.glTexGenx(coord, pname, param);
          checkError();
      }
  
      @Override
      public void glTexGenxv(int coord, int pname, int[] params, int offset) {
          checkThread();
          mgl11ExtensionPack.glTexGenxv(coord, pname, params, offset);
          checkError();
      }
  
      @Override
      public void glTexGenxv(int coord, int pname, IntBuffer params) {
          checkThread();
          mgl11ExtensionPack.glTexGenxv(coord, pname, params);
          checkError();
      }
  }
  