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