1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.apis.graphics.spritetext;
18 
19 import android.util.Log;
20 
21 import java.nio.Buffer;
22 import java.nio.ByteBuffer;
23 import java.nio.ByteOrder;
24 import java.nio.FloatBuffer;
25 import java.nio.IntBuffer;
26 import java.nio.ShortBuffer;
27 
28 import javax.microedition.khronos.opengles.GL;
29 import javax.microedition.khronos.opengles.GL10;
30 import javax.microedition.khronos.opengles.GL10Ext;
31 import javax.microedition.khronos.opengles.GL11;
32 import javax.microedition.khronos.opengles.GL11Ext;
33 
34 /**
35  * Allows retrieving the current matrix even if the current OpenGL ES
36  * driver does not support retrieving the current matrix.
37  *
38  * Note: the actual matrix may differ from the retrieved matrix, due
39  * to differences in the way the math is implemented by GLMatrixWrapper
40  * as compared to the way the math is implemented by the OpenGL ES
41  * driver.
42  */
43 class MatrixTrackingGL implements GL, GL10, GL10Ext, GL11, GL11Ext {
44     private GL10 mgl;
45     private GL10Ext mgl10Ext;
46     private GL11 mgl11;
47     private GL11Ext mgl11Ext;
48     private int mMatrixMode;
49     private MatrixStack mCurrent;
50     private MatrixStack mModelView;
51     private MatrixStack mTexture;
52     private MatrixStack mProjection;
53 
54     private final static boolean _check = false;
55     ByteBuffer mByteBuffer;
56     FloatBuffer mFloatBuffer;
57     float[] mCheckA;
58     float[] mCheckB;
59 
MatrixTrackingGL(GL gl)60     public MatrixTrackingGL(GL gl) {
61         mgl = (GL10) gl;
62         if (gl instanceof GL10Ext) {
63             mgl10Ext = (GL10Ext) gl;
64         }
65         if (gl instanceof GL11) {
66             mgl11 = (GL11) gl;
67         }
68         if (gl instanceof GL11Ext) {
69             mgl11Ext = (GL11Ext) gl;
70         }
71         mModelView = new MatrixStack();
72         mProjection = new MatrixStack();
73         mTexture = new MatrixStack();
74         mCurrent = mModelView;
75         mMatrixMode = GL10.GL_MODELVIEW;
76     }
77 
78     // ---------------------------------------------------------------------
79     // GL10 methods:
80 
glActiveTexture(int texture)81     public void glActiveTexture(int texture) {
82         mgl.glActiveTexture(texture);
83     }
84 
glAlphaFunc(int func, float ref)85     public void glAlphaFunc(int func, float ref) {
86         mgl.glAlphaFunc(func, ref);
87     }
88 
glAlphaFuncx(int func, int ref)89     public void glAlphaFuncx(int func, int ref) {
90         mgl.glAlphaFuncx(func, ref);
91     }
92 
glBindTexture(int target, int texture)93     public void glBindTexture(int target, int texture) {
94         mgl.glBindTexture(target, texture);
95     }
96 
glBlendFunc(int sfactor, int dfactor)97     public void glBlendFunc(int sfactor, int dfactor) {
98         mgl.glBlendFunc(sfactor, dfactor);
99     }
100 
glClear(int mask)101     public void glClear(int mask) {
102         mgl.glClear(mask);
103     }
104 
glClearColor(float red, float green, float blue, float alpha)105     public void glClearColor(float red, float green, float blue, float alpha) {
106         mgl.glClearColor(red, green, blue, alpha);
107     }
108 
glClearColorx(int red, int green, int blue, int alpha)109     public void glClearColorx(int red, int green, int blue, int alpha) {
110         mgl.glClearColorx(red, green, blue, alpha);
111     }
112 
glClearDepthf(float depth)113     public void glClearDepthf(float depth) {
114         mgl.glClearDepthf(depth);
115     }
116 
glClearDepthx(int depth)117     public void glClearDepthx(int depth) {
118         mgl.glClearDepthx(depth);
119     }
120 
glClearStencil(int s)121     public void glClearStencil(int s) {
122         mgl.glClearStencil(s);
123     }
124 
glClientActiveTexture(int texture)125     public void glClientActiveTexture(int texture) {
126         mgl.glClientActiveTexture(texture);
127     }
128 
glColor4f(float red, float green, float blue, float alpha)129     public void glColor4f(float red, float green, float blue, float alpha) {
130         mgl.glColor4f(red, green, blue, alpha);
131     }
132 
glColor4x(int red, int green, int blue, int alpha)133     public void glColor4x(int red, int green, int blue, int alpha) {
134         mgl.glColor4x(red, green, blue, alpha);
135     }
136 
glColorMask(boolean red, boolean green, boolean blue, boolean alpha)137     public void glColorMask(boolean red, boolean green, boolean blue,
138             boolean alpha) {
139         mgl.glColorMask(red, green, blue, alpha);
140     }
141 
glColorPointer(int size, int type, int stride, Buffer pointer)142     public void glColorPointer(int size, int type, int stride, Buffer pointer) {
143         mgl.glColorPointer(size, type, stride, pointer);
144     }
145 
glCompressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, int imageSize, Buffer data)146     public void glCompressedTexImage2D(int target, int level,
147             int internalformat, int width, int height, int border,
148             int imageSize, Buffer data) {
149         mgl.glCompressedTexImage2D(target, level, internalformat, width,
150                 height, border, imageSize, data);
151     }
152 
glCompressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int imageSize, Buffer data)153     public void glCompressedTexSubImage2D(int target, int level, int xoffset,
154             int yoffset, int width, int height, int format, int imageSize,
155             Buffer data) {
156         mgl.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width,
157                 height, format, imageSize, data);
158     }
159 
glCopyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border)160     public void glCopyTexImage2D(int target, int level, int internalformat,
161             int x, int y, int width, int height, int border) {
162         mgl.glCopyTexImage2D(target, level, internalformat, x, y, width,
163                 height, border);
164     }
165 
glCopyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height)166     public void glCopyTexSubImage2D(int target, int level, int xoffset,
167             int yoffset, int x, int y, int width, int height) {
168         mgl.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width,
169                 height);
170     }
171 
glCullFace(int mode)172     public void glCullFace(int mode) {
173         mgl.glCullFace(mode);
174     }
175 
glDeleteTextures(int n, int[] textures, int offset)176     public void glDeleteTextures(int n, int[] textures, int offset) {
177         mgl.glDeleteTextures(n, textures, offset);
178     }
179 
glDeleteTextures(int n, IntBuffer textures)180     public void glDeleteTextures(int n, IntBuffer textures) {
181         mgl.glDeleteTextures(n, textures);
182     }
183 
glDepthFunc(int func)184     public void glDepthFunc(int func) {
185         mgl.glDepthFunc(func);
186     }
187 
glDepthMask(boolean flag)188     public void glDepthMask(boolean flag) {
189         mgl.glDepthMask(flag);
190     }
191 
glDepthRangef(float near, float far)192     public void glDepthRangef(float near, float far) {
193         mgl.glDepthRangef(near, far);
194     }
195 
glDepthRangex(int near, int far)196     public void glDepthRangex(int near, int far) {
197         mgl.glDepthRangex(near, far);
198     }
199 
glDisable(int cap)200     public void glDisable(int cap) {
201         mgl.glDisable(cap);
202     }
203 
glDisableClientState(int array)204     public void glDisableClientState(int array) {
205         mgl.glDisableClientState(array);
206     }
207 
glDrawArrays(int mode, int first, int count)208     public void glDrawArrays(int mode, int first, int count) {
209         mgl.glDrawArrays(mode, first, count);
210     }
211 
glDrawElements(int mode, int count, int type, Buffer indices)212     public void glDrawElements(int mode, int count, int type, Buffer indices) {
213         mgl.glDrawElements(mode, count, type, indices);
214     }
215 
glEnable(int cap)216     public void glEnable(int cap) {
217         mgl.glEnable(cap);
218     }
219 
glEnableClientState(int array)220     public void glEnableClientState(int array) {
221         mgl.glEnableClientState(array);
222     }
223 
glFinish()224     public void glFinish() {
225         mgl.glFinish();
226     }
227 
glFlush()228     public void glFlush() {
229         mgl.glFlush();
230     }
231 
glFogf(int pname, float param)232     public void glFogf(int pname, float param) {
233         mgl.glFogf(pname, param);
234     }
235 
glFogfv(int pname, float[] params, int offset)236     public void glFogfv(int pname, float[] params, int offset) {
237         mgl.glFogfv(pname, params, offset);
238     }
239 
glFogfv(int pname, FloatBuffer params)240     public void glFogfv(int pname, FloatBuffer params) {
241         mgl.glFogfv(pname, params);
242     }
243 
glFogx(int pname, int param)244     public void glFogx(int pname, int param) {
245         mgl.glFogx(pname, param);
246     }
247 
glFogxv(int pname, int[] params, int offset)248     public void glFogxv(int pname, int[] params, int offset) {
249         mgl.glFogxv(pname, params, offset);
250     }
251 
glFogxv(int pname, IntBuffer params)252     public void glFogxv(int pname, IntBuffer params) {
253         mgl.glFogxv(pname, params);
254     }
255 
glFrontFace(int mode)256     public void glFrontFace(int mode) {
257         mgl.glFrontFace(mode);
258     }
259 
glFrustumf(float left, float right, float bottom, float top, float near, float far)260     public void glFrustumf(float left, float right, float bottom, float top,
261             float near, float far) {
262         mCurrent.glFrustumf(left, right, bottom, top, near, far);
263         mgl.glFrustumf(left, right, bottom, top, near, far);
264         if ( _check) check();
265     }
266 
glFrustumx(int left, int right, int bottom, int top, int near, int far)267     public void glFrustumx(int left, int right, int bottom, int top, int near,
268             int far) {
269         mCurrent.glFrustumx(left, right, bottom, top, near, far);
270         mgl.glFrustumx(left, right, bottom, top, near, far);
271         if ( _check) check();
272     }
273 
glGenTextures(int n, int[] textures, int offset)274     public void glGenTextures(int n, int[] textures, int offset) {
275         mgl.glGenTextures(n, textures, offset);
276     }
277 
glGenTextures(int n, IntBuffer textures)278     public void glGenTextures(int n, IntBuffer textures) {
279         mgl.glGenTextures(n, textures);
280     }
281 
glGetError()282     public int glGetError() {
283         int result = mgl.glGetError();
284         return result;
285     }
286 
glGetIntegerv(int pname, int[] params, int offset)287     public void glGetIntegerv(int pname, int[] params, int offset) {
288         mgl.glGetIntegerv(pname, params, offset);
289     }
290 
glGetIntegerv(int pname, IntBuffer params)291     public void glGetIntegerv(int pname, IntBuffer params) {
292         mgl.glGetIntegerv(pname, params);
293     }
294 
glGetString(int name)295     public String glGetString(int name) {
296         String result = mgl.glGetString(name);
297         return result;
298     }
299 
glHint(int target, int mode)300     public void glHint(int target, int mode) {
301         mgl.glHint(target, mode);
302     }
303 
glLightModelf(int pname, float param)304     public void glLightModelf(int pname, float param) {
305         mgl.glLightModelf(pname, param);
306     }
307 
glLightModelfv(int pname, float[] params, int offset)308     public void glLightModelfv(int pname, float[] params, int offset) {
309         mgl.glLightModelfv(pname, params, offset);
310     }
311 
glLightModelfv(int pname, FloatBuffer params)312     public void glLightModelfv(int pname, FloatBuffer params) {
313         mgl.glLightModelfv(pname, params);
314     }
315 
glLightModelx(int pname, int param)316     public void glLightModelx(int pname, int param) {
317         mgl.glLightModelx(pname, param);
318     }
319 
glLightModelxv(int pname, int[] params, int offset)320     public void glLightModelxv(int pname, int[] params, int offset) {
321         mgl.glLightModelxv(pname, params, offset);
322     }
323 
glLightModelxv(int pname, IntBuffer params)324     public void glLightModelxv(int pname, IntBuffer params) {
325         mgl.glLightModelxv(pname, params);
326     }
327 
glLightf(int light, int pname, float param)328     public void glLightf(int light, int pname, float param) {
329         mgl.glLightf(light, pname, param);
330     }
331 
glLightfv(int light, int pname, float[] params, int offset)332     public void glLightfv(int light, int pname, float[] params, int offset) {
333         mgl.glLightfv(light, pname, params, offset);
334     }
335 
glLightfv(int light, int pname, FloatBuffer params)336     public void glLightfv(int light, int pname, FloatBuffer params) {
337         mgl.glLightfv(light, pname, params);
338     }
339 
glLightx(int light, int pname, int param)340     public void glLightx(int light, int pname, int param) {
341         mgl.glLightx(light, pname, param);
342     }
343 
glLightxv(int light, int pname, int[] params, int offset)344     public void glLightxv(int light, int pname, int[] params, int offset) {
345         mgl.glLightxv(light, pname, params, offset);
346     }
347 
glLightxv(int light, int pname, IntBuffer params)348     public void glLightxv(int light, int pname, IntBuffer params) {
349         mgl.glLightxv(light, pname, params);
350     }
351 
glLineWidth(float width)352     public void glLineWidth(float width) {
353         mgl.glLineWidth(width);
354     }
355 
glLineWidthx(int width)356     public void glLineWidthx(int width) {
357         mgl.glLineWidthx(width);
358     }
359 
glLoadIdentity()360     public void glLoadIdentity() {
361         mCurrent.glLoadIdentity();
362         mgl.glLoadIdentity();
363         if ( _check) check();
364     }
365 
glLoadMatrixf(float[] m, int offset)366     public void glLoadMatrixf(float[] m, int offset) {
367         mCurrent.glLoadMatrixf(m, offset);
368         mgl.glLoadMatrixf(m, offset);
369         if ( _check) check();
370     }
371 
glLoadMatrixf(FloatBuffer m)372     public void glLoadMatrixf(FloatBuffer m) {
373         int position = m.position();
374         mCurrent.glLoadMatrixf(m);
375         m.position(position);
376         mgl.glLoadMatrixf(m);
377         if ( _check) check();
378     }
379 
glLoadMatrixx(int[] m, int offset)380     public void glLoadMatrixx(int[] m, int offset) {
381         mCurrent.glLoadMatrixx(m, offset);
382         mgl.glLoadMatrixx(m, offset);
383         if ( _check) check();
384     }
385 
glLoadMatrixx(IntBuffer m)386     public void glLoadMatrixx(IntBuffer m) {
387         int position = m.position();
388         mCurrent.glLoadMatrixx(m);
389         m.position(position);
390         mgl.glLoadMatrixx(m);
391         if ( _check) check();
392     }
393 
glLogicOp(int opcode)394     public void glLogicOp(int opcode) {
395         mgl.glLogicOp(opcode);
396     }
397 
glMaterialf(int face, int pname, float param)398     public void glMaterialf(int face, int pname, float param) {
399         mgl.glMaterialf(face, pname, param);
400     }
401 
glMaterialfv(int face, int pname, float[] params, int offset)402     public void glMaterialfv(int face, int pname, float[] params, int offset) {
403         mgl.glMaterialfv(face, pname, params, offset);
404     }
405 
glMaterialfv(int face, int pname, FloatBuffer params)406     public void glMaterialfv(int face, int pname, FloatBuffer params) {
407         mgl.glMaterialfv(face, pname, params);
408     }
409 
glMaterialx(int face, int pname, int param)410     public void glMaterialx(int face, int pname, int param) {
411         mgl.glMaterialx(face, pname, param);
412     }
413 
glMaterialxv(int face, int pname, int[] params, int offset)414     public void glMaterialxv(int face, int pname, int[] params, int offset) {
415         mgl.glMaterialxv(face, pname, params, offset);
416     }
417 
glMaterialxv(int face, int pname, IntBuffer params)418     public void glMaterialxv(int face, int pname, IntBuffer params) {
419         mgl.glMaterialxv(face, pname, params);
420     }
421 
glMatrixMode(int mode)422     public void glMatrixMode(int mode) {
423         switch (mode) {
424         case GL10.GL_MODELVIEW:
425             mCurrent = mModelView;
426             break;
427         case GL10.GL_TEXTURE:
428             mCurrent = mTexture;
429             break;
430         case GL10.GL_PROJECTION:
431             mCurrent = mProjection;
432             break;
433         default:
434             throw new IllegalArgumentException("Unknown matrix mode: " + mode);
435         }
436         mgl.glMatrixMode(mode);
437         mMatrixMode = mode;
438         if ( _check) check();
439     }
440 
glMultMatrixf(float[] m, int offset)441     public void glMultMatrixf(float[] m, int offset) {
442         mCurrent.glMultMatrixf(m, offset);
443         mgl.glMultMatrixf(m, offset);
444         if ( _check) check();
445     }
446 
glMultMatrixf(FloatBuffer m)447     public void glMultMatrixf(FloatBuffer m) {
448         int position = m.position();
449         mCurrent.glMultMatrixf(m);
450         m.position(position);
451         mgl.glMultMatrixf(m);
452         if ( _check) check();
453     }
454 
glMultMatrixx(int[] m, int offset)455     public void glMultMatrixx(int[] m, int offset) {
456         mCurrent.glMultMatrixx(m, offset);
457         mgl.glMultMatrixx(m, offset);
458         if ( _check) check();
459     }
460 
glMultMatrixx(IntBuffer m)461     public void glMultMatrixx(IntBuffer m) {
462         int position = m.position();
463         mCurrent.glMultMatrixx(m);
464         m.position(position);
465         mgl.glMultMatrixx(m);
466         if ( _check) check();
467     }
468 
glMultiTexCoord4f(int target, float s, float t, float r, float q)469     public void glMultiTexCoord4f(int target,
470             float s, float t, float r, float q) {
471         mgl.glMultiTexCoord4f(target, s, t, r, q);
472     }
473 
glMultiTexCoord4x(int target, int s, int t, int r, int q)474     public void glMultiTexCoord4x(int target, int s, int t, int r, int q) {
475         mgl.glMultiTexCoord4x(target, s, t, r, q);
476     }
477 
glNormal3f(float nx, float ny, float nz)478     public void glNormal3f(float nx, float ny, float nz) {
479         mgl.glNormal3f(nx, ny, nz);
480     }
481 
glNormal3x(int nx, int ny, int nz)482     public void glNormal3x(int nx, int ny, int nz) {
483         mgl.glNormal3x(nx, ny, nz);
484     }
485 
glNormalPointer(int type, int stride, Buffer pointer)486     public void glNormalPointer(int type, int stride, Buffer pointer) {
487         mgl.glNormalPointer(type, stride, pointer);
488     }
489 
glOrthof(float left, float right, float bottom, float top, float near, float far)490     public void glOrthof(float left, float right, float bottom, float top,
491             float near, float far) {
492         mCurrent.glOrthof(left, right, bottom, top, near, far);
493         mgl.glOrthof(left, right, bottom, top, near, far);
494         if ( _check) check();
495     }
496 
glOrthox(int left, int right, int bottom, int top, int near, int far)497     public void glOrthox(int left, int right, int bottom, int top, int near,
498             int far) {
499         mCurrent.glOrthox(left, right, bottom, top, near, far);
500         mgl.glOrthox(left, right, bottom, top, near, far);
501         if ( _check) check();
502     }
503 
glPixelStorei(int pname, int param)504     public void glPixelStorei(int pname, int param) {
505         mgl.glPixelStorei(pname, param);
506     }
507 
glPointSize(float size)508     public void glPointSize(float size) {
509         mgl.glPointSize(size);
510     }
511 
glPointSizex(int size)512     public void glPointSizex(int size) {
513         mgl.glPointSizex(size);
514     }
515 
glPolygonOffset(float factor, float units)516     public void glPolygonOffset(float factor, float units) {
517         mgl.glPolygonOffset(factor, units);
518     }
519 
glPolygonOffsetx(int factor, int units)520     public void glPolygonOffsetx(int factor, int units) {
521         mgl.glPolygonOffsetx(factor, units);
522     }
523 
glPopMatrix()524     public void glPopMatrix() {
525         mCurrent.glPopMatrix();
526         mgl.glPopMatrix();
527         if ( _check) check();
528     }
529 
glPushMatrix()530     public void glPushMatrix() {
531         mCurrent.glPushMatrix();
532         mgl.glPushMatrix();
533         if ( _check) check();
534     }
535 
glReadPixels(int x, int y, int width, int height, int format, int type, Buffer pixels)536     public void glReadPixels(int x, int y, int width, int height, int format,
537             int type, Buffer pixels) {
538         mgl.glReadPixels(x, y, width, height, format, type, pixels);
539     }
540 
glRotatef(float angle, float x, float y, float z)541     public void glRotatef(float angle, float x, float y, float z) {
542         mCurrent.glRotatef(angle, x, y, z);
543         mgl.glRotatef(angle, x, y, z);
544         if ( _check) check();
545     }
546 
glRotatex(int angle, int x, int y, int z)547     public void glRotatex(int angle, int x, int y, int z) {
548         mCurrent.glRotatex(angle, x, y, z);
549         mgl.glRotatex(angle, x, y, z);
550         if ( _check) check();
551     }
552 
glSampleCoverage(float value, boolean invert)553     public void glSampleCoverage(float value, boolean invert) {
554         mgl.glSampleCoverage(value, invert);
555     }
556 
glSampleCoveragex(int value, boolean invert)557     public void glSampleCoveragex(int value, boolean invert) {
558         mgl.glSampleCoveragex(value, invert);
559     }
560 
glScalef(float x, float y, float z)561     public void glScalef(float x, float y, float z) {
562         mCurrent.glScalef(x, y, z);
563         mgl.glScalef(x, y, z);
564         if ( _check) check();
565     }
566 
glScalex(int x, int y, int z)567     public void glScalex(int x, int y, int z) {
568         mCurrent.glScalex(x, y, z);
569         mgl.glScalex(x, y, z);
570         if ( _check) check();
571     }
572 
glScissor(int x, int y, int width, int height)573     public void glScissor(int x, int y, int width, int height) {
574         mgl.glScissor(x, y, width, height);
575     }
576 
glShadeModel(int mode)577     public void glShadeModel(int mode) {
578         mgl.glShadeModel(mode);
579     }
580 
glStencilFunc(int func, int ref, int mask)581     public void glStencilFunc(int func, int ref, int mask) {
582         mgl.glStencilFunc(func, ref, mask);
583     }
584 
glStencilMask(int mask)585     public void glStencilMask(int mask) {
586         mgl.glStencilMask(mask);
587     }
588 
glStencilOp(int fail, int zfail, int zpass)589     public void glStencilOp(int fail, int zfail, int zpass) {
590         mgl.glStencilOp(fail, zfail, zpass);
591     }
592 
glTexCoordPointer(int size, int type, int stride, Buffer pointer)593     public void glTexCoordPointer(int size, int type,
594             int stride, Buffer pointer) {
595         mgl.glTexCoordPointer(size, type, stride, pointer);
596     }
597 
glTexEnvf(int target, int pname, float param)598     public void glTexEnvf(int target, int pname, float param) {
599         mgl.glTexEnvf(target, pname, param);
600     }
601 
glTexEnvfv(int target, int pname, float[] params, int offset)602     public void glTexEnvfv(int target, int pname, float[] params, int offset) {
603         mgl.glTexEnvfv(target, pname, params, offset);
604     }
605 
glTexEnvfv(int target, int pname, FloatBuffer params)606     public void glTexEnvfv(int target, int pname, FloatBuffer params) {
607         mgl.glTexEnvfv(target, pname, params);
608     }
609 
glTexEnvx(int target, int pname, int param)610     public void glTexEnvx(int target, int pname, int param) {
611         mgl.glTexEnvx(target, pname, param);
612     }
613 
glTexEnvxv(int target, int pname, int[] params, int offset)614     public void glTexEnvxv(int target, int pname, int[] params, int offset) {
615         mgl.glTexEnvxv(target, pname, params, offset);
616     }
617 
glTexEnvxv(int target, int pname, IntBuffer params)618     public void glTexEnvxv(int target, int pname, IntBuffer params) {
619         mgl.glTexEnvxv(target, pname, params);
620     }
621 
glTexImage2D(int target, int level, int internalformat, int width, int height, int border, int format, int type, Buffer pixels)622     public void glTexImage2D(int target, int level, int internalformat,
623             int width, int height, int border, int format, int type,
624             Buffer pixels) {
625         mgl.glTexImage2D(target, level, internalformat, width, height, border,
626                 format, type, pixels);
627     }
628 
glTexParameterf(int target, int pname, float param)629     public void glTexParameterf(int target, int pname, float param) {
630         mgl.glTexParameterf(target, pname, param);
631     }
632 
glTexParameterx(int target, int pname, int param)633     public void glTexParameterx(int target, int pname, int param) {
634         mgl.glTexParameterx(target, pname, param);
635     }
636 
glTexParameteriv(int target, int pname, int[] params, int offset)637     public void glTexParameteriv(int target, int pname, int[] params, int offset) {
638         mgl11.glTexParameteriv(target, pname, params, offset);
639     }
640 
glTexParameteriv(int target, int pname, IntBuffer params)641     public void glTexParameteriv(int target, int pname, IntBuffer params) {
642         mgl11.glTexParameteriv(target, pname, params);
643     }
644 
glTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels)645     public void glTexSubImage2D(int target, int level, int xoffset,
646             int yoffset, int width, int height, int format, int type,
647             Buffer pixels) {
648         mgl.glTexSubImage2D(target, level, xoffset, yoffset, width, height,
649                 format, type, pixels);
650     }
651 
glTranslatef(float x, float y, float z)652     public void glTranslatef(float x, float y, float z) {
653         mCurrent.glTranslatef(x, y, z);
654         mgl.glTranslatef(x, y, z);
655         if ( _check) check();
656     }
657 
glTranslatex(int x, int y, int z)658     public void glTranslatex(int x, int y, int z) {
659         mCurrent.glTranslatex(x, y, z);
660         mgl.glTranslatex(x, y, z);
661         if ( _check) check();
662     }
663 
glVertexPointer(int size, int type, int stride, Buffer pointer)664     public void glVertexPointer(int size, int type,
665             int stride, Buffer pointer) {
666         mgl.glVertexPointer(size, type, stride, pointer);
667     }
668 
glViewport(int x, int y, int width, int height)669     public void glViewport(int x, int y, int width, int height) {
670         mgl.glViewport(x, y, width, height);
671     }
672 
glClipPlanef(int plane, float[] equation, int offset)673     public void glClipPlanef(int plane, float[] equation, int offset) {
674         mgl11.glClipPlanef(plane, equation, offset);
675     }
676 
glClipPlanef(int plane, FloatBuffer equation)677     public void glClipPlanef(int plane, FloatBuffer equation) {
678         mgl11.glClipPlanef(plane, equation);
679     }
680 
glClipPlanex(int plane, int[] equation, int offset)681     public void glClipPlanex(int plane, int[] equation, int offset) {
682         mgl11.glClipPlanex(plane, equation, offset);
683     }
684 
glClipPlanex(int plane, IntBuffer equation)685     public void glClipPlanex(int plane, IntBuffer equation) {
686         mgl11.glClipPlanex(plane, equation);
687     }
688 
689     // Draw Texture Extension
690 
glDrawTexfOES(float x, float y, float z, float width, float height)691     public void glDrawTexfOES(float x, float y, float z,
692         float width, float height) {
693         mgl11Ext.glDrawTexfOES(x, y, z, width, height);
694     }
695 
glDrawTexfvOES(float[] coords, int offset)696     public void glDrawTexfvOES(float[] coords, int offset) {
697         mgl11Ext.glDrawTexfvOES(coords, offset);
698     }
699 
glDrawTexfvOES(FloatBuffer coords)700     public void glDrawTexfvOES(FloatBuffer coords) {
701         mgl11Ext.glDrawTexfvOES(coords);
702     }
703 
glDrawTexiOES(int x, int y, int z, int width, int height)704     public void glDrawTexiOES(int x, int y, int z, int width, int height) {
705         mgl11Ext.glDrawTexiOES(x, y, z, width, height);
706     }
707 
glDrawTexivOES(int[] coords, int offset)708     public void glDrawTexivOES(int[] coords, int offset) {
709         mgl11Ext.glDrawTexivOES(coords, offset);
710     }
711 
glDrawTexivOES(IntBuffer coords)712     public void glDrawTexivOES(IntBuffer coords) {
713         mgl11Ext.glDrawTexivOES(coords);
714     }
715 
glDrawTexsOES(short x, short y, short z, short width, short height)716     public void glDrawTexsOES(short x, short y, short z,
717         short width, short height) {
718         mgl11Ext.glDrawTexsOES(x, y, z, width, height);
719     }
720 
glDrawTexsvOES(short[] coords, int offset)721     public void glDrawTexsvOES(short[] coords, int offset) {
722         mgl11Ext.glDrawTexsvOES(coords, offset);
723     }
724 
glDrawTexsvOES(ShortBuffer coords)725     public void glDrawTexsvOES(ShortBuffer coords) {
726         mgl11Ext.glDrawTexsvOES(coords);
727     }
728 
glDrawTexxOES(int x, int y, int z, int width, int height)729     public void glDrawTexxOES(int x, int y, int z, int width, int height) {
730         mgl11Ext.glDrawTexxOES(x, y, z, width, height);
731     }
732 
glDrawTexxvOES(int[] coords, int offset)733     public void glDrawTexxvOES(int[] coords, int offset) {
734         mgl11Ext.glDrawTexxvOES(coords, offset);
735     }
736 
glDrawTexxvOES(IntBuffer coords)737     public void glDrawTexxvOES(IntBuffer coords) {
738         mgl11Ext.glDrawTexxvOES(coords);
739     }
740 
glQueryMatrixxOES(int[] mantissa, int mantissaOffset, int[] exponent, int exponentOffset)741     public int glQueryMatrixxOES(int[] mantissa, int mantissaOffset,
742         int[] exponent, int exponentOffset) {
743         return mgl10Ext.glQueryMatrixxOES(mantissa, mantissaOffset,
744             exponent, exponentOffset);
745     }
746 
glQueryMatrixxOES(IntBuffer mantissa, IntBuffer exponent)747     public int glQueryMatrixxOES(IntBuffer mantissa, IntBuffer exponent) {
748         return mgl10Ext.glQueryMatrixxOES(mantissa, exponent);
749     }
750 
751     // Unsupported GL11 methods
752 
glBindBuffer(int target, int buffer)753     public void glBindBuffer(int target, int buffer) {
754         throw new UnsupportedOperationException();
755     }
756 
glBufferData(int target, int size, Buffer data, int usage)757     public void glBufferData(int target, int size, Buffer data, int usage) {
758         throw new UnsupportedOperationException();
759     }
760 
glBufferSubData(int target, int offset, int size, Buffer data)761     public void glBufferSubData(int target, int offset, int size, Buffer data) {
762         throw new UnsupportedOperationException();
763     }
764 
glColor4ub(byte red, byte green, byte blue, byte alpha)765     public void glColor4ub(byte red, byte green, byte blue, byte alpha) {
766         throw new UnsupportedOperationException();
767     }
768 
glDeleteBuffers(int n, int[] buffers, int offset)769     public void glDeleteBuffers(int n, int[] buffers, int offset) {
770         throw new UnsupportedOperationException();
771     }
772 
glDeleteBuffers(int n, IntBuffer buffers)773     public void glDeleteBuffers(int n, IntBuffer buffers) {
774         throw new UnsupportedOperationException();
775     }
776 
glGenBuffers(int n, int[] buffers, int offset)777     public void glGenBuffers(int n, int[] buffers, int offset) {
778         throw new UnsupportedOperationException();
779     }
780 
glGenBuffers(int n, IntBuffer buffers)781     public void glGenBuffers(int n, IntBuffer buffers) {
782         throw new UnsupportedOperationException();
783     }
784 
glGetBooleanv(int pname, boolean[] params, int offset)785     public void glGetBooleanv(int pname, boolean[] params, int offset) {
786         throw new UnsupportedOperationException();
787     }
788 
glGetBooleanv(int pname, IntBuffer params)789     public void glGetBooleanv(int pname, IntBuffer params) {
790         throw new UnsupportedOperationException();
791     }
792 
glGetBufferParameteriv(int target, int pname, int[] params, int offset)793     public void glGetBufferParameteriv(int target, int pname, int[] params, int offset) {
794         throw new UnsupportedOperationException();
795     }
796 
glGetBufferParameteriv(int target, int pname, IntBuffer params)797     public void glGetBufferParameteriv(int target, int pname, IntBuffer params) {
798         throw new UnsupportedOperationException();
799     }
800 
glGetClipPlanef(int pname, float[] eqn, int offset)801     public void glGetClipPlanef(int pname, float[] eqn, int offset) {
802         throw new UnsupportedOperationException();
803     }
804 
glGetClipPlanef(int pname, FloatBuffer eqn)805     public void glGetClipPlanef(int pname, FloatBuffer eqn) {
806         throw new UnsupportedOperationException();
807     }
808 
glGetClipPlanex(int pname, int[] eqn, int offset)809     public void glGetClipPlanex(int pname, int[] eqn, int offset) {
810         throw new UnsupportedOperationException();
811     }
812 
glGetClipPlanex(int pname, IntBuffer eqn)813     public void glGetClipPlanex(int pname, IntBuffer eqn) {
814         throw new UnsupportedOperationException();
815     }
816 
glGetFixedv(int pname, int[] params, int offset)817     public void glGetFixedv(int pname, int[] params, int offset) {
818         throw new UnsupportedOperationException();
819     }
820 
glGetFixedv(int pname, IntBuffer params)821     public void glGetFixedv(int pname, IntBuffer params) {
822         throw new UnsupportedOperationException();
823     }
824 
glGetFloatv(int pname, float[] params, int offset)825     public void glGetFloatv(int pname, float[] params, int offset) {
826         throw new UnsupportedOperationException();
827     }
828 
glGetFloatv(int pname, FloatBuffer params)829     public void glGetFloatv(int pname, FloatBuffer params) {
830         throw new UnsupportedOperationException();
831     }
832 
glGetLightfv(int light, int pname, float[] params, int offset)833     public void glGetLightfv(int light, int pname, float[] params, int offset) {
834         throw new UnsupportedOperationException();
835     }
836 
glGetLightfv(int light, int pname, FloatBuffer params)837     public void glGetLightfv(int light, int pname, FloatBuffer params) {
838         throw new UnsupportedOperationException();
839     }
840 
glGetLightxv(int light, int pname, int[] params, int offset)841     public void glGetLightxv(int light, int pname, int[] params, int offset) {
842         throw new UnsupportedOperationException();
843     }
844 
glGetLightxv(int light, int pname, IntBuffer params)845     public void glGetLightxv(int light, int pname, IntBuffer params) {
846         throw new UnsupportedOperationException();
847     }
848 
glGetMaterialfv(int face, int pname, float[] params, int offset)849     public void glGetMaterialfv(int face, int pname, float[] params, int offset) {
850         throw new UnsupportedOperationException();
851     }
852 
glGetMaterialfv(int face, int pname, FloatBuffer params)853     public void glGetMaterialfv(int face, int pname, FloatBuffer params) {
854         throw new UnsupportedOperationException();
855     }
856 
glGetMaterialxv(int face, int pname, int[] params, int offset)857     public void glGetMaterialxv(int face, int pname, int[] params, int offset) {
858         throw new UnsupportedOperationException();
859     }
860 
glGetMaterialxv(int face, int pname, IntBuffer params)861     public void glGetMaterialxv(int face, int pname, IntBuffer params) {
862         throw new UnsupportedOperationException();
863     }
864 
glGetTexEnviv(int env, int pname, int[] params, int offset)865     public void glGetTexEnviv(int env, int pname, int[] params, int offset) {
866         throw new UnsupportedOperationException();
867     }
868 
glGetTexEnviv(int env, int pname, IntBuffer params)869     public void glGetTexEnviv(int env, int pname, IntBuffer params) {
870         throw new UnsupportedOperationException();
871     }
872 
glGetTexEnvxv(int env, int pname, int[] params, int offset)873     public void glGetTexEnvxv(int env, int pname, int[] params, int offset) {
874         throw new UnsupportedOperationException();
875     }
876 
glGetTexEnvxv(int env, int pname, IntBuffer params)877     public void glGetTexEnvxv(int env, int pname, IntBuffer params) {
878         throw new UnsupportedOperationException();
879     }
880 
glGetTexParameterfv(int target, int pname, float[] params, int offset)881     public void glGetTexParameterfv(int target, int pname, float[] params, int offset) {
882         throw new UnsupportedOperationException();
883     }
884 
glGetTexParameterfv(int target, int pname, FloatBuffer params)885     public void glGetTexParameterfv(int target, int pname, FloatBuffer params) {
886         throw new UnsupportedOperationException();
887     }
888 
glGetTexParameteriv(int target, int pname, int[] params, int offset)889     public void glGetTexParameteriv(int target, int pname, int[] params, int offset) {
890         throw new UnsupportedOperationException();
891     }
892 
glGetTexParameteriv(int target, int pname, IntBuffer params)893     public void glGetTexParameteriv(int target, int pname, IntBuffer params) {
894         throw new UnsupportedOperationException();
895     }
896 
glGetTexParameterxv(int target, int pname, int[] params, int offset)897     public void glGetTexParameterxv(int target, int pname, int[] params, int offset) {
898         throw new UnsupportedOperationException();
899     }
900 
glGetTexParameterxv(int target, int pname, IntBuffer params)901     public void glGetTexParameterxv(int target, int pname, IntBuffer params) {
902         throw new UnsupportedOperationException();
903     }
904 
glIsBuffer(int buffer)905     public boolean glIsBuffer(int buffer) {
906         throw new UnsupportedOperationException();
907     }
908 
glIsEnabled(int cap)909     public boolean glIsEnabled(int cap) {
910         throw new UnsupportedOperationException();
911     }
912 
glIsTexture(int texture)913     public boolean glIsTexture(int texture) {
914         throw new UnsupportedOperationException();
915     }
916 
glPointParameterf(int pname, float param)917     public void glPointParameterf(int pname, float param) {
918         throw new UnsupportedOperationException();
919     }
920 
glPointParameterfv(int pname, float[] params, int offset)921     public void glPointParameterfv(int pname, float[] params, int offset) {
922         throw new UnsupportedOperationException();
923     }
924 
glPointParameterfv(int pname, FloatBuffer params)925     public void glPointParameterfv(int pname, FloatBuffer params) {
926         throw new UnsupportedOperationException();
927     }
928 
glPointParameterx(int pname, int param)929     public void glPointParameterx(int pname, int param) {
930         throw new UnsupportedOperationException();
931     }
932 
glPointParameterxv(int pname, int[] params, int offset)933     public void glPointParameterxv(int pname, int[] params, int offset) {
934         throw new UnsupportedOperationException();
935     }
936 
glPointParameterxv(int pname, IntBuffer params)937     public void glPointParameterxv(int pname, IntBuffer params) {
938         throw new UnsupportedOperationException();
939     }
940 
glPointSizePointerOES(int type, int stride, Buffer pointer)941     public void glPointSizePointerOES(int type, int stride, Buffer pointer) {
942         throw new UnsupportedOperationException();
943     }
944 
glTexEnvi(int target, int pname, int param)945     public void glTexEnvi(int target, int pname, int param) {
946         throw new UnsupportedOperationException();
947     }
948 
glTexEnviv(int target, int pname, int[] params, int offset)949     public void glTexEnviv(int target, int pname, int[] params, int offset) {
950         throw new UnsupportedOperationException();
951     }
952 
glTexEnviv(int target, int pname, IntBuffer params)953     public void glTexEnviv(int target, int pname, IntBuffer params) {
954         throw new UnsupportedOperationException();
955     }
956 
glTexParameterfv(int target, int pname, float[] params, int offset)957     public void glTexParameterfv(int target, int pname, float[] params, int offset) {
958         throw new UnsupportedOperationException();
959     }
960 
glTexParameterfv(int target, int pname, FloatBuffer params)961     public void glTexParameterfv(int target, int pname, FloatBuffer params) {
962         throw new UnsupportedOperationException();
963     }
964 
glTexParameteri(int target, int pname, int param)965     public void glTexParameteri(int target, int pname, int param) {
966         throw new UnsupportedOperationException();
967     }
968 
glTexParameterxv(int target, int pname, int[] params, int offset)969     public void glTexParameterxv(int target, int pname, int[] params, int offset) {
970         throw new UnsupportedOperationException();
971     }
972 
glTexParameterxv(int target, int pname, IntBuffer params)973     public void glTexParameterxv(int target, int pname, IntBuffer params) {
974         throw new UnsupportedOperationException();
975     }
976 
glColorPointer(int size, int type, int stride, int offset)977     public void glColorPointer(int size, int type, int stride, int offset) {
978         throw new UnsupportedOperationException();
979     }
980 
glDrawElements(int mode, int count, int type, int offset)981     public void glDrawElements(int mode, int count, int type, int offset) {
982         throw new UnsupportedOperationException();
983     }
984 
glGetPointerv(int pname, Buffer[] params)985     public void glGetPointerv(int pname, Buffer[] params) {
986         throw new UnsupportedOperationException();
987     }
988 
glNormalPointer(int type, int stride, int offset)989     public void glNormalPointer(int type, int stride, int offset) {
990         throw new UnsupportedOperationException();
991     }
992 
glTexCoordPointer(int size, int type, int stride, int offset)993     public void glTexCoordPointer(int size, int type, int stride, int offset) {
994         throw new UnsupportedOperationException();
995     }
996 
glVertexPointer(int size, int type, int stride, int offset)997     public void glVertexPointer(int size, int type, int stride, int offset) {
998         throw new UnsupportedOperationException();
999     }
1000 
glCurrentPaletteMatrixOES(int matrixpaletteindex)1001     public void glCurrentPaletteMatrixOES(int matrixpaletteindex) {
1002         throw new UnsupportedOperationException();
1003     }
1004 
glLoadPaletteFromModelViewMatrixOES()1005     public void glLoadPaletteFromModelViewMatrixOES() {
1006         throw new UnsupportedOperationException();
1007     }
1008 
glMatrixIndexPointerOES(int size, int type, int stride, Buffer pointer)1009     public void glMatrixIndexPointerOES(int size, int type, int stride,
1010             Buffer pointer) {
1011         throw new UnsupportedOperationException();
1012     }
1013 
glMatrixIndexPointerOES(int size, int type, int stride, int offset)1014     public void glMatrixIndexPointerOES(int size, int type, int stride,
1015             int offset) {
1016         throw new UnsupportedOperationException();
1017     }
1018 
glWeightPointerOES(int size, int type, int stride, Buffer pointer)1019     public void glWeightPointerOES(int size, int type, int stride,
1020             Buffer pointer) {
1021         throw new UnsupportedOperationException();
1022     }
1023 
glWeightPointerOES(int size, int type, int stride, int offset)1024     public void glWeightPointerOES(int size, int type, int stride, int offset) {
1025         throw new UnsupportedOperationException();
1026     }
1027 
1028     /**
1029      * Get the current matrix
1030      */
1031 
getMatrix(float[] m, int offset)1032     public void getMatrix(float[] m, int offset) {
1033         mCurrent.getMatrix(m, offset);
1034     }
1035 
1036     /**
1037      * Get the current matrix mode
1038      */
1039 
getMatrixMode()1040     public int getMatrixMode() {
1041         return mMatrixMode;
1042     }
1043 
check()1044     private void check() {
1045         int oesMode;
1046         switch (mMatrixMode) {
1047         case GL_MODELVIEW:
1048             oesMode = GL11.GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES;
1049             break;
1050         case GL_PROJECTION:
1051             oesMode = GL11.GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES;
1052             break;
1053         case GL_TEXTURE:
1054             oesMode = GL11.GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES;
1055             break;
1056         default:
1057             throw new IllegalArgumentException("Unknown matrix mode");
1058         }
1059 
1060         if ( mByteBuffer == null) {
1061             mCheckA = new float[16];
1062             mCheckB = new float[16];
1063             mByteBuffer = ByteBuffer.allocateDirect(64);
1064             mByteBuffer.order(ByteOrder.nativeOrder());
1065             mFloatBuffer = mByteBuffer.asFloatBuffer();
1066         }
1067         mgl.glGetIntegerv(oesMode, mByteBuffer.asIntBuffer());
1068         for(int i = 0; i < 16; i++) {
1069             mCheckB[i] = mFloatBuffer.get(i);
1070         }
1071         mCurrent.getMatrix(mCheckA, 0);
1072 
1073         boolean fail = false;
1074         for(int i = 0; i < 16; i++) {
1075             if (mCheckA[i] != mCheckB[i]) {
1076                 Log.d("GLMatWrap", "i:" + i + " a:" + mCheckA[i]
1077                 + " a:" + mCheckB[i]);
1078                 fail = true;
1079             }
1080         }
1081         if (fail) {
1082             throw new IllegalArgumentException("Matrix math difference.");
1083         }
1084     }
1085 
1086 }
1087