/* * 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.io.IOException; import java.io.Writer; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.CharBuffer; import java.nio.DoubleBuffer; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.nio.LongBuffer; import java.nio.ShortBuffer; import java.util.Arrays; import javax.microedition.khronos.opengles.GL; /** * A wrapper that logs all GL calls (and results) in human-readable form. * */ class GLLogWrapper extends GLWrapperBase { private static final int FORMAT_INT = 0; private static final int FORMAT_FLOAT = 1; private static final int FORMAT_FIXED = 2; public GLLogWrapper(GL gl, Writer log, boolean logArgumentNames) { super(gl); mLog = log; mLogArgumentNames = logArgumentNames; } private void checkError() { int glError; if ((glError = mgl.glGetError()) != 0) { String errorMessage = "glError: " + Integer.toString(glError); logLine(errorMessage); } } private void logLine(String message) { log(message + '\n'); } private void log(String message) { try { mLog.write(message); } catch (IOException e) { // Ignore exception, keep on trying } } private void begin(String name) { log(name + '('); mArgCount = 0; } private void arg(String name, String value) { if (mArgCount++ > 0) { log(", "); } if (mLogArgumentNames) { log(name + "="); } log(value); } private void end() { log(");\n"); flush(); } private void flush() { try { mLog.flush(); } catch (IOException e) { mLog = null; } } private void arg(String name, boolean value) { arg(name, Boolean.toString(value)); } private void arg(String name, int value) { arg(name, Integer.toString(value)); } private void arg(String name, float value) { arg(name, Float.toString(value)); } private void returns(String result) { log(") returns " + result + ";\n"); flush(); } private void returns(int result) { returns(Integer.toString(result)); } private void arg(String name, int n, int[] arr, int offset) { arg(name, toString(n, FORMAT_INT, arr, offset)); } private void arg(String name, int n, short[] arr, int offset) { arg(name, toString(n, arr, offset)); } private void arg(String name, int n, float[] arr, int offset) { arg(name, toString(n, arr, offset)); } private void formattedAppend(StringBuilder buf, int value, int format) { switch (format) { case FORMAT_INT: buf.append(value); break; case FORMAT_FLOAT: buf.append(Float.intBitsToFloat(value)); break; case FORMAT_FIXED: buf.append(value / 65536.0f); break; } } private String toString(int n, int format, int[] arr, int offset) { StringBuilder buf = new StringBuilder(); buf.append("{\n"); int arrLen = arr.length; for (int i = 0; i < n; i++) { int index = offset + i; buf.append(" [" + index + "] = "); if (index < 0 || index >= arrLen) { buf.append("out of bounds"); } else { formattedAppend(buf, arr[index], format); } buf.append('\n'); } buf.append("}"); return buf.toString(); } private String toString(int n, short[] arr, int offset) { StringBuilder buf = new StringBuilder(); buf.append("{\n"); int arrLen = arr.length; for (int i = 0; i < n; i++) { int index = offset + i; buf.append(" [" + index + "] = "); if (index < 0 || index >= arrLen) { buf.append("out of bounds"); } else { buf.append(arr[index]); } buf.append('\n'); } buf.append("}"); return buf.toString(); } private String toString(int n, float[] arr, int offset) { StringBuilder buf = new StringBuilder(); buf.append("{\n"); int arrLen = arr.length; for (int i = 0; i < n; i++) { int index = offset + i; buf.append("[" + index + "] = "); if (index < 0 || index >= arrLen) { buf.append("out of bounds"); } else { buf.append(arr[index]); } buf.append('\n'); } buf.append("}"); return buf.toString(); } private String toString(int n, FloatBuffer buf) { StringBuilder builder = new StringBuilder(); builder.append("{\n"); for (int i = 0; i < n; i++) { builder.append(" [" + i + "] = " + buf.get(i) + '\n'); } builder.append("}"); return builder.toString(); } private String toString(int n, int format, IntBuffer buf) { StringBuilder builder = new StringBuilder(); builder.append("{\n"); for (int i = 0; i < n; i++) { builder.append(" [" + i + "] = "); formattedAppend(builder, buf.get(i), format); builder.append('\n'); } builder.append("}"); return builder.toString(); } private String toString(int n, ShortBuffer buf) { StringBuilder builder = new StringBuilder(); builder.append("{\n"); for (int i = 0; i < n; i++) { builder.append(" [" + i + "] = " + buf.get(i) + '\n'); } builder.append("}"); return builder.toString(); } private void arg(String name, int n, FloatBuffer buf) { arg(name, toString(n, buf)); } private void arg(String name, int n, IntBuffer buf) { arg(name, toString(n, FORMAT_INT, buf)); } private void arg(String name, int n, ShortBuffer buf) { arg(name, toString(n, buf)); } private void argPointer(int size, int type, int stride, Buffer pointer) { arg("size", size); arg("type", getPointerTypeName(type)); arg("stride", stride); arg("pointer", pointer.toString()); } private static String getHex(int value) { return "0x" + Integer.toHexString(value); } public static String getErrorString(int error) { switch (error) { case GL_NO_ERROR: return "GL_NO_ERROR"; case GL_INVALID_ENUM: return "GL_INVALID_ENUM"; case GL_INVALID_VALUE: return "GL_INVALID_VALUE"; case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION"; case GL_STACK_OVERFLOW: return "GL_STACK_OVERFLOW"; case GL_STACK_UNDERFLOW: return "GL_STACK_UNDERFLOW"; case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY"; default: return getHex(error); } } private String getClearBufferMask(int mask) { StringBuilder b = new StringBuilder(); if ((mask & GL_DEPTH_BUFFER_BIT) != 0) { b.append("GL_DEPTH_BUFFER_BIT"); mask &= ~GL_DEPTH_BUFFER_BIT; } if ((mask & GL_STENCIL_BUFFER_BIT) != 0) { if (b.length() > 0) { b.append(" | "); } b.append("GL_STENCIL_BUFFER_BIT"); mask &= ~GL_STENCIL_BUFFER_BIT; } if ((mask & GL_COLOR_BUFFER_BIT) != 0) { if (b.length() > 0) { b.append(" | "); } b.append("GL_COLOR_BUFFER_BIT"); mask &= ~GL_COLOR_BUFFER_BIT; } if (mask != 0) { if (b.length() > 0) { b.append(" | "); } b.append(getHex(mask)); } return b.toString(); } private String getFactor(int factor) { switch(factor) { case GL_ZERO: return "GL_ZERO"; case GL_ONE: return "GL_ONE"; case GL_SRC_COLOR: return "GL_SRC_COLOR"; case GL_ONE_MINUS_SRC_COLOR: return "GL_ONE_MINUS_SRC_COLOR"; case GL_DST_COLOR: return "GL_DST_COLOR"; case GL_ONE_MINUS_DST_COLOR: return "GL_ONE_MINUS_DST_COLOR"; case GL_SRC_ALPHA: return "GL_SRC_ALPHA"; case GL_ONE_MINUS_SRC_ALPHA: return "GL_ONE_MINUS_SRC_ALPHA"; case GL_DST_ALPHA: return "GL_DST_ALPHA"; case GL_ONE_MINUS_DST_ALPHA: return "GL_ONE_MINUS_DST_ALPHA"; case GL_SRC_ALPHA_SATURATE: return "GL_SRC_ALPHA_SATURATE"; default: return getHex(factor); } } private String getShadeModel(int model) { switch(model) { case GL_FLAT: return "GL_FLAT"; case GL_SMOOTH: return "GL_SMOOTH"; default: return getHex(model); } } private String getTextureTarget(int target) { switch (target) { case GL_TEXTURE_2D: return "GL_TEXTURE_2D"; default: return getHex(target); } } private String getTextureEnvTarget(int target) { switch (target) { case GL_TEXTURE_ENV: return "GL_TEXTURE_ENV"; default: return getHex(target); } } private String getTextureEnvPName(int pname) { switch (pname) { case GL_TEXTURE_ENV_MODE: return "GL_TEXTURE_ENV_MODE"; case GL_TEXTURE_ENV_COLOR: return "GL_TEXTURE_ENV_COLOR"; default: return getHex(pname); } } private int getTextureEnvParamCount(int pname) { switch (pname) { case GL_TEXTURE_ENV_MODE: return 1; case GL_TEXTURE_ENV_COLOR: return 4; default: return 0; } } private String getTextureEnvParamName(float param) { int iparam = (int) param; if (param == (float) iparam) { switch (iparam) { case GL_REPLACE: return "GL_REPLACE"; case GL_MODULATE: return "GL_MODULATE"; case GL_DECAL: return "GL_DECAL"; case GL_BLEND: return "GL_BLEND"; case GL_ADD: return "GL_ADD"; case GL_COMBINE: return "GL_COMBINE"; default: return getHex(iparam); } } return Float.toString(param); } private String getMatrixMode(int matrixMode) { switch (matrixMode) { case GL_MODELVIEW: return "GL_MODELVIEW"; case GL_PROJECTION: return "GL_PROJECTION"; case GL_TEXTURE: return "GL_TEXTURE"; default: return getHex(matrixMode); } } private String getClientState(int clientState) { switch (clientState) { case GL_COLOR_ARRAY: return "GL_COLOR_ARRAY"; case GL_VERTEX_ARRAY: return "GL_VERTEX_ARRAY"; case GL_NORMAL_ARRAY: return "GL_NORMAL_ARRAY"; case GL_TEXTURE_COORD_ARRAY: return "GL_TEXTURE_COORD_ARRAY"; default: return getHex(clientState); } } private String getCap(int cap) { switch (cap) { case GL_FOG: return "GL_FOG"; case GL_LIGHTING: return "GL_LIGHTING"; case GL_TEXTURE_2D: return "GL_TEXTURE_2D"; case GL_CULL_FACE: return "GL_CULL_FACE"; case GL_ALPHA_TEST: return "GL_ALPHA_TEST"; case GL_BLEND: return "GL_BLEND"; case GL_COLOR_LOGIC_OP: return "GL_COLOR_LOGIC_OP"; case GL_DITHER: return "GL_DITHER"; case GL_STENCIL_TEST: return "GL_STENCIL_TEST"; case GL_DEPTH_TEST: return "GL_DEPTH_TEST"; case GL_LIGHT0: return "GL_LIGHT0"; case GL_LIGHT1: return "GL_LIGHT1"; case GL_LIGHT2: return "GL_LIGHT2"; case GL_LIGHT3: return "GL_LIGHT3"; case GL_LIGHT4: return "GL_LIGHT4"; case GL_LIGHT5: return "GL_LIGHT5"; case GL_LIGHT6: return "GL_LIGHT6"; case GL_LIGHT7: return "GL_LIGHT7"; case GL_POINT_SMOOTH: return "GL_POINT_SMOOTH"; case GL_LINE_SMOOTH: return "GL_LINE_SMOOTH"; case GL_COLOR_MATERIAL: return "GL_COLOR_MATERIAL"; case GL_NORMALIZE: return "GL_NORMALIZE"; case GL_RESCALE_NORMAL: return "GL_RESCALE_NORMAL"; case GL_VERTEX_ARRAY: return "GL_VERTEX_ARRAY"; case GL_NORMAL_ARRAY: return "GL_NORMAL_ARRAY"; case GL_COLOR_ARRAY: return "GL_COLOR_ARRAY"; case GL_TEXTURE_COORD_ARRAY: return "GL_TEXTURE_COORD_ARRAY"; case GL_MULTISAMPLE: return "GL_MULTISAMPLE"; case GL_SAMPLE_ALPHA_TO_COVERAGE: return "GL_SAMPLE_ALPHA_TO_COVERAGE"; case GL_SAMPLE_ALPHA_TO_ONE: return "GL_SAMPLE_ALPHA_TO_ONE"; case GL_SAMPLE_COVERAGE: return "GL_SAMPLE_COVERAGE"; case GL_SCISSOR_TEST: return "GL_SCISSOR_TEST"; default: return getHex(cap); } } private String getTexturePName(int pname) { switch (pname) { case GL_TEXTURE_MAG_FILTER: return "GL_TEXTURE_MAG_FILTER"; case GL_TEXTURE_MIN_FILTER: return "GL_TEXTURE_MIN_FILTER"; case GL_TEXTURE_WRAP_S: return "GL_TEXTURE_WRAP_S"; case GL_TEXTURE_WRAP_T: return "GL_TEXTURE_WRAP_T"; case GL_GENERATE_MIPMAP: return "GL_GENERATE_MIPMAP"; case GL_TEXTURE_CROP_RECT_OES: return "GL_TEXTURE_CROP_RECT_OES"; default: return getHex(pname); } } private String getTextureParamName(float param) { int iparam = (int) param; if (param == (float) iparam) { switch (iparam) { case GL_CLAMP_TO_EDGE: return "GL_CLAMP_TO_EDGE"; case GL_REPEAT: return "GL_REPEAT"; case GL_NEAREST: return "GL_NEAREST"; case GL_LINEAR: return "GL_LINEAR"; case GL_NEAREST_MIPMAP_NEAREST: return "GL_NEAREST_MIPMAP_NEAREST"; case GL_LINEAR_MIPMAP_NEAREST: return "GL_LINEAR_MIPMAP_NEAREST"; case GL_NEAREST_MIPMAP_LINEAR: return "GL_NEAREST_MIPMAP_LINEAR"; case GL_LINEAR_MIPMAP_LINEAR: return "GL_LINEAR_MIPMAP_LINEAR"; default: return getHex(iparam); } } return Float.toString(param); } private String getFogPName(int pname) { switch (pname) { case GL_FOG_DENSITY: return "GL_FOG_DENSITY"; case GL_FOG_START: return "GL_FOG_START"; case GL_FOG_END: return "GL_FOG_END"; case GL_FOG_MODE: return "GL_FOG_MODE"; case GL_FOG_COLOR: return "GL_FOG_COLOR"; default: return getHex(pname); } } private int getFogParamCount(int pname) { switch (pname) { case GL_FOG_DENSITY: return 1; case GL_FOG_START: return 1; case GL_FOG_END: return 1; case GL_FOG_MODE: return 1; case GL_FOG_COLOR: return 4; default: return 0; } } private String getBeginMode(int mode) { switch (mode) { case GL_POINTS: return "GL_POINTS"; case GL_LINES: return "GL_LINES"; case GL_LINE_LOOP: return "GL_LINE_LOOP"; case GL_LINE_STRIP: return "GL_LINE_STRIP"; case GL_TRIANGLES: return "GL_TRIANGLES"; case GL_TRIANGLE_STRIP: return "GL_TRIANGLE_STRIP"; case GL_TRIANGLE_FAN: return "GL_TRIANGLE_FAN"; default: return getHex(mode); } } private String getIndexType(int type) { switch (type) { case GL_UNSIGNED_SHORT: return "GL_UNSIGNED_SHORT"; case GL_UNSIGNED_BYTE: return "GL_UNSIGNED_BYTE"; default: return getHex(type); } } private String getIntegerStateName(int pname) { switch (pname) { case GL_ALPHA_BITS: return "GL_ALPHA_BITS"; case GL_ALIASED_LINE_WIDTH_RANGE: return "GL_ALIASED_LINE_WIDTH_RANGE"; case GL_ALIASED_POINT_SIZE_RANGE: return "GL_ALIASED_POINT_SIZE_RANGE"; case GL_BLUE_BITS: return "GL_BLUE_BITS"; case GL_COMPRESSED_TEXTURE_FORMATS: return "GL_COMPRESSED_TEXTURE_FORMATS"; case GL_DEPTH_BITS: return "GL_DEPTH_BITS"; case GL_GREEN_BITS: return "GL_GREEN_BITS"; case GL_MAX_ELEMENTS_INDICES: return "GL_MAX_ELEMENTS_INDICES"; case GL_MAX_ELEMENTS_VERTICES: return "GL_MAX_ELEMENTS_VERTICES"; case GL_MAX_LIGHTS: return "GL_MAX_LIGHTS"; case GL_MAX_TEXTURE_SIZE: return "GL_MAX_TEXTURE_SIZE"; case GL_MAX_VIEWPORT_DIMS: return "GL_MAX_VIEWPORT_DIMS"; case GL_MAX_MODELVIEW_STACK_DEPTH: return "GL_MAX_MODELVIEW_STACK_DEPTH"; case GL_MAX_PROJECTION_STACK_DEPTH: return "GL_MAX_PROJECTION_STACK_DEPTH"; case GL_MAX_TEXTURE_STACK_DEPTH: return "GL_MAX_TEXTURE_STACK_DEPTH"; case GL_MAX_TEXTURE_UNITS: return "GL_MAX_TEXTURE_UNITS"; case GL_NUM_COMPRESSED_TEXTURE_FORMATS: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS"; case GL_RED_BITS: return "GL_RED_BITS"; case GL_SMOOTH_LINE_WIDTH_RANGE: return "GL_SMOOTH_LINE_WIDTH_RANGE"; case GL_SMOOTH_POINT_SIZE_RANGE: return "GL_SMOOTH_POINT_SIZE_RANGE"; case GL_STENCIL_BITS: return "GL_STENCIL_BITS"; case GL_SUBPIXEL_BITS: return "GL_SUBPIXEL_BITS"; case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: return "GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"; case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: return "GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"; case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: return "GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"; default: return getHex(pname); } } private int getIntegerStateSize(int pname) { switch (pname) { case GL_ALPHA_BITS: return 1; case GL_ALIASED_LINE_WIDTH_RANGE: return 2; case GL_ALIASED_POINT_SIZE_RANGE: return 2; case GL_BLUE_BITS: return 1; case GL_COMPRESSED_TEXTURE_FORMATS: // Have to ask the implementation for the size { int[] buffer = new int[1]; mgl.glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, buffer, 0); return buffer[0]; } case GL_DEPTH_BITS: return 1; case GL_GREEN_BITS: return 1; case GL_MAX_ELEMENTS_INDICES: return 1; case GL_MAX_ELEMENTS_VERTICES: return 1; case GL_MAX_LIGHTS: return 1; case GL_MAX_TEXTURE_SIZE: return 1; case GL_MAX_VIEWPORT_DIMS: return 2; case GL_MAX_MODELVIEW_STACK_DEPTH: return 1; case GL_MAX_PROJECTION_STACK_DEPTH: return 1; case GL_MAX_TEXTURE_STACK_DEPTH: return 1; case GL_MAX_TEXTURE_UNITS: return 1; case GL_NUM_COMPRESSED_TEXTURE_FORMATS: return 1; case GL_RED_BITS: return 1; case GL_SMOOTH_LINE_WIDTH_RANGE: return 2; case GL_SMOOTH_POINT_SIZE_RANGE: return 2; case GL_STENCIL_BITS: return 1; case GL_SUBPIXEL_BITS: return 1; case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: return 16; default: return 0; } } private int getIntegerStateFormat(int pname) { switch (pname) { case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: return FORMAT_FLOAT; default: return FORMAT_INT; } } private String getHintTarget(int target) { switch (target) { case GL_FOG_HINT: return "GL_FOG_HINT"; case GL_LINE_SMOOTH_HINT: return "GL_LINE_SMOOTH_HINT"; case GL_PERSPECTIVE_CORRECTION_HINT: return "GL_PERSPECTIVE_CORRECTION_HINT"; case GL_POINT_SMOOTH_HINT: return "GL_POINT_SMOOTH_HINT"; case GL_POLYGON_SMOOTH_HINT: return "GL_POLYGON_SMOOTH_HINT"; case GL_GENERATE_MIPMAP_HINT: return "GL_GENERATE_MIPMAP_HINT"; default: return getHex(target); } } private String getHintMode(int mode) { switch (mode) { case GL_FASTEST: return "GL_FASTEST"; case GL_NICEST: return "GL_NICEST"; case GL_DONT_CARE: return "GL_DONT_CARE"; default: return getHex(mode); } } private String getFaceName(int face) { switch (face) { case GL_FRONT_AND_BACK: return "GL_FRONT_AND_BACK"; default: return getHex(face); } } private String getMaterialPName(int pname) { switch (pname) { case GL_AMBIENT: return "GL_AMBIENT"; case GL_DIFFUSE: return "GL_DIFFUSE"; case GL_SPECULAR: return "GL_SPECULAR"; case GL_EMISSION: return "GL_EMISSION"; case GL_SHININESS: return "GL_SHININESS"; case GL_AMBIENT_AND_DIFFUSE: return "GL_AMBIENT_AND_DIFFUSE"; default: return getHex(pname); } } private int getMaterialParamCount(int pname) { switch (pname) { case GL_AMBIENT: return 4; case GL_DIFFUSE: return 4; case GL_SPECULAR: return 4; case GL_EMISSION: return 4; case GL_SHININESS: return 1; case GL_AMBIENT_AND_DIFFUSE: return 4; default: return 0; } } private String getLightName(int light) { if (light >= GL_LIGHT0 && light <= GL_LIGHT7) { return "GL_LIGHT" + Integer.toString(light); } return getHex(light); } private String getLightPName(int pname) { switch (pname) { case GL_AMBIENT: return "GL_AMBIENT"; case GL_DIFFUSE: return "GL_DIFFUSE"; case GL_SPECULAR: return "GL_SPECULAR"; case GL_POSITION: return "GL_POSITION"; case GL_SPOT_DIRECTION: return "GL_SPOT_DIRECTION"; case GL_SPOT_EXPONENT: return "GL_SPOT_EXPONENT"; case GL_SPOT_CUTOFF: return "GL_SPOT_CUTOFF"; case GL_CONSTANT_ATTENUATION: return "GL_CONSTANT_ATTENUATION"; case GL_LINEAR_ATTENUATION: return "GL_LINEAR_ATTENUATION"; case GL_QUADRATIC_ATTENUATION: return "GL_QUADRATIC_ATTENUATION"; default: return getHex(pname); } } private int getLightParamCount(int pname) { switch (pname) { case GL_AMBIENT: return 4; case GL_DIFFUSE: return 4; case GL_SPECULAR: return 4; case GL_POSITION: return 4; case GL_SPOT_DIRECTION: return 3; case GL_SPOT_EXPONENT: return 1; case GL_SPOT_CUTOFF: return 1; case GL_CONSTANT_ATTENUATION: return 1; case GL_LINEAR_ATTENUATION: return 1; case GL_QUADRATIC_ATTENUATION: return 1; default: return 0; } } private String getLightModelPName(int pname) { switch (pname) { case GL_LIGHT_MODEL_AMBIENT: return "GL_LIGHT_MODEL_AMBIENT"; case GL_LIGHT_MODEL_TWO_SIDE: return "GL_LIGHT_MODEL_TWO_SIDE"; default: return getHex(pname); } } private int getLightModelParamCount(int pname) { switch (pname) { case GL_LIGHT_MODEL_AMBIENT: return 4; case GL_LIGHT_MODEL_TWO_SIDE: return 1; default: return 0; } } private String getPointerTypeName(int type) { switch (type) { case GL_BYTE: return "GL_BYTE"; case GL_UNSIGNED_BYTE: return "GL_UNSIGNED_BYTE"; case GL_SHORT: return "GL_SHORT"; case GL_FIXED: return "GL_FIXED"; case GL_FLOAT: return "GL_FLOAT"; default: return getHex(type); } } private ByteBuffer toByteBuffer(int byteCount, Buffer input) { ByteBuffer result = null; boolean convertWholeBuffer = (byteCount < 0); if (input instanceof ByteBuffer) { ByteBuffer input2 = (ByteBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = input2.limit() - position; } result = ByteBuffer.allocate(byteCount).order(input2.order()); for (int i = 0; i < byteCount; i++) { result.put(input2.get()); } input2.position(position); } else if (input instanceof CharBuffer) { CharBuffer input2 = (CharBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = (input2.limit() - position) * 2; } result = ByteBuffer.allocate(byteCount).order(input2.order()); CharBuffer result2 = result.asCharBuffer(); for (int i = 0; i < byteCount / 2; i++) { result2.put(input2.get()); } input2.position(position); } else if (input instanceof ShortBuffer) { ShortBuffer input2 = (ShortBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = (input2.limit() - position)* 2; } result = ByteBuffer.allocate(byteCount).order(input2.order()); ShortBuffer result2 = result.asShortBuffer(); for (int i = 0; i < byteCount / 2; i++) { result2.put(input2.get()); } input2.position(position); } else if (input instanceof IntBuffer) { IntBuffer input2 = (IntBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = (input2.limit() - position) * 4; } result = ByteBuffer.allocate(byteCount).order(input2.order()); IntBuffer result2 = result.asIntBuffer(); for (int i = 0; i < byteCount / 4; i++) { result2.put(input2.get()); } input2.position(position); } else if (input instanceof FloatBuffer) { FloatBuffer input2 = (FloatBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = (input2.limit() - position) * 4; } result = ByteBuffer.allocate(byteCount).order(input2.order()); FloatBuffer result2 = result.asFloatBuffer(); for (int i = 0; i < byteCount / 4; i++) { result2.put(input2.get()); } input2.position(position); } else if (input instanceof DoubleBuffer) { DoubleBuffer input2 = (DoubleBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = (input2.limit() - position) * 8; } result = ByteBuffer.allocate(byteCount).order(input2.order()); DoubleBuffer result2 = result.asDoubleBuffer(); for (int i = 0; i < byteCount / 8; i++) { result2.put(input2.get()); } input2.position(position); } else if (input instanceof LongBuffer) { LongBuffer input2 = (LongBuffer) input; int position = input2.position(); if (convertWholeBuffer) { byteCount = (input2.limit() - position) * 8; } result = ByteBuffer.allocate(byteCount).order(input2.order()); LongBuffer result2 = result.asLongBuffer(); for (int i = 0; i < byteCount / 8; i++) { result2.put(input2.get()); } input2.position(position); } else { throw new RuntimeException("Unimplemented Buffer subclass."); } result.rewind(); // The OpenGL API will interpret the result in hardware byte order, // so we better do that as well: result.order(ByteOrder.nativeOrder()); return result; } private char[] toCharIndices(int count, int type, Buffer indices) { char[] result = new char[count]; switch (type) { case GL_UNSIGNED_BYTE: { ByteBuffer byteBuffer = toByteBuffer(count, indices); byte[] array = byteBuffer.array(); int offset = byteBuffer.arrayOffset(); for (int i = 0; i < count; i++) { result[i] = (char) (0xff & array[offset + i]); } } break; case GL_UNSIGNED_SHORT: { CharBuffer charBuffer; if (indices instanceof CharBuffer) { charBuffer = (CharBuffer) indices; } else { ByteBuffer byteBuffer = toByteBuffer(count * 2, indices); charBuffer = byteBuffer.asCharBuffer(); } int oldPosition = charBuffer.position(); charBuffer.position(0); charBuffer.get(result); charBuffer.position(oldPosition); } break; default: // Don't throw an exception, because we don't want logging to // change the behavior. break; } return result; } private void doArrayElement(StringBuilder builder, boolean enabled, String name, PointerInfo pointer, int index) { if (!enabled) { return; } builder.append(" "); builder.append(name + ":{"); if (pointer == null || pointer.mTempByteBuffer == null ) { builder.append("undefined }"); return; } if (pointer.mStride < 0) { builder.append("invalid stride"); return; } int stride = pointer.getStride(); ByteBuffer byteBuffer = pointer.mTempByteBuffer; int size = pointer.mSize; int type = pointer.mType; int sizeofType = pointer.sizeof(type); int byteOffset = stride * index; for (int i = 0; i < size; i++) { if (i > 0) { builder.append(", "); } switch (type) { case GL_BYTE: { byte d = byteBuffer.get(byteOffset); builder.append(Integer.toString(d)); } break; case GL_UNSIGNED_BYTE: { byte d = byteBuffer.get(byteOffset); builder.append(Integer.toString(0xff & d)); } break; case GL_SHORT: { ShortBuffer shortBuffer = byteBuffer.asShortBuffer(); short d = shortBuffer.get(byteOffset / 2); builder.append(Integer.toString(d)); } break; case GL_FIXED: { IntBuffer intBuffer = byteBuffer.asIntBuffer(); int d = intBuffer.get(byteOffset / 4); builder.append(Integer.toString(d)); } break; case GL_FLOAT: { FloatBuffer intBuffer = byteBuffer.asFloatBuffer(); float d = intBuffer.get(byteOffset / 4); builder.append(Float.toString(d)); } break; default: builder.append("?"); break; } byteOffset += sizeofType; } builder.append("}"); } private void doElement(StringBuilder builder, int ordinal, int vertexIndex) { builder.append(" [" + ordinal + " : " + vertexIndex + "] ="); doArrayElement(builder, mVertexArrayEnabled, "v", mVertexPointer, vertexIndex); doArrayElement(builder, mNormalArrayEnabled, "n", mNormalPointer, vertexIndex); doArrayElement(builder, mColorArrayEnabled, "c", mColorPointer, vertexIndex); doArrayElement(builder, mTextureCoordArrayEnabled, "t", mTexCoordPointer, vertexIndex); builder.append("\n"); // Vertex // Normal // Color // TexCoord } private void bindArrays() { if (mColorArrayEnabled) mColorPointer.bindByteBuffer(); if (mNormalArrayEnabled) mNormalPointer.bindByteBuffer(); if (mTextureCoordArrayEnabled) mTexCoordPointer.bindByteBuffer(); if (mVertexArrayEnabled) mVertexPointer.bindByteBuffer(); } private void unbindArrays() { if (mColorArrayEnabled) mColorPointer.unbindByteBuffer(); if (mNormalArrayEnabled) mNormalPointer.unbindByteBuffer(); if (mTextureCoordArrayEnabled) mTexCoordPointer.unbindByteBuffer(); if (mVertexArrayEnabled) mVertexPointer.unbindByteBuffer(); } private void startLogIndices() { mStringBuilder = new StringBuilder(); mStringBuilder.append("\n"); bindArrays(); } private void endLogIndices() { log(mStringBuilder.toString()); unbindArrays(); } // --------------------------------------------------------------------- // GL10 methods: public void glActiveTexture(int texture) { begin("glActiveTexture"); arg("texture", texture); end(); mgl.glActiveTexture(texture); checkError(); } public void glAlphaFunc(int func, float ref) { begin("glAlphaFunc"); arg("func", func); arg("ref", ref); end(); mgl.glAlphaFunc(func, ref); checkError(); } public void glAlphaFuncx(int func, int ref) { begin("glAlphaFuncx"); arg("func", func); arg("ref", ref); end(); mgl.glAlphaFuncx(func, ref); checkError(); } public void glBindTexture(int target, int texture) { begin("glBindTexture"); arg("target", getTextureTarget(target)); arg("texture", texture); end(); mgl.glBindTexture(target, texture); checkError(); } public void glBlendFunc(int sfactor, int dfactor) { begin("glBlendFunc"); arg("sfactor", getFactor(sfactor)); arg("dfactor", getFactor(dfactor)); end(); mgl.glBlendFunc(sfactor, dfactor); checkError(); } public void glClear(int mask) { begin("glClear"); arg("mask", getClearBufferMask(mask)); end(); mgl.glClear(mask); checkError(); } public void glClearColor(float red, float green, float blue, float alpha) { begin("glClearColor"); arg("red", red); arg("green", green); arg("blue", blue); arg("alpha", alpha); end(); mgl.glClearColor(red, green, blue, alpha); checkError(); } public void glClearColorx(int red, int green, int blue, int alpha) { begin("glClearColor"); arg("red", red); arg("green", green); arg("blue", blue); arg("alpha", alpha); end(); mgl.glClearColorx(red, green, blue, alpha); checkError(); } public void glClearDepthf(float depth) { begin("glClearDepthf"); arg("depth", depth); end(); mgl.glClearDepthf(depth); checkError(); } public void glClearDepthx(int depth) { begin("glClearDepthx"); arg("depth", depth); end(); mgl.glClearDepthx(depth); checkError(); } public void glClearStencil(int s) { begin("glClearStencil"); arg("s", s); end(); mgl.glClearStencil(s); checkError(); } public void glClientActiveTexture(int texture) { begin("glClientActiveTexture"); arg("texture", texture); end(); mgl.glClientActiveTexture(texture); checkError(); } public void glColor4f(float red, float green, float blue, float alpha) { begin("glColor4f"); arg("red", red); arg("green", green); arg("blue", blue); arg("alpha", alpha); end(); mgl.glColor4f(red, green, blue, alpha); checkError(); } public void glColor4x(int red, int green, int blue, int alpha) { begin("glColor4x"); arg("red", red); arg("green", green); arg("blue", blue); arg("alpha", alpha); end(); mgl.glColor4x(red, green, blue, alpha); checkError(); } public void glColorMask(boolean red, boolean green, boolean blue, boolean alpha) { begin("glColorMask"); arg("red", red); arg("green", green); arg("blue", blue); arg("alpha", alpha); end(); mgl.glColorMask(red, green, blue, alpha); checkError(); } public void glColorPointer(int size, int type, int stride, Buffer pointer) { begin("glColorPointer"); argPointer(size, type, stride, pointer); end(); mColorPointer = new PointerInfo(size, type, stride, pointer); 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) { begin("glCompressedTexImage2D"); arg("target", getTextureTarget(target)); arg("level", level); arg("internalformat", internalformat); arg("width", width); arg("height", height); arg("border", border); arg("imageSize", imageSize); arg("data", data.toString()); end(); 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) { begin("glCompressedTexSubImage2D"); arg("target", getTextureTarget(target)); arg("level", level); arg("xoffset", xoffset); arg("yoffset", yoffset); arg("width", width); arg("height", height); arg("format", format); arg("imageSize", imageSize); arg("data", data.toString()); end(); 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) { begin("glCopyTexImage2D"); arg("target", getTextureTarget(target)); arg("level", level); arg("internalformat", internalformat); arg("x", x); arg("y", y); arg("width", width); arg("height", height); arg("border", border); end(); 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) { begin("glCopyTexSubImage2D"); arg("target", getTextureTarget(target)); arg("level", level); arg("xoffset", xoffset); arg("yoffset", yoffset); arg("x", x); arg("y", y); arg("width", width); arg("height", height); end(); mgl.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); checkError(); } public void glCullFace(int mode) { begin("glCullFace"); arg("mode", mode); end(); mgl.glCullFace(mode); checkError(); } public void glDeleteTextures(int n, int[] textures, int offset) { begin("glDeleteTextures"); arg("n", n); arg("textures", n, textures, offset); arg("offset", offset); end(); mgl.glDeleteTextures(n, textures, offset); checkError(); } public void glDeleteTextures(int n, IntBuffer textures) { begin("glDeleteTextures"); arg("n", n); arg("textures", n, textures); end(); mgl.glDeleteTextures(n, textures); checkError(); } public void glDepthFunc(int func) { begin("glDepthFunc"); arg("func", func); end(); mgl.glDepthFunc(func); checkError(); } public void glDepthMask(boolean flag) { begin("glDepthMask"); arg("flag", flag); end(); mgl.glDepthMask(flag); checkError(); } public void glDepthRangef(float near, float far) { begin("glDepthRangef"); arg("near", near); arg("far", far); end(); mgl.glDepthRangef(near, far); checkError(); } public void glDepthRangex(int near, int far) { begin("glDepthRangex"); arg("near", near); arg("far", far); end(); mgl.glDepthRangex(near, far); checkError(); } public void glDisable(int cap) { begin("glDisable"); arg("cap", getCap(cap)); end(); mgl.glDisable(cap); checkError(); } public void glDisableClientState(int array) { begin("glDisableClientState"); arg("array", getClientState(array)); end(); switch (array) { case GL_COLOR_ARRAY: mColorArrayEnabled = false; break; case GL_NORMAL_ARRAY: mNormalArrayEnabled = false; break; case GL_TEXTURE_COORD_ARRAY: mTextureCoordArrayEnabled = false; break; case GL_VERTEX_ARRAY: mVertexArrayEnabled = false; break; } mgl.glDisableClientState(array); checkError(); } public void glDrawArrays(int mode, int first, int count) { begin("glDrawArrays"); arg("mode", mode); arg("first", first); arg("count", count); startLogIndices(); for (int i = 0; i < count; i++) { doElement(mStringBuilder, i, first + i); } endLogIndices(); end(); mgl.glDrawArrays(mode, first, count); checkError(); } public void glDrawElements(int mode, int count, int type, Buffer indices) { begin("glDrawElements"); arg("mode", getBeginMode(mode)); arg("count", count); arg("type", getIndexType(type)); char[] indexArray = toCharIndices(count, type, indices); int indexArrayLength = indexArray.length; startLogIndices(); for (int i = 0; i < indexArrayLength; i++) { doElement(mStringBuilder, i, indexArray[i]); } endLogIndices(); end(); mgl.glDrawElements(mode, count, type, indices); checkError(); } public void glEnable(int cap) { begin("glEnable"); arg("cap", getCap(cap)); end(); mgl.glEnable(cap); checkError(); } public void glEnableClientState(int array) { begin("glEnableClientState"); arg("array", getClientState(array)); end(); switch (array) { case GL_COLOR_ARRAY: mColorArrayEnabled = true; break; case GL_NORMAL_ARRAY: mNormalArrayEnabled = true; break; case GL_TEXTURE_COORD_ARRAY: mTextureCoordArrayEnabled = true; break; case GL_VERTEX_ARRAY: mVertexArrayEnabled = true; break; } mgl.glEnableClientState(array); checkError(); } public void glFinish() { begin("glFinish"); end(); mgl.glFinish(); checkError(); } public void glFlush() { begin("glFlush"); end(); mgl.glFlush(); checkError(); } public void glFogf(int pname, float param) { begin("glFogf"); arg("pname", pname); arg("param", param); end(); mgl.glFogf(pname, param); checkError(); } public void glFogfv(int pname, float[] params, int offset) { begin("glFogfv"); arg("pname", getFogPName(pname)); arg("params", getFogParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glFogfv(pname, params, offset); checkError(); } public void glFogfv(int pname, FloatBuffer params) { begin("glFogfv"); arg("pname", getFogPName(pname)); arg("params", getFogParamCount(pname), params); end(); mgl.glFogfv(pname, params); checkError(); } public void glFogx(int pname, int param) { begin("glFogx"); arg("pname", getFogPName(pname)); arg("param", param); end(); mgl.glFogx(pname, param); checkError(); } public void glFogxv(int pname, int[] params, int offset) { begin("glFogxv"); arg("pname", getFogPName(pname)); arg("params", getFogParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glFogxv(pname, params, offset); checkError(); } public void glFogxv(int pname, IntBuffer params) { begin("glFogxv"); arg("pname", getFogPName(pname)); arg("params", getFogParamCount(pname), params); end(); mgl.glFogxv(pname, params); checkError(); } public void glFrontFace(int mode) { begin("glFrontFace"); arg("mode", mode); end(); mgl.glFrontFace(mode); checkError(); } public void glFrustumf(float left, float right, float bottom, float top, float near, float far) { begin("glFrustumf"); arg("left", left); arg("right", right); arg("bottom", bottom); arg("top", top); arg("near", near); arg("far", far); end(); mgl.glFrustumf(left, right, bottom, top, near, far); checkError(); } public void glFrustumx(int left, int right, int bottom, int top, int near, int far) { begin("glFrustumx"); arg("left", left); arg("right", right); arg("bottom", bottom); arg("top", top); arg("near", near); arg("far", far); end(); mgl.glFrustumx(left, right, bottom, top, near, far); checkError(); } public void glGenTextures(int n, int[] textures, int offset) { begin("glGenTextures"); arg("n", n); arg("textures", Arrays.toString(textures)); arg("offset", offset); mgl.glGenTextures(n, textures, offset); returns(toString(n, FORMAT_INT, textures, offset)); checkError(); } public void glGenTextures(int n, IntBuffer textures) { begin("glGenTextures"); arg("n", n); arg("textures", textures.toString()); mgl.glGenTextures(n, textures); returns(toString(n, FORMAT_INT, textures)); checkError(); } public int glGetError() { begin("glGetError"); int result = mgl.glGetError(); returns(result); return result; } public void glGetIntegerv(int pname, int[] params, int offset) { begin("glGetIntegerv"); arg("pname", getIntegerStateName(pname)); arg("params", Arrays.toString(params)); arg("offset", offset); mgl.glGetIntegerv(pname, params, offset); returns(toString(getIntegerStateSize(pname), getIntegerStateFormat(pname), params, offset)); checkError(); } public void glGetIntegerv(int pname, IntBuffer params) { begin("glGetIntegerv"); arg("pname", getIntegerStateName(pname)); arg("params", params.toString()); mgl.glGetIntegerv(pname, params); returns(toString(getIntegerStateSize(pname), getIntegerStateFormat(pname), params)); checkError(); } public String glGetString(int name) { begin("glGetString"); arg("name", name); String result = mgl.glGetString(name); returns(result); checkError(); return result; } public void glHint(int target, int mode) { begin("glHint"); arg("target", getHintTarget(target)); arg("mode", getHintMode(mode)); end(); mgl.glHint(target, mode); checkError(); } public void glLightModelf(int pname, float param) { begin("glLightModelf"); arg("pname", getLightModelPName(pname)); arg("param", param); end(); mgl.glLightModelf(pname, param); checkError(); } public void glLightModelfv(int pname, float[] params, int offset) { begin("glLightModelfv"); arg("pname", getLightModelPName(pname)); arg("params", getLightModelParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glLightModelfv(pname, params, offset); checkError(); } public void glLightModelfv(int pname, FloatBuffer params) { begin("glLightModelfv"); arg("pname", getLightModelPName(pname)); arg("params", getLightModelParamCount(pname), params); end(); mgl.glLightModelfv(pname, params); checkError(); } public void glLightModelx(int pname, int param) { begin("glLightModelx"); arg("pname", getLightModelPName(pname)); arg("param", param); end(); mgl.glLightModelx(pname, param); checkError(); } public void glLightModelxv(int pname, int[] params, int offset) { begin("glLightModelxv"); arg("pname", getLightModelPName(pname)); arg("params", getLightModelParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glLightModelxv(pname, params, offset); checkError(); } public void glLightModelxv(int pname, IntBuffer params) { begin("glLightModelfv"); arg("pname", getLightModelPName(pname)); arg("params", getLightModelParamCount(pname), params); end(); mgl.glLightModelxv(pname, params); checkError(); } public void glLightf(int light, int pname, float param) { begin("glLightf"); arg("light", getLightName(light)); arg("pname", getLightPName(pname)); arg("param", param); end(); mgl.glLightf(light, pname, param); checkError(); } public void glLightfv(int light, int pname, float[] params, int offset) { begin("glLightfv"); arg("light", getLightName(light)); arg("pname", getLightPName(pname)); arg("params", getLightParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glLightfv(light, pname, params, offset); checkError(); } public void glLightfv(int light, int pname, FloatBuffer params) { begin("glLightfv"); arg("light", getLightName(light)); arg("pname", getLightPName(pname)); arg("params", getLightParamCount(pname), params); end(); mgl.glLightfv(light, pname, params); checkError(); } public void glLightx(int light, int pname, int param) { begin("glLightx"); arg("light", getLightName(light)); arg("pname", getLightPName(pname)); arg("param", param); end(); mgl.glLightx(light, pname, param); checkError(); } public void glLightxv(int light, int pname, int[] params, int offset) { begin("glLightxv"); arg("light", getLightName(light)); arg("pname", getLightPName(pname)); arg("params", getLightParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glLightxv(light, pname, params, offset); checkError(); } public void glLightxv(int light, int pname, IntBuffer params) { begin("glLightxv"); arg("light", getLightName(light)); arg("pname", getLightPName(pname)); arg("params", getLightParamCount(pname), params); end(); mgl.glLightxv(light, pname, params); checkError(); } public void glLineWidth(float width) { begin("glLineWidth"); arg("width", width); end(); mgl.glLineWidth(width); checkError(); } public void glLineWidthx(int width) { begin("glLineWidthx"); arg("width", width); end(); mgl.glLineWidthx(width); checkError(); } public void glLoadIdentity() { begin("glLoadIdentity"); end(); mgl.glLoadIdentity(); checkError(); } public void glLoadMatrixf(float[] m, int offset) { begin("glLoadMatrixf"); arg("m", 16, m, offset); arg("offset", offset); end(); mgl.glLoadMatrixf(m, offset); checkError(); } public void glLoadMatrixf(FloatBuffer m) { begin("glLoadMatrixf"); arg("m", 16, m); end(); mgl.glLoadMatrixf(m); checkError(); } public void glLoadMatrixx(int[] m, int offset) { begin("glLoadMatrixx"); arg("m", 16, m, offset); arg("offset", offset); end(); mgl.glLoadMatrixx(m, offset); checkError(); } public void glLoadMatrixx(IntBuffer m) { begin("glLoadMatrixx"); arg("m", 16, m); end(); mgl.glLoadMatrixx(m); checkError(); } public void glLogicOp(int opcode) { begin("glLogicOp"); arg("opcode", opcode); end(); mgl.glLogicOp(opcode); checkError(); } public void glMaterialf(int face, int pname, float param) { begin("glMaterialf"); arg("face", getFaceName(face)); arg("pname", getMaterialPName(pname)); arg("param", param); end(); mgl.glMaterialf(face, pname, param); checkError(); } public void glMaterialfv(int face, int pname, float[] params, int offset) { begin("glMaterialfv"); arg("face", getFaceName(face)); arg("pname", getMaterialPName(pname)); arg("params", getMaterialParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glMaterialfv(face, pname, params, offset); checkError(); } public void glMaterialfv(int face, int pname, FloatBuffer params) { begin("glMaterialfv"); arg("face", getFaceName(face)); arg("pname", getMaterialPName(pname)); arg("params", getMaterialParamCount(pname), params); end(); mgl.glMaterialfv(face, pname, params); checkError(); } public void glMaterialx(int face, int pname, int param) { begin("glMaterialx"); arg("face", getFaceName(face)); arg("pname", getMaterialPName(pname)); arg("param", param); end(); mgl.glMaterialx(face, pname, param); checkError(); } public void glMaterialxv(int face, int pname, int[] params, int offset) { begin("glMaterialxv"); arg("face", getFaceName(face)); arg("pname", getMaterialPName(pname)); arg("params", getMaterialParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glMaterialxv(face, pname, params, offset); checkError(); } public void glMaterialxv(int face, int pname, IntBuffer params) { begin("glMaterialxv"); arg("face", getFaceName(face)); arg("pname", getMaterialPName(pname)); arg("params", getMaterialParamCount(pname), params); end(); mgl.glMaterialxv(face, pname, params); checkError(); } public void glMatrixMode(int mode) { begin("glMatrixMode"); arg("mode", getMatrixMode(mode)); end(); mgl.glMatrixMode(mode); checkError(); } public void glMultMatrixf(float[] m, int offset) { begin("glMultMatrixf"); arg("m", 16, m, offset); arg("offset", offset); end(); mgl.glMultMatrixf(m, offset); checkError(); } public void glMultMatrixf(FloatBuffer m) { begin("glMultMatrixf"); arg("m", 16, m); end(); mgl.glMultMatrixf(m); checkError(); } public void glMultMatrixx(int[] m, int offset) { begin("glMultMatrixx"); arg("m", 16, m, offset); arg("offset", offset); end(); mgl.glMultMatrixx(m, offset); checkError(); } public void glMultMatrixx(IntBuffer m) { begin("glMultMatrixx"); arg("m", 16, m); end(); mgl.glMultMatrixx(m); checkError(); } public void glMultiTexCoord4f(int target, float s, float t, float r, float q) { begin("glMultiTexCoord4f"); arg("target", target); arg("s", s); arg("t", t); arg("r", r); arg("q", q); end(); mgl.glMultiTexCoord4f(target, s, t, r, q); checkError(); } public void glMultiTexCoord4x(int target, int s, int t, int r, int q) { begin("glMultiTexCoord4x"); arg("target", target); arg("s", s); arg("t", t); arg("r", r); arg("q", q); end(); mgl.glMultiTexCoord4x(target, s, t, r, q); checkError(); } public void glNormal3f(float nx, float ny, float nz) { begin("glNormal3f"); arg("nx", nx); arg("ny", ny); arg("nz", nz); end(); mgl.glNormal3f(nx, ny, nz); checkError(); } public void glNormal3x(int nx, int ny, int nz) { begin("glNormal3x"); arg("nx", nx); arg("ny", ny); arg("nz", nz); end(); mgl.glNormal3x(nx, ny, nz); checkError(); } public void glNormalPointer(int type, int stride, Buffer pointer) { begin("glNormalPointer"); arg("type", type); arg("stride", stride); arg("pointer", pointer.toString()); end(); mNormalPointer = new PointerInfo(3, type, stride, pointer); mgl.glNormalPointer(type, stride, pointer); checkError(); } public void glOrthof(float left, float right, float bottom, float top, float near, float far) { begin("glOrthof"); arg("left", left); arg("right", right); arg("bottom", bottom); arg("top", top); arg("near", near); arg("far", far); end(); mgl.glOrthof(left, right, bottom, top, near, far); checkError(); } public void glOrthox(int left, int right, int bottom, int top, int near, int far) { begin("glOrthox"); arg("left", left); arg("right", right); arg("bottom", bottom); arg("top", top); arg("near", near); arg("far", far); end(); mgl.glOrthox(left, right, bottom, top, near, far); checkError(); } public void glPixelStorei(int pname, int param) { begin("glPixelStorei"); arg("pname", pname); arg("param", param); end(); mgl.glPixelStorei(pname, param); checkError(); } public void glPointSize(float size) { begin("glPointSize"); arg("size", size); end(); mgl.glPointSize(size); checkError(); } public void glPointSizex(int size) { begin("glPointSizex"); arg("size", size); end(); mgl.glPointSizex(size); checkError(); } public void glPolygonOffset(float factor, float units) { begin("glPolygonOffset"); arg("factor", factor); arg("units", units); end(); mgl.glPolygonOffset(factor, units); checkError(); } public void glPolygonOffsetx(int factor, int units) { begin("glPolygonOffsetx"); arg("factor", factor); arg("units", units); end(); mgl.glPolygonOffsetx(factor, units); checkError(); } public void glPopMatrix() { begin("glPopMatrix"); end(); mgl.glPopMatrix(); checkError(); } public void glPushMatrix() { begin("glPushMatrix"); end(); mgl.glPushMatrix(); checkError(); } public void glReadPixels(int x, int y, int width, int height, int format, int type, Buffer pixels) { begin("glReadPixels"); arg("x", x); arg("y", y); arg("width", width); arg("height", height); arg("format", format); arg("type", type); arg("pixels", pixels.toString()); end(); mgl.glReadPixels(x, y, width, height, format, type, pixels); checkError(); } public void glRotatef(float angle, float x, float y, float z) { begin("glRotatef"); arg("angle", angle); arg("x", x); arg("y", y); arg("z", z); end(); mgl.glRotatef(angle, x, y, z); checkError(); } public void glRotatex(int angle, int x, int y, int z) { begin("glRotatex"); arg("angle", angle); arg("x", x); arg("y", y); arg("z", z); end(); mgl.glRotatex(angle, x, y, z); checkError(); } public void glSampleCoverage(float value, boolean invert) { begin("glSampleCoveragex"); arg("value", value); arg("invert", invert); end(); mgl.glSampleCoverage(value, invert); checkError(); } public void glSampleCoveragex(int value, boolean invert) { begin("glSampleCoveragex"); arg("value", value); arg("invert", invert); end(); mgl.glSampleCoveragex(value, invert); checkError(); } public void glScalef(float x, float y, float z) { begin("glScalef"); arg("x", x); arg("y", y); arg("z", z); end(); mgl.glScalef(x, y, z); checkError(); } public void glScalex(int x, int y, int z) { begin("glScalex"); arg("x", x); arg("y", y); arg("z", z); end(); mgl.glScalex(x, y, z); checkError(); } public void glScissor(int x, int y, int width, int height) { begin("glScissor"); arg("x", x); arg("y", y); arg("width", width); arg("height", height); end(); mgl.glScissor(x, y, width, height); checkError(); } public void glShadeModel(int mode) { begin("glShadeModel"); arg("mode", getShadeModel(mode)); end(); mgl.glShadeModel(mode); checkError(); } public void glStencilFunc(int func, int ref, int mask) { begin("glStencilFunc"); arg("func", func); arg("ref", ref); arg("mask", mask); end(); mgl.glStencilFunc(func, ref, mask); checkError(); } public void glStencilMask(int mask) { begin("glStencilMask"); arg("mask", mask); end(); mgl.glStencilMask(mask); checkError(); } public void glStencilOp(int fail, int zfail, int zpass) { begin("glStencilOp"); arg("fail", fail); arg("zfail", zfail); arg("zpass", zpass); end(); mgl.glStencilOp(fail, zfail, zpass); checkError(); } public void glTexCoordPointer(int size, int type, int stride, Buffer pointer) { begin("glTexCoordPointer"); argPointer(size, type, stride, pointer); end(); mTexCoordPointer = new PointerInfo(size, type, stride, pointer); mgl.glTexCoordPointer(size, type, stride, pointer); checkError(); } public void glTexEnvf(int target, int pname, float param) { begin("glTexEnvf"); arg("target", getTextureEnvTarget(target)); arg("pname", getTextureEnvPName(pname)); arg("param", getTextureEnvParamName(param)); end(); mgl.glTexEnvf(target, pname, param); checkError(); } public void glTexEnvfv(int target, int pname, float[] params, int offset) { begin("glTexEnvfv"); arg("target", getTextureEnvTarget(target)); arg("pname", getTextureEnvPName(pname)); arg("params", getTextureEnvParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glTexEnvfv(target, pname, params, offset); checkError(); } public void glTexEnvfv(int target, int pname, FloatBuffer params) { begin("glTexEnvfv"); arg("target", getTextureEnvTarget(target)); arg("pname", getTextureEnvPName(pname)); arg("params", getTextureEnvParamCount(pname), params); end(); mgl.glTexEnvfv(target, pname, params); checkError(); } public void glTexEnvx(int target, int pname, int param) { begin("glTexEnvx"); arg("target", getTextureEnvTarget(target)); arg("pname", getTextureEnvPName(pname)); arg("param", param); end(); mgl.glTexEnvx(target, pname, param); checkError(); } public void glTexEnvxv(int target, int pname, int[] params, int offset) { begin("glTexEnvxv"); arg("target", getTextureEnvTarget(target)); arg("pname", getTextureEnvPName(pname)); arg("params", getTextureEnvParamCount(pname), params, offset); arg("offset", offset); end(); mgl.glTexEnvxv(target, pname, params, offset); checkError(); } public void glTexEnvxv(int target, int pname, IntBuffer params) { begin("glTexEnvxv"); arg("target", getTextureEnvTarget(target)); arg("pname", getTextureEnvPName(pname)); arg("params", getTextureEnvParamCount(pname), params); end(); 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) { begin("glTexImage2D"); arg("target", target); arg("level", level); arg("internalformat", internalformat); arg("width", width); arg("height", height); arg("border", border); arg("format", format); arg("type", type); arg("pixels", pixels.toString()); end(); mgl.glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); checkError(); } public void glTexParameterf(int target, int pname, float param) { begin("glTexParameterf"); arg("target", getTextureTarget(target)); arg("pname", getTexturePName(pname)); arg("param", getTextureParamName(param)); end(); mgl.glTexParameterf(target, pname, param); checkError(); } public void glTexParameterx(int target, int pname, int param) { begin("glTexParameterx"); arg("target", getTextureTarget(target)); arg("pname", getTexturePName(pname)); arg("param", param); end(); mgl.glTexParameterx(target, pname, param); checkError(); } public void glTexParameteriv(int target, int pname, int[] params, int offset) { begin("glTexParameteriv"); arg("target", getTextureTarget(target)); arg("pname", getTexturePName(pname)); arg("params", 4, params, offset); end(); mgl11.glTexParameteriv(target, pname, params, offset); checkError(); } public void glTexParameteriv(int target, int pname, IntBuffer params) { begin("glTexParameteriv"); arg("target", getTextureTarget(target)); arg("pname", getTexturePName(pname)); arg("params", 4, params); end(); 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) { begin("glTexSubImage2D"); arg("target", getTextureTarget(target)); arg("level", level); arg("xoffset", xoffset); arg("yoffset", yoffset); arg("width", width); arg("height", height); arg("format", format); arg("type", type); arg("pixels", pixels.toString()); end(); mgl.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); checkError(); } public void glTranslatef(float x, float y, float z) { begin("glTranslatef"); arg("x", x); arg("y", y); arg("z", z); end(); mgl.glTranslatef(x, y, z); checkError(); } public void glTranslatex(int x, int y, int z) { begin("glTranslatex"); arg("x", x); arg("y", y); arg("z", z); end(); mgl.glTranslatex(x, y, z); checkError(); } public void glVertexPointer(int size, int type, int stride, Buffer pointer) { begin("glVertexPointer"); argPointer(size, type, stride, pointer); end(); mVertexPointer = new PointerInfo(size, type, stride, pointer); mgl.glVertexPointer(size, type, stride, pointer); checkError(); } public void glViewport(int x, int y, int width, int height) { begin("glViewport"); arg("x", x); arg("y", y); arg("width", width); arg("height", height); end(); mgl.glViewport(x, y, width, height); checkError(); } public void glClipPlanef(int plane, float[] equation, int offset) { begin("glClipPlanef"); arg("plane", plane); arg("equation", 4, equation, offset); arg("offset", offset); end(); mgl11.glClipPlanef(plane, equation, offset); checkError(); } public void glClipPlanef(int plane, FloatBuffer equation) { begin("glClipPlanef"); arg("plane", plane); arg("equation", 4, equation); end(); mgl11.glClipPlanef(plane, equation); checkError(); } public void glClipPlanex(int plane, int[] equation, int offset) { begin("glClipPlanex"); arg("plane", plane); arg("equation", 4, equation, offset); arg("offset", offset); end(); mgl11.glClipPlanex(plane, equation, offset); checkError(); } public void glClipPlanex(int plane, IntBuffer equation) { begin("glClipPlanef"); arg("plane", plane); arg("equation", 4, equation); end(); mgl11.glClipPlanex(plane, equation); checkError(); } // Draw Texture Extension public void glDrawTexfOES(float x, float y, float z, float width, float height) { begin("glDrawTexfOES"); arg("x", x); arg("y", y); arg("z", z); arg("width", width); arg("height", height); end(); mgl11Ext.glDrawTexfOES(x, y, z, width, height); checkError(); } public void glDrawTexfvOES(float[] coords, int offset) { begin("glDrawTexfvOES"); arg("coords", 5, coords, offset); arg("offset", offset); end(); mgl11Ext.glDrawTexfvOES(coords, offset); checkError(); } public void glDrawTexfvOES(FloatBuffer coords) { begin("glDrawTexfvOES"); arg("coords", 5, coords); end(); mgl11Ext.glDrawTexfvOES(coords); checkError(); } public void glDrawTexiOES(int x, int y, int z, int width, int height) { begin("glDrawTexiOES"); arg("x", x); arg("y", y); arg("z", z); arg("width", width); arg("height", height); end(); mgl11Ext.glDrawTexiOES(x, y, z, width, height); checkError(); } public void glDrawTexivOES(int[] coords, int offset) { begin("glDrawTexivOES"); arg("coords", 5, coords, offset); arg("offset", offset); end(); mgl11Ext.glDrawTexivOES(coords, offset); checkError(); } public void glDrawTexivOES(IntBuffer coords) { begin("glDrawTexivOES"); arg("coords", 5, coords); end(); mgl11Ext.glDrawTexivOES(coords); checkError(); } public void glDrawTexsOES(short x, short y, short z, short width, short height) { begin("glDrawTexsOES"); arg("x", x); arg("y", y); arg("z", z); arg("width", width); arg("height", height); end(); mgl11Ext.glDrawTexsOES(x, y, z, width, height); checkError(); } public void glDrawTexsvOES(short[] coords, int offset) { begin("glDrawTexsvOES"); arg("coords", 5, coords, offset); arg("offset", offset); end(); mgl11Ext.glDrawTexsvOES(coords, offset); checkError(); } public void glDrawTexsvOES(ShortBuffer coords) { begin("glDrawTexsvOES"); arg("coords", 5, coords); end(); mgl11Ext.glDrawTexsvOES(coords); checkError(); } public void glDrawTexxOES(int x, int y, int z, int width, int height) { begin("glDrawTexxOES"); arg("x", x); arg("y", y); arg("z", z); arg("width", width); arg("height", height); end(); mgl11Ext.glDrawTexxOES(x, y, z, width, height); checkError(); } public void glDrawTexxvOES(int[] coords, int offset) { begin("glDrawTexxvOES"); arg("coords", 5, coords, offset); arg("offset", offset); end(); mgl11Ext.glDrawTexxvOES(coords, offset); checkError(); } public void glDrawTexxvOES(IntBuffer coords) { begin("glDrawTexxvOES"); arg("coords", 5, coords); end(); mgl11Ext.glDrawTexxvOES(coords); checkError(); } public int glQueryMatrixxOES(int[] mantissa, int mantissaOffset, int[] exponent, int exponentOffset) { begin("glQueryMatrixxOES"); arg("mantissa", Arrays.toString(mantissa)); arg("exponent", Arrays.toString(exponent)); end(); int valid = mgl10Ext.glQueryMatrixxOES(mantissa, mantissaOffset, exponent, exponentOffset); returns(toString(16, FORMAT_FIXED, mantissa, mantissaOffset)); returns(toString(16, FORMAT_INT, exponent, exponentOffset)); checkError(); return valid; } public int glQueryMatrixxOES(IntBuffer mantissa, IntBuffer exponent) { begin("glQueryMatrixxOES"); arg("mantissa", mantissa.toString()); arg("exponent", exponent.toString()); end(); int valid = mgl10Ext.glQueryMatrixxOES(mantissa, exponent); returns(toString(16, FORMAT_FIXED, mantissa)); returns(toString(16, FORMAT_INT, exponent)); checkError(); return valid; } public void glBindBuffer(int target, int buffer) { begin("glBindBuffer"); arg("target", target); arg("buffer", buffer); end(); mgl11.glBindBuffer(target, buffer); checkError(); } public void glBufferData(int target, int size, Buffer data, int usage) { begin("glBufferData"); arg("target", target); arg("size", size); arg("data", data.toString()); arg("usage", usage); end(); mgl11.glBufferData(target, size, data, usage); checkError(); } public void glBufferSubData(int target, int offset, int size, Buffer data) { begin("glBufferSubData"); arg("target", target); arg("offset", offset); arg("size", size); arg("data", data.toString()); end(); mgl11.glBufferSubData(target, offset, size, data); checkError(); } public void glColor4ub(byte red, byte green, byte blue, byte alpha) { begin("glColor4ub"); arg("red", red); arg("green", green); arg("blue", blue); arg("alpha", alpha); end(); mgl11.glColor4ub(red, green, blue, alpha); checkError(); } public void glDeleteBuffers(int n, int[] buffers, int offset) { begin("glDeleteBuffers"); arg("n", n); arg("buffers", buffers.toString()); arg("offset", offset); end(); mgl11.glDeleteBuffers(n, buffers, offset); checkError(); } public void glDeleteBuffers(int n, IntBuffer buffers) { begin("glDeleteBuffers"); arg("n", n); arg("buffers", buffers.toString()); end(); mgl11.glDeleteBuffers(n, buffers); checkError(); } public void glGenBuffers(int n, int[] buffers, int offset) { begin("glGenBuffers"); arg("n", n); arg("buffers", buffers.toString()); arg("offset", offset); end(); mgl11.glGenBuffers(n, buffers, offset); checkError(); } public void glGenBuffers(int n, IntBuffer buffers) { begin("glGenBuffers"); arg("n", n); arg("buffers", buffers.toString()); end(); mgl11.glGenBuffers(n, buffers); checkError(); } public void glGetBooleanv(int pname, boolean[] params, int offset) { begin("glGetBooleanv"); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetBooleanv(pname, params, offset); checkError(); } public void glGetBooleanv(int pname, IntBuffer params) { begin("glGetBooleanv"); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetBooleanv(pname, params); checkError(); } public void glGetBufferParameteriv(int target, int pname, int[] params, int offset) { begin("glGetBufferParameteriv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetBufferParameteriv(target, pname, params, offset); checkError(); } public void glGetBufferParameteriv(int target, int pname, IntBuffer params) { begin("glGetBufferParameteriv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetBufferParameteriv(target, pname, params); checkError(); } public void glGetClipPlanef(int pname, float[] eqn, int offset) { begin("glGetClipPlanef"); arg("pname", pname); arg("eqn", eqn.toString()); arg("offset", offset); end(); mgl11.glGetClipPlanef(pname, eqn, offset); checkError(); } public void glGetClipPlanef(int pname, FloatBuffer eqn) { begin("glGetClipPlanef"); arg("pname", pname); arg("eqn", eqn.toString()); end(); mgl11.glGetClipPlanef(pname, eqn); checkError(); } public void glGetClipPlanex(int pname, int[] eqn, int offset) { begin("glGetClipPlanex"); arg("pname", pname); arg("eqn", eqn.toString()); arg("offset", offset); end(); mgl11.glGetClipPlanex(pname, eqn, offset); } public void glGetClipPlanex(int pname, IntBuffer eqn) { begin("glGetClipPlanex"); arg("pname", pname); arg("eqn", eqn.toString()); end(); mgl11.glGetClipPlanex(pname, eqn); checkError(); } public void glGetFixedv(int pname, int[] params, int offset) { begin("glGetFixedv"); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetFixedv(pname, params, offset); } public void glGetFixedv(int pname, IntBuffer params) { begin("glGetFixedv"); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetFixedv(pname, params); checkError(); } public void glGetFloatv(int pname, float[] params, int offset) { begin("glGetFloatv"); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetFloatv(pname, params, offset); } public void glGetFloatv(int pname, FloatBuffer params) { begin("glGetFloatv"); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetFloatv(pname, params); checkError(); } public void glGetLightfv(int light, int pname, float[] params, int offset) { begin("glGetLightfv"); arg("light", light); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetLightfv(light, pname, params, offset); checkError(); } public void glGetLightfv(int light, int pname, FloatBuffer params) { begin("glGetLightfv"); arg("light", light); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetLightfv(light, pname, params); checkError(); } public void glGetLightxv(int light, int pname, int[] params, int offset) { begin("glGetLightxv"); arg("light", light); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetLightxv(light, pname, params, offset); checkError(); } public void glGetLightxv(int light, int pname, IntBuffer params) { begin("glGetLightxv"); arg("light", light); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetLightxv(light, pname, params); checkError(); } public void glGetMaterialfv(int face, int pname, float[] params, int offset) { begin("glGetMaterialfv"); arg("face", face); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetMaterialfv(face, pname, params, offset); checkError(); } public void glGetMaterialfv(int face, int pname, FloatBuffer params) { begin("glGetMaterialfv"); arg("face", face); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetMaterialfv(face, pname, params); checkError(); } public void glGetMaterialxv(int face, int pname, int[] params, int offset) { begin("glGetMaterialxv"); arg("face", face); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetMaterialxv(face, pname, params, offset); checkError(); } public void glGetMaterialxv(int face, int pname, IntBuffer params) { begin("glGetMaterialxv"); arg("face", face); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetMaterialxv(face, pname, params); checkError(); } public void glGetTexEnviv(int env, int pname, int[] params, int offset) { begin("glGetTexEnviv"); arg("env", env); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetTexEnviv(env, pname, params, offset); checkError(); } public void glGetTexEnviv(int env, int pname, IntBuffer params) { begin("glGetTexEnviv"); arg("env", env); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetTexEnviv(env, pname, params); checkError(); } public void glGetTexEnvxv(int env, int pname, int[] params, int offset) { begin("glGetTexEnviv"); arg("env", env); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetTexEnviv(env, pname, params, offset); checkError(); } public void glGetTexEnvxv(int env, int pname, IntBuffer params) { begin("glGetTexEnviv"); arg("env", env); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetTexEnvxv(env, pname, params); checkError(); } public void glGetTexParameterfv(int target, int pname, float[] params, int offset) { begin("glGetTexParameterfv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetTexParameterfv(target, pname, params, offset); checkError(); } public void glGetTexParameterfv(int target, int pname, FloatBuffer params) { begin("glGetTexParameterfv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetTexParameterfv(target, pname, params); checkError(); } public void glGetTexParameteriv(int target, int pname, int[] params, int offset) { begin("glGetTexParameteriv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetTexEnviv(target, pname, params, offset); checkError(); } public void glGetTexParameteriv(int target, int pname, IntBuffer params) { begin("glGetTexParameteriv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetTexParameteriv(target, pname, params); checkError(); } public void glGetTexParameterxv(int target, int pname, int[] params, int offset) { begin("glGetTexParameterxv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glGetTexParameterxv(target, pname, params, offset); checkError(); } public void glGetTexParameterxv(int target, int pname, IntBuffer params) { begin("glGetTexParameterxv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetTexParameterxv(target, pname, params); checkError(); } public boolean glIsBuffer(int buffer) { begin("glIsBuffer"); arg("buffer", buffer); end(); boolean result = mgl11.glIsBuffer(buffer); checkError(); return result; } public boolean glIsEnabled(int cap) { begin("glIsEnabled"); arg("cap", cap); end(); boolean result = mgl11.glIsEnabled(cap); checkError(); return result; } public boolean glIsTexture(int texture) { begin("glIsTexture"); arg("texture", texture); end(); boolean result = mgl11.glIsTexture(texture); checkError(); return result; } public void glPointParameterf(int pname, float param) { begin("glPointParameterf"); arg("pname", pname); arg("param", param); end(); mgl11.glPointParameterf( pname, param); checkError(); } public void glPointParameterfv(int pname, float[] params, int offset) { begin("glPointParameterfv"); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glPointParameterfv(pname, params, offset); checkError(); } public void glPointParameterfv(int pname, FloatBuffer params) { begin("glPointParameterfv"); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glPointParameterfv(pname, params); checkError(); } public void glPointParameterx(int pname, int param) { begin("glPointParameterfv"); arg("pname", pname); arg("param", param); end(); mgl11.glPointParameterx( pname, param); checkError(); } public void glPointParameterxv(int pname, int[] params, int offset) { begin("glPointParameterxv"); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glPointParameterxv(pname, params, offset); checkError(); } public void glPointParameterxv(int pname, IntBuffer params) { begin("glPointParameterxv"); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glPointParameterxv( pname, params); checkError(); } public void glPointSizePointerOES(int type, int stride, Buffer pointer) { begin("glPointSizePointerOES"); arg("type", type); arg("stride", stride); arg("params", pointer.toString()); end(); mgl11.glPointSizePointerOES( type, stride, pointer); checkError(); } public void glTexEnvi(int target, int pname, int param) { begin("glTexEnvi"); arg("target", target); arg("pname", pname); arg("param", param); end(); mgl11.glTexEnvi(target, pname, param); checkError(); } public void glTexEnviv(int target, int pname, int[] params, int offset) { begin("glTexEnviv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glTexEnviv(target, pname, params, offset); checkError(); } public void glTexEnviv(int target, int pname, IntBuffer params) { begin("glTexEnviv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glTexEnviv( target, pname, params); checkError(); } public void glTexParameterfv(int target, int pname, float[] params, int offset) { begin("glTexParameterfv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glTexParameterfv( target, pname, params, offset); checkError(); } public void glTexParameterfv(int target, int pname, FloatBuffer params) { begin("glTexParameterfv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glTexParameterfv(target, pname, params); checkError(); } public void glTexParameteri(int target, int pname, int param) { begin("glTexParameterxv"); arg("target", target); arg("pname", pname); arg("param", param); end(); mgl11.glTexParameteri(target, pname, param); checkError(); } public void glTexParameterxv(int target, int pname, int[] params, int offset) { begin("glTexParameterxv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11.glTexParameterxv(target, pname, params, offset); checkError(); } public void glTexParameterxv(int target, int pname, IntBuffer params) { begin("glTexParameterxv"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glTexParameterxv(target, pname, params); checkError(); } public void glColorPointer(int size, int type, int stride, int offset) { begin("glColorPointer"); arg("size", size); arg("type", type); arg("stride", stride); arg("offset", offset); end(); mgl11.glColorPointer(size, type, stride, offset); checkError(); } public void glDrawElements(int mode, int count, int type, int offset) { begin("glDrawElements"); arg("mode", mode); arg("count", count); arg("type", type); arg("offset", offset); end(); mgl11.glDrawElements(mode, count, type, offset); checkError(); } public void glGetPointerv(int pname, Buffer[] params) { begin("glGetPointerv"); arg("pname", pname); arg("params", params.toString()); end(); mgl11.glGetPointerv(pname, params); checkError(); } public void glNormalPointer(int type, int stride, int offset) { begin("glNormalPointer"); arg("type", type); arg("stride", stride); arg("offset", offset); end(); mgl11.glNormalPointer(type, stride, offset); } public void glTexCoordPointer(int size, int type, int stride, int offset) { begin("glTexCoordPointer"); arg("size", size); arg("type", type); arg("stride", stride); arg("offset", offset); end(); mgl11.glTexCoordPointer(size, type, stride, offset); } public void glVertexPointer(int size, int type, int stride, int offset) { begin("glVertexPointer"); arg("size", size); arg("type", type); arg("stride", stride); arg("offset", offset); end(); mgl11.glVertexPointer(size, type, stride, offset); } public void glCurrentPaletteMatrixOES(int matrixpaletteindex) { begin("glCurrentPaletteMatrixOES"); arg("matrixpaletteindex", matrixpaletteindex); end(); mgl11Ext.glCurrentPaletteMatrixOES(matrixpaletteindex); checkError(); } public void glLoadPaletteFromModelViewMatrixOES() { begin("glLoadPaletteFromModelViewMatrixOES"); end(); mgl11Ext.glLoadPaletteFromModelViewMatrixOES(); checkError(); } public void glMatrixIndexPointerOES(int size, int type, int stride, Buffer pointer) { begin("glMatrixIndexPointerOES"); argPointer(size, type, stride, pointer); end(); mgl11Ext.glMatrixIndexPointerOES(size, type, stride, pointer); checkError(); } public void glMatrixIndexPointerOES(int size, int type, int stride, int offset) { begin("glMatrixIndexPointerOES"); arg("size", size); arg("type", type); arg("stride", stride); arg("offset", offset); end(); mgl11Ext.glMatrixIndexPointerOES(size, type, stride, offset); checkError(); } public void glWeightPointerOES(int size, int type, int stride, Buffer pointer) { begin("glWeightPointerOES"); argPointer(size, type, stride, pointer); end(); mgl11Ext.glWeightPointerOES(size, type, stride, pointer); checkError(); } public void glWeightPointerOES(int size, int type, int stride, int offset) { begin("glWeightPointerOES"); arg("size", size); arg("type", type); arg("stride", stride); arg("offset", offset); end(); mgl11Ext.glWeightPointerOES(size, type, stride, offset); checkError(); } @Override public void glBindFramebufferOES(int target, int framebuffer) { begin("glBindFramebufferOES"); arg("target", target); arg("framebuffer", framebuffer); end(); mgl11ExtensionPack.glBindFramebufferOES(target, framebuffer); checkError(); } @Override public void glBindRenderbufferOES(int target, int renderbuffer) { begin("glBindRenderbufferOES"); arg("target", target); arg("renderbuffer", renderbuffer); end(); mgl11ExtensionPack.glBindRenderbufferOES(target, renderbuffer); checkError(); } @Override public void glBlendEquation(int mode) { begin("glBlendEquation"); arg("mode", mode); end(); mgl11ExtensionPack.glBlendEquation(mode); checkError(); } @Override public void glBlendEquationSeparate(int modeRGB, int modeAlpha) { begin("glBlendEquationSeparate"); arg("modeRGB", modeRGB); arg("modeAlpha", modeAlpha); end(); mgl11ExtensionPack.glBlendEquationSeparate(modeRGB, modeAlpha); checkError(); } @Override public void glBlendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) { begin("glBlendFuncSeparate"); arg("srcRGB", srcRGB); arg("dstRGB", dstRGB); arg("srcAlpha", srcAlpha); arg("dstAlpha", dstAlpha); end(); mgl11ExtensionPack.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); checkError(); } @Override public int glCheckFramebufferStatusOES(int target) { begin("glCheckFramebufferStatusOES"); arg("target", target); end(); int result = mgl11ExtensionPack.glCheckFramebufferStatusOES(target); checkError(); return result; } @Override public void glDeleteFramebuffersOES(int n, int[] framebuffers, int offset) { begin("glDeleteFramebuffersOES"); arg("n", n); arg("framebuffers", framebuffers.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glDeleteFramebuffersOES(n, framebuffers, offset); checkError(); } @Override public void glDeleteFramebuffersOES(int n, IntBuffer framebuffers) { begin("glDeleteFramebuffersOES"); arg("n", n); arg("framebuffers", framebuffers.toString()); end(); mgl11ExtensionPack.glDeleteFramebuffersOES(n, framebuffers); checkError(); } @Override public void glDeleteRenderbuffersOES(int n, int[] renderbuffers, int offset) { begin("glDeleteRenderbuffersOES"); arg("n", n); arg("renderbuffers", renderbuffers.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glDeleteRenderbuffersOES(n, renderbuffers, offset); checkError(); } @Override public void glDeleteRenderbuffersOES(int n, IntBuffer renderbuffers) { begin("glDeleteRenderbuffersOES"); arg("n", n); arg("renderbuffers", renderbuffers.toString()); end(); mgl11ExtensionPack.glDeleteRenderbuffersOES(n, renderbuffers); checkError(); } @Override public void glFramebufferRenderbufferOES(int target, int attachment, int renderbuffertarget, int renderbuffer) { begin("glFramebufferRenderbufferOES"); arg("target", target); arg("attachment", attachment); arg("renderbuffertarget", renderbuffertarget); arg("renderbuffer", renderbuffer); end(); mgl11ExtensionPack.glFramebufferRenderbufferOES(target, attachment, renderbuffertarget, renderbuffer); checkError(); } @Override public void glFramebufferTexture2DOES(int target, int attachment, int textarget, int texture, int level) { begin("glFramebufferTexture2DOES"); arg("target", target); arg("attachment", attachment); arg("textarget", textarget); arg("texture", texture); arg("level", level); end(); mgl11ExtensionPack.glFramebufferTexture2DOES(target, attachment, textarget, texture, level); checkError(); } @Override public void glGenerateMipmapOES(int target) { begin("glGenerateMipmapOES"); arg("target", target); end(); mgl11ExtensionPack.glGenerateMipmapOES(target); checkError(); } @Override public void glGenFramebuffersOES(int n, int[] framebuffers, int offset) { begin("glGenFramebuffersOES"); arg("n", n); arg("framebuffers", framebuffers.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGenFramebuffersOES(n, framebuffers, offset); checkError(); } @Override public void glGenFramebuffersOES(int n, IntBuffer framebuffers) { begin("glGenFramebuffersOES"); arg("n", n); arg("framebuffers", framebuffers.toString()); end(); mgl11ExtensionPack.glGenFramebuffersOES(n, framebuffers); checkError(); } @Override public void glGenRenderbuffersOES(int n, int[] renderbuffers, int offset) { begin("glGenRenderbuffersOES"); arg("n", n); arg("renderbuffers", renderbuffers.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGenRenderbuffersOES(n, renderbuffers, offset); checkError(); } @Override public void glGenRenderbuffersOES(int n, IntBuffer renderbuffers) { begin("glGenRenderbuffersOES"); arg("n", n); arg("renderbuffers", renderbuffers.toString()); end(); mgl11ExtensionPack.glGenRenderbuffersOES(n, renderbuffers); checkError(); } @Override public void glGetFramebufferAttachmentParameterivOES(int target, int attachment, int pname, int[] params, int offset) { begin("glGetFramebufferAttachmentParameterivOES"); arg("target", target); arg("attachment", attachment); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params, offset); checkError(); } @Override public void glGetFramebufferAttachmentParameterivOES(int target, int attachment, int pname, IntBuffer params) { begin("glGetFramebufferAttachmentParameterivOES"); arg("target", target); arg("attachment", attachment); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params); checkError(); } @Override public void glGetRenderbufferParameterivOES(int target, int pname, int[] params, int offset) { begin("glGetRenderbufferParameterivOES"); arg("target", target); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGetRenderbufferParameterivOES(target, pname, params, offset); checkError(); } @Override public void glGetRenderbufferParameterivOES(int target, int pname, IntBuffer params) { begin("glGetRenderbufferParameterivOES"); arg("target", target); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glGetRenderbufferParameterivOES(target, pname, params); checkError(); } @Override public void glGetTexGenfv(int coord, int pname, float[] params, int offset) { begin("glGetTexGenfv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGetTexGenfv(coord, pname, params, offset); checkError(); } @Override public void glGetTexGenfv(int coord, int pname, FloatBuffer params) { begin("glGetTexGenfv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glGetTexGenfv(coord, pname, params); checkError(); } @Override public void glGetTexGeniv(int coord, int pname, int[] params, int offset) { begin("glGetTexGeniv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGetTexGeniv(coord, pname, params, offset); checkError(); } @Override public void glGetTexGeniv(int coord, int pname, IntBuffer params) { begin("glGetTexGeniv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glGetTexGeniv(coord, pname, params); checkError(); } @Override public void glGetTexGenxv(int coord, int pname, int[] params, int offset) { begin("glGetTexGenxv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glGetTexGenxv(coord, pname, params, offset); checkError(); } @Override public void glGetTexGenxv(int coord, int pname, IntBuffer params) { begin("glGetTexGenxv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glGetTexGenxv(coord, pname, params); checkError(); } @Override public boolean glIsFramebufferOES(int framebuffer) { begin("glIsFramebufferOES"); arg("framebuffer", framebuffer); end(); boolean result = mgl11ExtensionPack.glIsFramebufferOES(framebuffer); checkError(); return result; } @Override public boolean glIsRenderbufferOES(int renderbuffer) { begin("glIsRenderbufferOES"); arg("renderbuffer", renderbuffer); end(); mgl11ExtensionPack.glIsRenderbufferOES(renderbuffer); checkError(); return false; } @Override public void glRenderbufferStorageOES(int target, int internalformat, int width, int height) { begin("glRenderbufferStorageOES"); arg("target", target); arg("internalformat", internalformat); arg("width", width); arg("height", height); end(); mgl11ExtensionPack.glRenderbufferStorageOES(target, internalformat, width, height); checkError(); } @Override public void glTexGenf(int coord, int pname, float param) { begin("glTexGenf"); arg("coord", coord); arg("pname", pname); arg("param", param); end(); mgl11ExtensionPack.glTexGenf(coord, pname, param); checkError(); } @Override public void glTexGenfv(int coord, int pname, float[] params, int offset) { begin("glTexGenfv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glTexGenfv(coord, pname, params, offset); checkError(); } @Override public void glTexGenfv(int coord, int pname, FloatBuffer params) { begin("glTexGenfv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glTexGenfv(coord, pname, params); checkError(); } @Override public void glTexGeni(int coord, int pname, int param) { begin("glTexGeni"); arg("coord", coord); arg("pname", pname); arg("param", param); end(); mgl11ExtensionPack.glTexGeni(coord, pname, param); checkError(); } @Override public void glTexGeniv(int coord, int pname, int[] params, int offset) { begin("glTexGeniv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glTexGeniv(coord, pname, params, offset); checkError(); } @Override public void glTexGeniv(int coord, int pname, IntBuffer params) { begin("glTexGeniv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glTexGeniv(coord, pname, params); checkError(); } @Override public void glTexGenx(int coord, int pname, int param) { begin("glTexGenx"); arg("coord", coord); arg("pname", pname); arg("param", param); end(); mgl11ExtensionPack.glTexGenx(coord, pname, param); checkError(); } @Override public void glTexGenxv(int coord, int pname, int[] params, int offset) { begin("glTexGenxv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); arg("offset", offset); end(); mgl11ExtensionPack.glTexGenxv(coord, pname, params, offset); checkError(); } @Override public void glTexGenxv(int coord, int pname, IntBuffer params) { begin("glTexGenxv"); arg("coord", coord); arg("pname", pname); arg("params", params.toString()); end(); mgl11ExtensionPack.glTexGenxv(coord, pname, params); checkError(); } private class PointerInfo { /** * The number of coordinates per vertex. 1..4 */ public int mSize; /** * The type of each coordinate. */ public int mType; /** * The byte offset between consecutive vertices. 0 means mSize * * sizeof(mType) */ public int mStride; public Buffer mPointer; public ByteBuffer mTempByteBuffer; // Only valid during glDrawXXX calls public PointerInfo() { } public PointerInfo(int size, int type, int stride, Buffer pointer) { mSize = size; mType = type; mStride = stride; mPointer = pointer; } public int sizeof(int type) { switch (type) { case GL_UNSIGNED_BYTE: return 1; case GL_BYTE: return 1; case GL_SHORT: return 2; case GL_FIXED: return 4; case GL_FLOAT: return 4; default: return 0; } } public int getStride() { return mStride > 0 ? mStride : sizeof(mType) * mSize; } public void bindByteBuffer() { mTempByteBuffer = mPointer == null ? null : toByteBuffer(-1, mPointer); } public void unbindByteBuffer() { mTempByteBuffer = null; } } private Writer mLog; private boolean mLogArgumentNames; private int mArgCount; private PointerInfo mColorPointer = new PointerInfo(); private PointerInfo mNormalPointer = new PointerInfo(); private PointerInfo mTexCoordPointer = new PointerInfo(); private PointerInfo mVertexPointer = new PointerInfo(); boolean mColorArrayEnabled; boolean mNormalArrayEnabled; boolean mTextureCoordArrayEnabled; boolean mVertexArrayEnabled; StringBuilder mStringBuilder; }