summaryrefslogtreecommitdiffstats
path: root/opengl/java
diff options
context:
space:
mode:
Diffstat (limited to 'opengl/java')
-rw-r--r--opengl/java/android/opengl/EGLLogWrapper.java16
-rw-r--r--opengl/java/android/opengl/ETC1.java137
-rw-r--r--opengl/java/android/opengl/ETC1Util.java228
-rw-r--r--opengl/java/android/opengl/GLES11.java24
-rw-r--r--opengl/java/android/opengl/GLES11Ext.java58
-rw-r--r--opengl/java/android/opengl/GLES20.java1857
-rw-r--r--opengl/java/android/opengl/GLErrorWrapper.java420
-rw-r--r--opengl/java/android/opengl/GLLogWrapper.java625
-rw-r--r--opengl/java/android/opengl/GLSurfaceView.java485
-rw-r--r--opengl/java/android/opengl/GLU.java52
-rw-r--r--opengl/java/android/opengl/GLWrapperBase.java484
-rw-r--r--opengl/java/android/opengl/Matrix.java75
-rw-r--r--opengl/java/com/google/android/gles_jni/EGLImpl.java61
-rw-r--r--opengl/java/com/google/android/gles_jni/GLImpl.java98
14 files changed, 3896 insertions, 724 deletions
diff --git a/opengl/java/android/opengl/EGLLogWrapper.java b/opengl/java/android/opengl/EGLLogWrapper.java
index 521fc8c..6c0fdb3 100644
--- a/opengl/java/android/opengl/EGLLogWrapper.java
+++ b/opengl/java/android/opengl/EGLLogWrapper.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2008 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;
diff --git a/opengl/java/android/opengl/ETC1.java b/opengl/java/android/opengl/ETC1.java
new file mode 100644
index 0000000..f3dac77
--- /dev/null
+++ b/opengl/java/android/opengl/ETC1.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.opengl;
+
+import java.nio.Buffer;
+
+/**
+ * Methods for encoding and decoding ETC1 textures.
+ * <p>
+ * The standard for the ETC1 texture format can be found at
+ * http://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt
+ * <p>
+ * The PKM file format is of a 16-byte header that describes the image bounds
+ * followed by the encoded ETC1 texture data.
+ * <p>
+ * @see ETC1Util
+ */
+public class ETC1 {
+
+ /**
+ * Size in bytes of an encoded block.
+ */
+ public static final int ENCODED_BLOCK_SIZE = 8;
+
+ /**
+ * Size in bytes of a decoded block.
+ */
+ public static final int DECODED_BLOCK_SIZE = 48;
+
+ /**
+ * Size of a PKM file header, in bytes.
+ */
+ public static final int ETC_PKM_HEADER_SIZE = 16;
+
+ /**
+ * Accepted by the internalformat parameter of glCompressedTexImage2D.
+ */
+ public static final int ETC1_RGB8_OES = 0x8D64;
+
+ /**
+ * Encode a block of pixels.
+ *
+ * @param in a native order direct buffer of size DECODED_BLOCK_SIZE that represent a
+ * 4 x 4 square of 3-byte pixels in form R, G, B. Byte (3 * (x + 4 * y) is the R
+ * value of pixel (x, y).
+ *
+ * @param validPixelMask is a 16-bit mask where bit (1 << (x + y * 4)) indicates whether
+ * the corresponding (x,y) pixel is valid. Invalid pixel color values are ignored when compressing.
+ *
+ * @param out a native order direct buffer of size ENCODED_BLOCK_SIZE that receives the
+ * ETC1 compressed version of the data.
+ *
+ */
+ public static native void encodeBlock(Buffer in, int validPixelMask, Buffer out);
+
+ /**
+ * Decode a block of pixels.
+ *
+ * @param in a native order direct buffer of size ENCODED_BLOCK_SIZE that contains the
+ * ETC1 compressed version of the data.
+ *
+ * @param out a native order direct buffer of size DECODED_BLOCK_SIZE that will receive
+ * the decoded data. The data represents a
+ * 4 x 4 square of 3-byte pixels in form R, G, B. Byte (3 * (x + 4 * y) is the R
+ * value of pixel (x, y).
+ */
+ public static native void decodeBlock(Buffer in, Buffer out);
+
+ /**
+ * Return the size of the encoded image data (does not include size of PKM header).
+ */
+ public static native int getEncodedDataSize(int width, int height);
+
+ /**
+ * Encode an entire image.
+ * @param in a native order direct buffer of the image data. Formatted such that
+ * pixel (x,y) is at pIn + pixelSize * x + stride * y;
+ * @param out a native order direct buffer of the encoded data.
+ * Must be large enough to store entire encoded image.
+ * @param pixelSize must be 2 or 3. 2 is an GL_UNSIGNED_SHORT_5_6_5 image,
+ * 3 is a GL_BYTE RGB image.
+ */
+ public static native void encodeImage(Buffer in, int width, int height,
+ int pixelSize, int stride, Buffer out);
+
+ /**
+ * Decode an entire image.
+ * @param in native order direct buffer of the encoded data.
+ * @param out native order direct buffer of the image data. Will be written such that
+ * pixel (x,y) is at pIn + pixelSize * x + stride * y. Must be
+ * large enough to store entire image.
+ * @param pixelSize must be 2 or 3. 2 is an GL_UNSIGNED_SHORT_5_6_5 image,
+ * 3 is a GL_BYTE RGB image.
+ */
+ public static native void decodeImage(Buffer in, Buffer out,
+ int width, int height, int pixelSize, int stride);
+
+ /**
+ * Format a PKM header
+ * @param header native order direct buffer of the header.
+ * @param width the width of the image in pixels.
+ * @param height the height of the image in pixels.
+ */
+ public static native void formatHeader(Buffer header, int width, int height);
+
+ /**
+ * Check if a PKM header is correctly formatted.
+ * @param header native order direct buffer of the header.
+ */
+ public static native boolean isValid(Buffer header);
+
+ /**
+ * Read the image width from a PKM header
+ * @param header native order direct buffer of the header.
+ */
+ public static native int getWidth(Buffer header);
+
+ /**
+ * Read the image height from a PKM header
+ * @param header native order direct buffer of the header.
+ */
+ public static native int getHeight(Buffer header);
+}
diff --git a/opengl/java/android/opengl/ETC1Util.java b/opengl/java/android/opengl/ETC1Util.java
new file mode 100644
index 0000000..dd28d1d
--- /dev/null
+++ b/opengl/java/android/opengl/ETC1Util.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * 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.InputStream;
+import java.io.OutputStream;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+/**
+ * Utility methods for using ETC1 compressed textures.
+ *
+ */
+public class ETC1Util {
+ /**
+ * Convenience method to load an ETC1 texture whether or not the active OpenGL context
+ * supports the ETC1 texture compression format.
+ * @param target the texture target.
+ * @param level the texture level
+ * @param border the border size. Typically 0.
+ * @param fallbackFormat the format to use if ETC1 texture compression is not supported.
+ * Must be GL_RGB.
+ * @param fallbackType the type to use if ETC1 texture compression is not supported.
+ * Can be either GL_UNSIGNED_SHORT_5_6_5, which implies 16-bits-per-pixel,
+ * or GL_UNSIGNED_BYTE, which implies 24-bits-per-pixel.
+ * @param input the input stream containing an ETC1 texture in PKM format.
+ * @throws IOException
+ */
+ public static void loadTexture(int target, int level, int border,
+ int fallbackFormat, int fallbackType, InputStream input)
+ throws IOException {
+ loadTexture(target, level, border, fallbackFormat, fallbackType, createTexture(input));
+ }
+
+ /**
+ * Convenience method to load an ETC1 texture whether or not the active OpenGL context
+ * supports the ETC1 texture compression format.
+ * @param target the texture target.
+ * @param level the texture level
+ * @param border the border size. Typically 0.
+ * @param fallbackFormat the format to use if ETC1 texture compression is not supported.
+ * Must be GL_RGB.
+ * @param fallbackType the type to use if ETC1 texture compression is not supported.
+ * Can be either GL_UNSIGNED_SHORT_5_6_5, which implies 16-bits-per-pixel,
+ * or GL_UNSIGNED_BYTE, which implies 24-bits-per-pixel.
+ * @param texture the ETC1 to load.
+ */
+ public static void loadTexture(int target, int level, int border,
+ int fallbackFormat, int fallbackType, ETC1Texture texture) {
+ if (fallbackFormat != GLES10.GL_RGB) {
+ throw new IllegalArgumentException("fallbackFormat must be GL_RGB");
+ }
+ if (! (fallbackType == GLES10.GL_UNSIGNED_SHORT_5_6_5
+ || fallbackType == GLES10.GL_UNSIGNED_BYTE)) {
+ throw new IllegalArgumentException("Unsupported fallbackType");
+ }
+
+ int width = texture.getWidth();
+ int height = texture.getHeight();
+ Buffer data = texture.getData();
+ if (isETC1Supported()) {
+ int imageSize = data.remaining();
+ GLES10.glCompressedTexImage2D(target, level, ETC1.ETC1_RGB8_OES, width, height,
+ border, imageSize, data);
+ } else {
+ boolean useShorts = fallbackType != GLES10.GL_UNSIGNED_BYTE;
+ int pixelSize = useShorts ? 2 : 3;
+ int stride = pixelSize * width;
+ ByteBuffer decodedData = ByteBuffer.allocateDirect(stride*height)
+ .order(ByteOrder.nativeOrder());
+ ETC1.decodeImage(data, decodedData, width, height, pixelSize, stride);
+ GLES10.glTexImage2D(target, level, fallbackFormat, width, height, border,
+ fallbackFormat, fallbackType, decodedData);
+ }
+ }
+
+ /**
+ * Check if ETC1 texture compression is supported by the active OpenGL ES context.
+ * @return true if the active OpenGL ES context supports ETC1 texture compression.
+ */
+ public static boolean isETC1Supported() {
+ int[] results = new int[20];
+ GLES10.glGetIntegerv(GLES10.GL_NUM_COMPRESSED_TEXTURE_FORMATS, results, 0);
+ int numFormats = results[0];
+ if (numFormats > results.length) {
+ results = new int[numFormats];
+ }
+ GLES10.glGetIntegerv(GLES10.GL_COMPRESSED_TEXTURE_FORMATS, results, 0);
+ for (int i = 0; i < numFormats; i++) {
+ if (results[i] == ETC1.ETC1_RGB8_OES) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * A utility class encapsulating a compressed ETC1 texture.
+ */
+ public static class ETC1Texture {
+ public ETC1Texture(int width, int height, ByteBuffer data) {
+ mWidth = width;
+ mHeight = height;
+ mData = data;
+ }
+
+ /**
+ * Get the width of the texture in pixels.
+ * @return the width of the texture in pixels.
+ */
+ public int getWidth() { return mWidth; }
+
+ /**
+ * Get the height of the texture in pixels.
+ * @return the width of the texture in pixels.
+ */
+ public int getHeight() { return mHeight; }
+
+ /**
+ * Get the compressed data of the texture.
+ * @return the texture data.
+ */
+ public ByteBuffer getData() { return mData; }
+
+ private int mWidth;
+ private int mHeight;
+ private ByteBuffer mData;
+ }
+
+ /**
+ * Create a new ETC1Texture from an input stream containing a PKM formatted compressed texture.
+ * @param input an input stream containing a PKM formatted compressed texture.
+ * @return an ETC1Texture read from the input stream.
+ * @throws IOException
+ */
+ public static ETC1Texture createTexture(InputStream input) throws IOException {
+ int width = 0;
+ int height = 0;
+ byte[] ioBuffer = new byte[4096];
+ {
+ if (input.read(ioBuffer, 0, ETC1.ETC_PKM_HEADER_SIZE) != ETC1.ETC_PKM_HEADER_SIZE) {
+ throw new IOException("Unable to read PKM file header.");
+ }
+ ByteBuffer headerBuffer = ByteBuffer.allocateDirect(ETC1.ETC_PKM_HEADER_SIZE)
+ .order(ByteOrder.nativeOrder());
+ headerBuffer.put(ioBuffer, 0, ETC1.ETC_PKM_HEADER_SIZE).position(0);
+ if (!ETC1.isValid(headerBuffer)) {
+ throw new IOException("Not a PKM file.");
+ }
+ width = ETC1.getWidth(headerBuffer);
+ height = ETC1.getHeight(headerBuffer);
+ }
+ int encodedSize = ETC1.getEncodedDataSize(width, height);
+ ByteBuffer dataBuffer = ByteBuffer.allocateDirect(encodedSize).order(ByteOrder.nativeOrder());
+ for (int i = 0; i < encodedSize; ) {
+ int chunkSize = Math.min(ioBuffer.length, encodedSize - i);
+ if (input.read(ioBuffer, 0, chunkSize) != chunkSize) {
+ throw new IOException("Unable to read PKM file data.");
+ }
+ dataBuffer.put(ioBuffer, 0, chunkSize);
+ i += chunkSize;
+ }
+ dataBuffer.position(0);
+ return new ETC1Texture(width, height, dataBuffer);
+ }
+
+ /**
+ * Helper function that compresses an image into an ETC1Texture.
+ * @param input a native order direct buffer containing the image data
+ * @param width the width of the image in pixels
+ * @param height the height of the image in pixels
+ * @param pixelSize the size of a pixel in bytes (2 or 3)
+ * @param stride the width of a line of the image in bytes
+ * @return the ETC1 texture.
+ */
+ public static ETC1Texture compressTexture(Buffer input, int width, int height, int pixelSize, int stride){
+ int encodedImageSize = ETC1.getEncodedDataSize(width, height);
+ ByteBuffer compressedImage = ByteBuffer.allocateDirect(encodedImageSize).
+ order(ByteOrder.nativeOrder());
+ ETC1.encodeImage(input, width, height, 3, stride, compressedImage);
+ return new ETC1Texture(width, height, compressedImage);
+ }
+
+ /**
+ * Helper function that writes an ETC1Texture to an output stream formatted as a PKM file.
+ * @param texture the input texture.
+ * @param output the stream to write the formatted texture data to.
+ * @throws IOException
+ */
+ public static void writeTexture(ETC1Texture texture, OutputStream output) throws IOException {
+ ByteBuffer dataBuffer = texture.getData();
+ int originalPosition = dataBuffer.position();
+ try {
+ int width = texture.getWidth();
+ int height = texture.getHeight();
+ ByteBuffer header = ByteBuffer.allocateDirect(ETC1.ETC_PKM_HEADER_SIZE).order(ByteOrder.nativeOrder());
+ ETC1.formatHeader(header, width, height);
+ byte[] ioBuffer = new byte[4096];
+ header.get(ioBuffer, 0, ETC1.ETC_PKM_HEADER_SIZE);
+ output.write(ioBuffer, 0, ETC1.ETC_PKM_HEADER_SIZE);
+ int encodedSize = ETC1.getEncodedDataSize(width, height);
+ for (int i = 0; i < encodedSize; ) {
+ int chunkSize = Math.min(ioBuffer.length, encodedSize - i);
+ dataBuffer.get(ioBuffer, 0, chunkSize);
+ output.write(ioBuffer, 0, chunkSize);
+ i += chunkSize;
+ }
+ } finally {
+ dataBuffer.position(originalPosition);
+ }
+ }
+}
diff --git a/opengl/java/android/opengl/GLES11.java b/opengl/java/android/opengl/GLES11.java
index 3399af7..1ca179b 100644
--- a/opengl/java/android/opengl/GLES11.java
+++ b/opengl/java/android/opengl/GLES11.java
@@ -150,6 +150,7 @@ public class GLES11 extends GLES10 {
_nativeClassInit();
}
+ private static Buffer _pointSizePointerOES;
// C function void glBindBuffer ( GLenum target, GLuint buffer )
public static native void glBindBuffer(
@@ -596,12 +597,31 @@ public class GLES11 extends GLES10 {
// C function void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer )
- public static native void glPointSizePointerOES(
+ private static native void glPointSizePointerOESBounds(
int type,
int stride,
- java.nio.Buffer pointer
+ java.nio.Buffer pointer,
+ int remaining
);
+ public static void glPointSizePointerOES(
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glPointSizePointerOESBounds(
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ if (((type == GL_FLOAT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _pointSizePointerOES = pointer;
+ }
+ }
+
// C function void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
public static native void glTexCoordPointer(
diff --git a/opengl/java/android/opengl/GLES11Ext.java b/opengl/java/android/opengl/GLES11Ext.java
index 4384e9e..25d5467 100644
--- a/opengl/java/android/opengl/GLES11Ext.java
+++ b/opengl/java/android/opengl/GLES11Ext.java
@@ -19,6 +19,8 @@
package android.opengl;
+import java.nio.Buffer;
+
public class GLES11Ext {
public static final int GL_BLEND_EQUATION_RGB_OES = 0x8009;
public static final int GL_BLEND_EQUATION_ALPHA_OES = 0x883D;
@@ -129,6 +131,12 @@ public class GLES11Ext {
_nativeClassInit();
}
+ private static final int GL_BYTE = GLES10.GL_BYTE;
+ private static final int GL_FIXED = GLES10.GL_FIXED;
+ private static final int GL_FLOAT = GLES10.GL_FLOAT;
+ private static final int GL_SHORT = GLES10.GL_SHORT;
+
+ private static Buffer _matrixIndexPointerOES;
// C function void glBlendEquationSeparateOES ( GLenum modeRGB, GLenum modeAlpha )
public static native void glBlendEquationSeparateOES(
@@ -866,22 +874,64 @@ public class GLES11Ext {
// C function void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
- public static native void glMatrixIndexPointerOES(
+ private static native void glMatrixIndexPointerOESBounds(
int size,
int type,
int stride,
- java.nio.Buffer pointer
+ java.nio.Buffer pointer,
+ int remaining
);
+ public static void glMatrixIndexPointerOES(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glMatrixIndexPointerOESBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ if (((size == 2) ||
+ (size == 3) ||
+ (size == 4)) &&
+ ((type == GL_FLOAT) ||
+ (type == GL_BYTE) ||
+ (type == GL_SHORT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _matrixIndexPointerOES = pointer;
+ }
+ }
+
// C function void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
- public static native void glWeightPointerOES(
+ private static native void glWeightPointerOESBounds(
int size,
int type,
int stride,
- java.nio.Buffer pointer
+ java.nio.Buffer pointer,
+ int remaining
);
+ public static void glWeightPointerOES(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glWeightPointerOESBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
// C function void glDepthRangefOES ( GLclampf zNear, GLclampf zFar )
public static native void glDepthRangefOES(
diff --git a/opengl/java/android/opengl/GLES20.java b/opengl/java/android/opengl/GLES20.java
new file mode 100644
index 0000000..b8aac0e
--- /dev/null
+++ b/opengl/java/android/opengl/GLES20.java
@@ -0,0 +1,1857 @@
+/*
+**
+** Copyright 2009, 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.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+/** OpenGL ES 2.0
+ */
+public class GLES20 {
+ public static final int GL_ACTIVE_TEXTURE = 0x84E0;
+ public static final int GL_DEPTH_BUFFER_BIT = 0x00000100;
+ public static final int GL_STENCIL_BUFFER_BIT = 0x00000400;
+ public static final int GL_COLOR_BUFFER_BIT = 0x00004000;
+ public static final int GL_FALSE = 0;
+ public static final int GL_TRUE = 1;
+ public static final int GL_POINTS = 0x0000;
+ public static final int GL_LINES = 0x0001;
+ public static final int GL_LINE_LOOP = 0x0002;
+ public static final int GL_LINE_STRIP = 0x0003;
+ public static final int GL_TRIANGLES = 0x0004;
+ public static final int GL_TRIANGLE_STRIP = 0x0005;
+ public static final int GL_TRIANGLE_FAN = 0x0006;
+ public static final int GL_ZERO = 0;
+ public static final int GL_ONE = 1;
+ public static final int GL_SRC_COLOR = 0x0300;
+ public static final int GL_ONE_MINUS_SRC_COLOR = 0x0301;
+ public static final int GL_SRC_ALPHA = 0x0302;
+ public static final int GL_ONE_MINUS_SRC_ALPHA = 0x0303;
+ public static final int GL_DST_ALPHA = 0x0304;
+ public static final int GL_ONE_MINUS_DST_ALPHA = 0x0305;
+ public static final int GL_DST_COLOR = 0x0306;
+ public static final int GL_ONE_MINUS_DST_COLOR = 0x0307;
+ public static final int GL_SRC_ALPHA_SATURATE = 0x0308;
+ public static final int GL_FUNC_ADD = 0x8006;
+ public static final int GL_BLEND_EQUATION = 0x8009;
+ public static final int GL_BLEND_EQUATION_RGB = 0x8009; /* same as BLEND_EQUATION */
+ public static final int GL_BLEND_EQUATION_ALPHA = 0x883D;
+ public static final int GL_FUNC_SUBTRACT = 0x800A;
+ public static final int GL_FUNC_REVERSE_SUBTRACT = 0x800B;
+ public static final int GL_BLEND_DST_RGB = 0x80C8;
+ public static final int GL_BLEND_SRC_RGB = 0x80C9;
+ public static final int GL_BLEND_DST_ALPHA = 0x80CA;
+ public static final int GL_BLEND_SRC_ALPHA = 0x80CB;
+ public static final int GL_CONSTANT_COLOR = 0x8001;
+ public static final int GL_ONE_MINUS_CONSTANT_COLOR = 0x8002;
+ public static final int GL_CONSTANT_ALPHA = 0x8003;
+ public static final int GL_ONE_MINUS_CONSTANT_ALPHA = 0x8004;
+ public static final int GL_BLEND_COLOR = 0x8005;
+ public static final int GL_ARRAY_BUFFER = 0x8892;
+ public static final int GL_ELEMENT_ARRAY_BUFFER = 0x8893;
+ public static final int GL_ARRAY_BUFFER_BINDING = 0x8894;
+ public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
+ public static final int GL_STREAM_DRAW = 0x88E0;
+ public static final int GL_STATIC_DRAW = 0x88E4;
+ public static final int GL_DYNAMIC_DRAW = 0x88E8;
+ public static final int GL_BUFFER_SIZE = 0x8764;
+ public static final int GL_BUFFER_USAGE = 0x8765;
+ public static final int GL_CURRENT_VERTEX_ATTRIB = 0x8626;
+ public static final int GL_FRONT = 0x0404;
+ public static final int GL_BACK = 0x0405;
+ public static final int GL_FRONT_AND_BACK = 0x0408;
+ public static final int GL_TEXTURE_2D = 0x0DE1;
+ public static final int GL_CULL_FACE = 0x0B44;
+ public static final int GL_BLEND = 0x0BE2;
+ public static final int GL_DITHER = 0x0BD0;
+ public static final int GL_STENCIL_TEST = 0x0B90;
+ public static final int GL_DEPTH_TEST = 0x0B71;
+ public static final int GL_SCISSOR_TEST = 0x0C11;
+ public static final int GL_POLYGON_OFFSET_FILL = 0x8037;
+ public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
+ public static final int GL_SAMPLE_COVERAGE = 0x80A0;
+ public static final int GL_NO_ERROR = 0;
+ public static final int GL_INVALID_ENUM = 0x0500;
+ public static final int GL_INVALID_VALUE = 0x0501;
+ public static final int GL_INVALID_OPERATION = 0x0502;
+ public static final int GL_OUT_OF_MEMORY = 0x0505;
+ public static final int GL_CW = 0x0900;
+ public static final int GL_CCW = 0x0901;
+ public static final int GL_LINE_WIDTH = 0x0B21;
+ public static final int GL_ALIASED_POINT_SIZE_RANGE = 0x846D;
+ public static final int GL_ALIASED_LINE_WIDTH_RANGE = 0x846E;
+ public static final int GL_CULL_FACE_MODE = 0x0B45;
+ public static final int GL_FRONT_FACE = 0x0B46;
+ public static final int GL_DEPTH_RANGE = 0x0B70;
+ public static final int GL_DEPTH_WRITEMASK = 0x0B72;
+ public static final int GL_DEPTH_CLEAR_VALUE = 0x0B73;
+ public static final int GL_DEPTH_FUNC = 0x0B74;
+ public static final int GL_STENCIL_CLEAR_VALUE = 0x0B91;
+ public static final int GL_STENCIL_FUNC = 0x0B92;
+ public static final int GL_STENCIL_FAIL = 0x0B94;
+ public static final int GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95;
+ public static final int GL_STENCIL_PASS_DEPTH_PASS = 0x0B96;
+ public static final int GL_STENCIL_REF = 0x0B97;
+ public static final int GL_STENCIL_VALUE_MASK = 0x0B93;
+ public static final int GL_STENCIL_WRITEMASK = 0x0B98;
+ public static final int GL_STENCIL_BACK_FUNC = 0x8800;
+ public static final int GL_STENCIL_BACK_FAIL = 0x8801;
+ public static final int GL_STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
+ public static final int GL_STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
+ public static final int GL_STENCIL_BACK_REF = 0x8CA3;
+ public static final int GL_STENCIL_BACK_VALUE_MASK = 0x8CA4;
+ public static final int GL_STENCIL_BACK_WRITEMASK = 0x8CA5;
+ public static final int GL_VIEWPORT = 0x0BA2;
+ public static final int GL_SCISSOR_BOX = 0x0C10;
+ public static final int GL_COLOR_CLEAR_VALUE = 0x0C22;
+ public static final int GL_COLOR_WRITEMASK = 0x0C23;
+ public static final int GL_UNPACK_ALIGNMENT = 0x0CF5;
+ public static final int GL_PACK_ALIGNMENT = 0x0D05;
+ public static final int GL_MAX_TEXTURE_SIZE = 0x0D33;
+ public static final int GL_MAX_VIEWPORT_DIMS = 0x0D3A;
+ public static final int GL_SUBPIXEL_BITS = 0x0D50;
+ public static final int GL_RED_BITS = 0x0D52;
+ public static final int GL_GREEN_BITS = 0x0D53;
+ public static final int GL_BLUE_BITS = 0x0D54;
+ public static final int GL_ALPHA_BITS = 0x0D55;
+ public static final int GL_DEPTH_BITS = 0x0D56;
+ public static final int GL_STENCIL_BITS = 0x0D57;
+ public static final int GL_POLYGON_OFFSET_UNITS = 0x2A00;
+ public static final int GL_POLYGON_OFFSET_FACTOR = 0x8038;
+ public static final int GL_TEXTURE_BINDING_2D = 0x8069;
+ public static final int GL_SAMPLE_BUFFERS = 0x80A8;
+ public static final int GL_SAMPLES = 0x80A9;
+ public static final int GL_SAMPLE_COVERAGE_VALUE = 0x80AA;
+ public static final int GL_SAMPLE_COVERAGE_INVERT = 0x80AB;
+ public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2;
+ public static final int GL_COMPRESSED_TEXTURE_FORMATS = 0x86A3;
+ public static final int GL_DONT_CARE = 0x1100;
+ public static final int GL_FASTEST = 0x1101;
+ public static final int GL_NICEST = 0x1102;
+ public static final int GL_GENERATE_MIPMAP_HINT = 0x8192;
+ public static final int GL_BYTE = 0x1400;
+ public static final int GL_UNSIGNED_BYTE = 0x1401;
+ public static final int GL_SHORT = 0x1402;
+ public static final int GL_UNSIGNED_SHORT = 0x1403;
+ public static final int GL_INT = 0x1404;
+ public static final int GL_UNSIGNED_INT = 0x1405;
+ public static final int GL_FLOAT = 0x1406;
+ public static final int GL_FIXED = 0x140C;
+ public static final int GL_DEPTH_COMPONENT = 0x1902;
+ public static final int GL_ALPHA = 0x1906;
+ public static final int GL_RGB = 0x1907;
+ public static final int GL_RGBA = 0x1908;
+ public static final int GL_LUMINANCE = 0x1909;
+ public static final int GL_LUMINANCE_ALPHA = 0x190A;
+ public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033;
+ public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034;
+ public static final int GL_UNSIGNED_SHORT_5_6_5 = 0x8363;
+ public static final int GL_FRAGMENT_SHADER = 0x8B30;
+ public static final int GL_VERTEX_SHADER = 0x8B31;
+ public static final int GL_MAX_VERTEX_ATTRIBS = 0x8869;
+ public static final int GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
+ public static final int GL_MAX_VARYING_VECTORS = 0x8DFC;
+ public static final int GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
+ public static final int GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
+ public static final int GL_MAX_TEXTURE_IMAGE_UNITS = 0x8872;
+ public static final int GL_MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
+ public static final int GL_SHADER_TYPE = 0x8B4F;
+ public static final int GL_DELETE_STATUS = 0x8B80;
+ public static final int GL_LINK_STATUS = 0x8B82;
+ public static final int GL_VALIDATE_STATUS = 0x8B83;
+ public static final int GL_ATTACHED_SHADERS = 0x8B85;
+ public static final int GL_ACTIVE_UNIFORMS = 0x8B86;
+ public static final int GL_ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87;
+ public static final int GL_ACTIVE_ATTRIBUTES = 0x8B89;
+ public static final int GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A;
+ public static final int GL_SHADING_LANGUAGE_VERSION = 0x8B8C;
+ public static final int GL_CURRENT_PROGRAM = 0x8B8D;
+ public static final int GL_NEVER = 0x0200;
+ public static final int GL_LESS = 0x0201;
+ public static final int GL_EQUAL = 0x0202;
+ public static final int GL_LEQUAL = 0x0203;
+ public static final int GL_GREATER = 0x0204;
+ public static final int GL_NOTEQUAL = 0x0205;
+ public static final int GL_GEQUAL = 0x0206;
+ public static final int GL_ALWAYS = 0x0207;
+ public static final int GL_KEEP = 0x1E00;
+ public static final int GL_REPLACE = 0x1E01;
+ public static final int GL_INCR = 0x1E02;
+ public static final int GL_DECR = 0x1E03;
+ public static final int GL_INVERT = 0x150A;
+ public static final int GL_INCR_WRAP = 0x8507;
+ public static final int GL_DECR_WRAP = 0x8508;
+ public static final int GL_VENDOR = 0x1F00;
+ public static final int GL_RENDERER = 0x1F01;
+ public static final int GL_VERSION = 0x1F02;
+ public static final int GL_EXTENSIONS = 0x1F03;
+ public static final int GL_NEAREST = 0x2600;
+ public static final int GL_LINEAR = 0x2601;
+ public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
+ public static final int GL_LINEAR_MIPMAP_NEAREST = 0x2701;
+ public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702;
+ public static final int GL_LINEAR_MIPMAP_LINEAR = 0x2703;
+ public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
+ public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
+ public static final int GL_TEXTURE_WRAP_S = 0x2802;
+ public static final int GL_TEXTURE_WRAP_T = 0x2803;
+ public static final int GL_TEXTURE = 0x1702;
+ public static final int GL_TEXTURE_CUBE_MAP = 0x8513;
+ public static final int GL_TEXTURE_BINDING_CUBE_MAP = 0x8514;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
+ public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
+ public static final int GL_TEXTURE0 = 0x84C0;
+ public static final int GL_TEXTURE1 = 0x84C1;
+ public static final int GL_TEXTURE2 = 0x84C2;
+ public static final int GL_TEXTURE3 = 0x84C3;
+ public static final int GL_TEXTURE4 = 0x84C4;
+ public static final int GL_TEXTURE5 = 0x84C5;
+ public static final int GL_TEXTURE6 = 0x84C6;
+ public static final int GL_TEXTURE7 = 0x84C7;
+ public static final int GL_TEXTURE8 = 0x84C8;
+ public static final int GL_TEXTURE9 = 0x84C9;
+ public static final int GL_TEXTURE10 = 0x84CA;
+ public static final int GL_TEXTURE11 = 0x84CB;
+ public static final int GL_TEXTURE12 = 0x84CC;
+ public static final int GL_TEXTURE13 = 0x84CD;
+ public static final int GL_TEXTURE14 = 0x84CE;
+ public static final int GL_TEXTURE15 = 0x84CF;
+ public static final int GL_TEXTURE16 = 0x84D0;
+ public static final int GL_TEXTURE17 = 0x84D1;
+ public static final int GL_TEXTURE18 = 0x84D2;
+ public static final int GL_TEXTURE19 = 0x84D3;
+ public static final int GL_TEXTURE20 = 0x84D4;
+ public static final int GL_TEXTURE21 = 0x84D5;
+ public static final int GL_TEXTURE22 = 0x84D6;
+ public static final int GL_TEXTURE23 = 0x84D7;
+ public static final int GL_TEXTURE24 = 0x84D8;
+ public static final int GL_TEXTURE25 = 0x84D9;
+ public static final int GL_TEXTURE26 = 0x84DA;
+ public static final int GL_TEXTURE27 = 0x84DB;
+ public static final int GL_TEXTURE28 = 0x84DC;
+ public static final int GL_TEXTURE29 = 0x84DD;
+ public static final int GL_TEXTURE30 = 0x84DE;
+ public static final int GL_TEXTURE31 = 0x84DF;
+ public static final int GL_REPEAT = 0x2901;
+ public static final int GL_CLAMP_TO_EDGE = 0x812F;
+ public static final int GL_MIRRORED_REPEAT = 0x8370;
+ public static final int GL_FLOAT_VEC2 = 0x8B50;
+ public static final int GL_FLOAT_VEC3 = 0x8B51;
+ public static final int GL_FLOAT_VEC4 = 0x8B52;
+ public static final int GL_INT_VEC2 = 0x8B53;
+ public static final int GL_INT_VEC3 = 0x8B54;
+ public static final int GL_INT_VEC4 = 0x8B55;
+ public static final int GL_BOOL = 0x8B56;
+ public static final int GL_BOOL_VEC2 = 0x8B57;
+ public static final int GL_BOOL_VEC3 = 0x8B58;
+ public static final int GL_BOOL_VEC4 = 0x8B59;
+ public static final int GL_FLOAT_MAT2 = 0x8B5A;
+ public static final int GL_FLOAT_MAT3 = 0x8B5B;
+ public static final int GL_FLOAT_MAT4 = 0x8B5C;
+ public static final int GL_SAMPLER_2D = 0x8B5E;
+ public static final int GL_SAMPLER_CUBE = 0x8B60;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
+ public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
+ public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;
+ public static final int GL_COMPILE_STATUS = 0x8B81;
+ public static final int GL_INFO_LOG_LENGTH = 0x8B84;
+ public static final int GL_SHADER_SOURCE_LENGTH = 0x8B88;
+ public static final int GL_SHADER_COMPILER = 0x8DFA;
+ public static final int GL_SHADER_BINARY_FORMATS = 0x8DF8;
+ public static final int GL_NUM_SHADER_BINARY_FORMATS = 0x8DF9;
+ public static final int GL_LOW_FLOAT = 0x8DF0;
+ public static final int GL_MEDIUM_FLOAT = 0x8DF1;
+ public static final int GL_HIGH_FLOAT = 0x8DF2;
+ public static final int GL_LOW_INT = 0x8DF3;
+ public static final int GL_MEDIUM_INT = 0x8DF4;
+ public static final int GL_HIGH_INT = 0x8DF5;
+ public static final int GL_FRAMEBUFFER = 0x8D40;
+ public static final int GL_RENDERBUFFER = 0x8D41;
+ public static final int GL_RGBA4 = 0x8056;
+ public static final int GL_RGB5_A1 = 0x8057;
+ public static final int GL_RGB565 = 0x8D62;
+ public static final int GL_DEPTH_COMPONENT16 = 0x81A5;
+ public static final int GL_STENCIL_INDEX = 0x1901;
+ public static final int GL_STENCIL_INDEX8 = 0x8D48;
+ public static final int GL_RENDERBUFFER_WIDTH = 0x8D42;
+ public static final int GL_RENDERBUFFER_HEIGHT = 0x8D43;
+ public static final int GL_RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
+ public static final int GL_RENDERBUFFER_RED_SIZE = 0x8D50;
+ public static final int GL_RENDERBUFFER_GREEN_SIZE = 0x8D51;
+ public static final int GL_RENDERBUFFER_BLUE_SIZE = 0x8D52;
+ public static final int GL_RENDERBUFFER_ALPHA_SIZE = 0x8D53;
+ public static final int GL_RENDERBUFFER_DEPTH_SIZE = 0x8D54;
+ public static final int GL_RENDERBUFFER_STENCIL_SIZE = 0x8D55;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
+ public static final int GL_COLOR_ATTACHMENT0 = 0x8CE0;
+ public static final int GL_DEPTH_ATTACHMENT = 0x8D00;
+ public static final int GL_STENCIL_ATTACHMENT = 0x8D20;
+ public static final int GL_NONE = 0;
+ public static final int GL_FRAMEBUFFER_COMPLETE = 0x8CD5;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
+ public static final int GL_FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
+ public static final int GL_FRAMEBUFFER_BINDING = 0x8CA6;
+ public static final int GL_RENDERBUFFER_BINDING = 0x8CA7;
+ public static final int GL_MAX_RENDERBUFFER_SIZE = 0x84E8;
+ public static final int GL_INVALID_FRAMEBUFFER_OPERATION = 0x0506;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+ // C function void glActiveTexture ( GLenum texture )
+
+ public static native void glActiveTexture(
+ int texture
+ );
+
+ // C function void glAttachShader ( GLuint program, GLuint shader )
+
+ public static native void glAttachShader(
+ int program,
+ int shader
+ );
+
+ // C function void glBindAttribLocation ( GLuint program, GLuint index, const char *name )
+
+ public static native void glBindAttribLocation(
+ int program,
+ int index,
+ String name
+ );
+
+ // C function void glBindBuffer ( GLenum target, GLuint buffer )
+
+ public static native void glBindBuffer(
+ int target,
+ int buffer
+ );
+
+ // C function void glBindFramebuffer ( GLenum target, GLuint framebuffer )
+
+ public static native void glBindFramebuffer(
+ int target,
+ int framebuffer
+ );
+
+ // C function void glBindRenderbuffer ( GLenum target, GLuint renderbuffer )
+
+ public static native void glBindRenderbuffer(
+ int target,
+ int renderbuffer
+ );
+
+ // C function void glBindTexture ( GLenum target, GLuint texture )
+
+ public static native void glBindTexture(
+ int target,
+ int texture
+ );
+
+ // C function void glBlendColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
+
+ public static native void glBlendColor(
+ float red,
+ float green,
+ float blue,
+ float alpha
+ );
+
+ // C function void glBlendEquation ( GLenum mode )
+
+ public static native void glBlendEquation(
+ int mode
+ );
+
+ // C function void glBlendEquationSeparate ( GLenum modeRGB, GLenum modeAlpha )
+
+ public static native void glBlendEquationSeparate(
+ int modeRGB,
+ int modeAlpha
+ );
+
+ // C function void glBlendFunc ( GLenum sfactor, GLenum dfactor )
+
+ public static native void glBlendFunc(
+ int sfactor,
+ int dfactor
+ );
+
+ // C function void glBlendFuncSeparate ( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha )
+
+ public static native void glBlendFuncSeparate(
+ int srcRGB,
+ int dstRGB,
+ int srcAlpha,
+ int dstAlpha
+ );
+
+ // C function void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage )
+
+ public static native void glBufferData(
+ int target,
+ int size,
+ java.nio.Buffer data,
+ int usage
+ );
+
+ // C function void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data )
+
+ public static native void glBufferSubData(
+ int target,
+ int offset,
+ int size,
+ java.nio.Buffer data
+ );
+
+ // C function GLenum glCheckFramebufferStatus ( GLenum target )
+
+ public static native int glCheckFramebufferStatus(
+ int target
+ );
+
+ // C function void glClear ( GLbitfield mask )
+
+ public static native void glClear(
+ int mask
+ );
+
+ // C function void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
+
+ public static native void glClearColor(
+ float red,
+ float green,
+ float blue,
+ float alpha
+ );
+
+ // C function void glClearDepthf ( GLclampf depth )
+
+ public static native void glClearDepthf(
+ float depth
+ );
+
+ // C function void glClearStencil ( GLint s )
+
+ public static native void glClearStencil(
+ int s
+ );
+
+ // C function void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha )
+
+ public static native void glColorMask(
+ boolean red,
+ boolean green,
+ boolean blue,
+ boolean alpha
+ );
+
+ // C function void glCompileShader ( GLuint shader )
+
+ public static native void glCompileShader(
+ int shader
+ );
+
+ // C function void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data )
+
+ public static native void glCompressedTexImage2D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int border,
+ int imageSize,
+ java.nio.Buffer data
+ );
+
+ // C function void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data )
+
+ public static native void glCompressedTexSubImage2D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int width,
+ int height,
+ int format,
+ int imageSize,
+ java.nio.Buffer data
+ );
+
+ // C function void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border )
+
+ public static native void glCopyTexImage2D(
+ int target,
+ int level,
+ int internalformat,
+ int x,
+ int y,
+ int width,
+ int height,
+ int border
+ );
+
+ // C function void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glCopyTexSubImage2D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function GLuint glCreateProgram ( void )
+
+ public static native int glCreateProgram(
+ );
+
+ // C function GLuint glCreateShader ( GLenum type )
+
+ public static native int glCreateShader(
+ int type
+ );
+
+ // C function void glCullFace ( GLenum mode )
+
+ public static native void glCullFace(
+ int mode
+ );
+
+ // C function void glDeleteBuffers ( GLsizei n, const GLuint *buffers )
+
+ public static native void glDeleteBuffers(
+ int n,
+ int[] buffers,
+ int offset
+ );
+
+ // C function void glDeleteBuffers ( GLsizei n, const GLuint *buffers )
+
+ public static native void glDeleteBuffers(
+ int n,
+ java.nio.IntBuffer buffers
+ );
+
+ // C function void glDeleteFramebuffers ( GLsizei n, const GLuint *framebuffers )
+
+ public static native void glDeleteFramebuffers(
+ int n,
+ int[] framebuffers,
+ int offset
+ );
+
+ // C function void glDeleteFramebuffers ( GLsizei n, const GLuint *framebuffers )
+
+ public static native void glDeleteFramebuffers(
+ int n,
+ java.nio.IntBuffer framebuffers
+ );
+
+ // C function void glDeleteProgram ( GLuint program )
+
+ public static native void glDeleteProgram(
+ int program
+ );
+
+ // C function void glDeleteRenderbuffers ( GLsizei n, const GLuint *renderbuffers )
+
+ public static native void glDeleteRenderbuffers(
+ int n,
+ int[] renderbuffers,
+ int offset
+ );
+
+ // C function void glDeleteRenderbuffers ( GLsizei n, const GLuint *renderbuffers )
+
+ public static native void glDeleteRenderbuffers(
+ int n,
+ java.nio.IntBuffer renderbuffers
+ );
+
+ // C function void glDeleteShader ( GLuint shader )
+
+ public static native void glDeleteShader(
+ int shader
+ );
+
+ // C function void glDeleteTextures ( GLsizei n, const GLuint *textures )
+
+ public static native void glDeleteTextures(
+ int n,
+ int[] textures,
+ int offset
+ );
+
+ // C function void glDeleteTextures ( GLsizei n, const GLuint *textures )
+
+ public static native void glDeleteTextures(
+ int n,
+ java.nio.IntBuffer textures
+ );
+
+ // C function void glDepthFunc ( GLenum func )
+
+ public static native void glDepthFunc(
+ int func
+ );
+
+ // C function void glDepthMask ( GLboolean flag )
+
+ public static native void glDepthMask(
+ boolean flag
+ );
+
+ // C function void glDepthRangef ( GLclampf zNear, GLclampf zFar )
+
+ public static native void glDepthRangef(
+ float zNear,
+ float zFar
+ );
+
+ // C function void glDetachShader ( GLuint program, GLuint shader )
+
+ public static native void glDetachShader(
+ int program,
+ int shader
+ );
+
+ // C function void glDisable ( GLenum cap )
+
+ public static native void glDisable(
+ int cap
+ );
+
+ // C function void glDisableVertexAttribArray ( GLuint index )
+
+ public static native void glDisableVertexAttribArray(
+ int index
+ );
+
+ // C function void glDrawArrays ( GLenum mode, GLint first, GLsizei count )
+
+ public static native void glDrawArrays(
+ int mode,
+ int first,
+ int count
+ );
+
+ // C function void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices )
+
+ public static native void glDrawElements(
+ int mode,
+ int count,
+ int type,
+ java.nio.Buffer indices
+ );
+
+ // C function void glEnable ( GLenum cap )
+
+ public static native void glEnable(
+ int cap
+ );
+
+ // C function void glEnableVertexAttribArray ( GLuint index )
+
+ public static native void glEnableVertexAttribArray(
+ int index
+ );
+
+ // C function void glFinish ( void )
+
+ public static native void glFinish(
+ );
+
+ // C function void glFlush ( void )
+
+ public static native void glFlush(
+ );
+
+ // C function void glFramebufferRenderbuffer ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer )
+
+ public static native void glFramebufferRenderbuffer(
+ int target,
+ int attachment,
+ int renderbuffertarget,
+ int renderbuffer
+ );
+
+ // C function void glFramebufferTexture2D ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level )
+
+ public static native void glFramebufferTexture2D(
+ int target,
+ int attachment,
+ int textarget,
+ int texture,
+ int level
+ );
+
+ // C function void glFrontFace ( GLenum mode )
+
+ public static native void glFrontFace(
+ int mode
+ );
+
+ // C function void glGenBuffers ( GLsizei n, GLuint *buffers )
+
+ public static native void glGenBuffers(
+ int n,
+ int[] buffers,
+ int offset
+ );
+
+ // C function void glGenBuffers ( GLsizei n, GLuint *buffers )
+
+ public static native void glGenBuffers(
+ int n,
+ java.nio.IntBuffer buffers
+ );
+
+ // C function void glGenerateMipmap ( GLenum target )
+
+ public static native void glGenerateMipmap(
+ int target
+ );
+
+ // C function void glGenFramebuffers ( GLsizei n, GLuint *framebuffers )
+
+ public static native void glGenFramebuffers(
+ int n,
+ int[] framebuffers,
+ int offset
+ );
+
+ // C function void glGenFramebuffers ( GLsizei n, GLuint *framebuffers )
+
+ public static native void glGenFramebuffers(
+ int n,
+ java.nio.IntBuffer framebuffers
+ );
+
+ // C function void glGenRenderbuffers ( GLsizei n, GLuint *renderbuffers )
+
+ public static native void glGenRenderbuffers(
+ int n,
+ int[] renderbuffers,
+ int offset
+ );
+
+ // C function void glGenRenderbuffers ( GLsizei n, GLuint *renderbuffers )
+
+ public static native void glGenRenderbuffers(
+ int n,
+ java.nio.IntBuffer renderbuffers
+ );
+
+ // C function void glGenTextures ( GLsizei n, GLuint *textures )
+
+ public static native void glGenTextures(
+ int n,
+ int[] textures,
+ int offset
+ );
+
+ // C function void glGenTextures ( GLsizei n, GLuint *textures )
+
+ public static native void glGenTextures(
+ int n,
+ java.nio.IntBuffer textures
+ );
+
+ // C function void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name )
+
+ public static native void glGetActiveAttrib(
+ int program,
+ int index,
+ int bufsize,
+ int[] length,
+ int lengthOffset,
+ int[] size,
+ int sizeOffset,
+ int[] type,
+ int typeOffset,
+ byte[] name,
+ int nameOffset
+ );
+
+ // C function void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name )
+
+ public static native void glGetActiveAttrib(
+ int program,
+ int index,
+ int bufsize,
+ java.nio.IntBuffer length,
+ java.nio.IntBuffer size,
+ java.nio.IntBuffer type,
+ byte name
+ );
+
+ // C function void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name )
+
+ public static native void glGetActiveUniform(
+ int program,
+ int index,
+ int bufsize,
+ int[] length,
+ int lengthOffset,
+ int[] size,
+ int sizeOffset,
+ int[] type,
+ int typeOffset,
+ byte[] name,
+ int nameOffset
+ );
+
+ // C function void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name )
+
+ public static native void glGetActiveUniform(
+ int program,
+ int index,
+ int bufsize,
+ java.nio.IntBuffer length,
+ java.nio.IntBuffer size,
+ java.nio.IntBuffer type,
+ byte name
+ );
+
+ // C function void glGetAttachedShaders ( GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders )
+
+ public static native void glGetAttachedShaders(
+ int program,
+ int maxcount,
+ int[] count,
+ int countOffset,
+ int[] shaders,
+ int shadersOffset
+ );
+
+ // C function void glGetAttachedShaders ( GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders )
+
+ public static native void glGetAttachedShaders(
+ int program,
+ int maxcount,
+ java.nio.IntBuffer count,
+ java.nio.IntBuffer shaders
+ );
+
+ // C function int glGetAttribLocation ( GLuint program, const char *name )
+
+ public static native int glGetAttribLocation(
+ int program,
+ String name
+ );
+
+ // C function void glGetBooleanv ( GLenum pname, GLboolean *params )
+
+ public static native void glGetBooleanv(
+ int pname,
+ boolean[] params,
+ int offset
+ );
+
+ // C function void glGetBooleanv ( GLenum pname, GLboolean *params )
+
+ public static native void glGetBooleanv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetBufferParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetBufferParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function GLenum glGetError ( void )
+
+ public static native int glGetError(
+ );
+
+ // C function void glGetFloatv ( GLenum pname, GLfloat *params )
+
+ public static native void glGetFloatv(
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetFloatv ( GLenum pname, GLfloat *params )
+
+ public static native void glGetFloatv(
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetFramebufferAttachmentParameteriv ( GLenum target, GLenum attachment, GLenum pname, GLint *params )
+
+ public static native void glGetFramebufferAttachmentParameteriv(
+ int target,
+ int attachment,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetFramebufferAttachmentParameteriv ( GLenum target, GLenum attachment, GLenum pname, GLint *params )
+
+ public static native void glGetFramebufferAttachmentParameteriv(
+ int target,
+ int attachment,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetIntegerv ( GLenum pname, GLint *params )
+
+ public static native void glGetIntegerv(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetIntegerv ( GLenum pname, GLint *params )
+
+ public static native void glGetIntegerv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetProgramiv ( GLuint program, GLenum pname, GLint *params )
+
+ public static native void glGetProgramiv(
+ int program,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetProgramiv ( GLuint program, GLenum pname, GLint *params )
+
+ public static native void glGetProgramiv(
+ int program,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetProgramInfoLog( GLuint program, GLsizei maxLength, GLsizei * length,
+ // GLchar * infoLog);
+
+ public static native String glGetProgramInfoLog(
+ int program
+ );
+ // C function void glGetRenderbufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetRenderbufferParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetRenderbufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetRenderbufferParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetShaderiv ( GLuint shader, GLenum pname, GLint *params )
+
+ public static native void glGetShaderiv(
+ int shader,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetShaderiv ( GLuint shader, GLenum pname, GLint *params )
+
+ public static native void glGetShaderiv(
+ int shader,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetShaderInfoLog( GLuint shader, GLsizei maxLength, GLsizei * length,
+ // GLchar * infoLog);
+
+ public static native String glGetShaderInfoLog(
+ int shader
+ );
+ // C function void glGetShaderPrecisionFormat ( GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision )
+
+ public static native void glGetShaderPrecisionFormat(
+ int shadertype,
+ int precisiontype,
+ int[] range,
+ int rangeOffset,
+ int[] precision,
+ int precisionOffset
+ );
+
+ // C function void glGetShaderPrecisionFormat ( GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision )
+
+ public static native void glGetShaderPrecisionFormat(
+ int shadertype,
+ int precisiontype,
+ java.nio.IntBuffer range,
+ java.nio.IntBuffer precision
+ );
+
+ // C function void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source )
+
+ public static native void glGetShaderSource(
+ int shader,
+ int bufsize,
+ int[] length,
+ int lengthOffset,
+ byte[] source,
+ int sourceOffset
+ );
+
+ // C function void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source )
+
+ public static native void glGetShaderSource(
+ int shader,
+ int bufsize,
+ java.nio.IntBuffer length,
+ byte source
+ );
+
+ // C function const GLubyte * glGetString ( GLenum name )
+
+ public static native String glGetString(
+ int name
+ );
+ // C function void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexParameterfv(
+ int target,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexParameterfv(
+ int target,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetTexParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetTexParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetUniformfv ( GLuint program, GLint location, GLfloat *params )
+
+ public static native void glGetUniformfv(
+ int program,
+ int location,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetUniformfv ( GLuint program, GLint location, GLfloat *params )
+
+ public static native void glGetUniformfv(
+ int program,
+ int location,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetUniformiv ( GLuint program, GLint location, GLint *params )
+
+ public static native void glGetUniformiv(
+ int program,
+ int location,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetUniformiv ( GLuint program, GLint location, GLint *params )
+
+ public static native void glGetUniformiv(
+ int program,
+ int location,
+ java.nio.IntBuffer params
+ );
+
+ // C function int glGetUniformLocation ( GLuint program, const char *name )
+
+ public static native int glGetUniformLocation(
+ int program,
+ String name
+ );
+
+ // C function void glGetVertexAttribfv ( GLuint index, GLenum pname, GLfloat *params )
+
+ public static native void glGetVertexAttribfv(
+ int index,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetVertexAttribfv ( GLuint index, GLenum pname, GLfloat *params )
+
+ public static native void glGetVertexAttribfv(
+ int index,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetVertexAttribiv ( GLuint index, GLenum pname, GLint *params )
+
+ public static native void glGetVertexAttribiv(
+ int index,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetVertexAttribiv ( GLuint index, GLenum pname, GLint *params )
+
+ public static native void glGetVertexAttribiv(
+ int index,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glHint ( GLenum target, GLenum mode )
+
+ public static native void glHint(
+ int target,
+ int mode
+ );
+
+ // C function GLboolean glIsBuffer ( GLuint buffer )
+
+ public static native boolean glIsBuffer(
+ int buffer
+ );
+
+ // C function GLboolean glIsEnabled ( GLenum cap )
+
+ public static native boolean glIsEnabled(
+ int cap
+ );
+
+ // C function GLboolean glIsFramebuffer ( GLuint framebuffer )
+
+ public static native boolean glIsFramebuffer(
+ int framebuffer
+ );
+
+ // C function GLboolean glIsProgram ( GLuint program )
+
+ public static native boolean glIsProgram(
+ int program
+ );
+
+ // C function GLboolean glIsRenderbuffer ( GLuint renderbuffer )
+
+ public static native boolean glIsRenderbuffer(
+ int renderbuffer
+ );
+
+ // C function GLboolean glIsShader ( GLuint shader )
+
+ public static native boolean glIsShader(
+ int shader
+ );
+
+ // C function GLboolean glIsTexture ( GLuint texture )
+
+ public static native boolean glIsTexture(
+ int texture
+ );
+
+ // C function void glLineWidth ( GLfloat width )
+
+ public static native void glLineWidth(
+ float width
+ );
+
+ // C function void glLinkProgram ( GLuint program )
+
+ public static native void glLinkProgram(
+ int program
+ );
+
+ // C function void glPixelStorei ( GLenum pname, GLint param )
+
+ public static native void glPixelStorei(
+ int pname,
+ int param
+ );
+
+ // C function void glPolygonOffset ( GLfloat factor, GLfloat units )
+
+ public static native void glPolygonOffset(
+ float factor,
+ float units
+ );
+
+ // C function void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels )
+
+ public static native void glReadPixels(
+ int x,
+ int y,
+ int width,
+ int height,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glReleaseShaderCompiler ( void )
+
+ public static native void glReleaseShaderCompiler(
+ );
+
+ // C function void glRenderbufferStorage ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height )
+
+ public static native void glRenderbufferStorage(
+ int target,
+ int internalformat,
+ int width,
+ int height
+ );
+
+ // C function void glSampleCoverage ( GLclampf value, GLboolean invert )
+
+ public static native void glSampleCoverage(
+ float value,
+ boolean invert
+ );
+
+ // C function void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glScissor(
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function void glShaderBinary ( GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length )
+
+ public static native void glShaderBinary(
+ int n,
+ int[] shaders,
+ int offset,
+ int binaryformat,
+ java.nio.Buffer binary,
+ int length
+ );
+
+ // C function void glShaderBinary ( GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length )
+
+ public static native void glShaderBinary(
+ int n,
+ java.nio.IntBuffer shaders,
+ int binaryformat,
+ java.nio.Buffer binary,
+ int length
+ );
+
+ // C function void glShaderSource ( GLuint shader, GLsizei count, const GLchar ** string, const GLint* length )
+
+ public static native void glShaderSource(
+ int shader,
+ String string
+ );
+ // C function void glStencilFunc ( GLenum func, GLint ref, GLuint mask )
+
+ public static native void glStencilFunc(
+ int func,
+ int ref,
+ int mask
+ );
+
+ // C function void glStencilFuncSeparate ( GLenum face, GLenum func, GLint ref, GLuint mask )
+
+ public static native void glStencilFuncSeparate(
+ int face,
+ int func,
+ int ref,
+ int mask
+ );
+
+ // C function void glStencilMask ( GLuint mask )
+
+ public static native void glStencilMask(
+ int mask
+ );
+
+ // C function void glStencilMaskSeparate ( GLenum face, GLuint mask )
+
+ public static native void glStencilMaskSeparate(
+ int face,
+ int mask
+ );
+
+ // C function void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass )
+
+ public static native void glStencilOp(
+ int fail,
+ int zfail,
+ int zpass
+ );
+
+ // C function void glStencilOpSeparate ( GLenum face, GLenum fail, GLenum zfail, GLenum zpass )
+
+ public static native void glStencilOpSeparate(
+ int face,
+ int fail,
+ int zfail,
+ int zpass
+ );
+
+ // C function void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
+
+ public static native void glTexImage2D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int border,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glTexParameterf ( GLenum target, GLenum pname, GLfloat param )
+
+ public static native void glTexParameterf(
+ int target,
+ int pname,
+ float param
+ );
+
+ // C function void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params )
+
+ public static native void glTexParameterfv(
+ int target,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params )
+
+ public static native void glTexParameterfv(
+ int target,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glTexParameteri ( GLenum target, GLenum pname, GLint param )
+
+ public static native void glTexParameteri(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params )
+
+ public static native void glTexParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params )
+
+ public static native void glTexParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels )
+
+ public static native void glTexSubImage2D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int width,
+ int height,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glUniform1f ( GLint location, GLfloat x )
+
+ public static native void glUniform1f(
+ int location,
+ float x
+ );
+
+ // C function void glUniform1fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform1fv(
+ int location,
+ int count,
+ float[] v,
+ int offset
+ );
+
+ // C function void glUniform1fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform1fv(
+ int location,
+ int count,
+ java.nio.FloatBuffer v
+ );
+
+ // C function void glUniform1i ( GLint location, GLint x )
+
+ public static native void glUniform1i(
+ int location,
+ int x
+ );
+
+ // C function void glUniform1iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform1iv(
+ int location,
+ int count,
+ int[] v,
+ int offset
+ );
+
+ // C function void glUniform1iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform1iv(
+ int location,
+ int count,
+ java.nio.IntBuffer v
+ );
+
+ // C function void glUniform2f ( GLint location, GLfloat x, GLfloat y )
+
+ public static native void glUniform2f(
+ int location,
+ float x,
+ float y
+ );
+
+ // C function void glUniform2fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform2fv(
+ int location,
+ int count,
+ float[] v,
+ int offset
+ );
+
+ // C function void glUniform2fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform2fv(
+ int location,
+ int count,
+ java.nio.FloatBuffer v
+ );
+
+ // C function void glUniform2i ( GLint location, GLint x, GLint y )
+
+ public static native void glUniform2i(
+ int location,
+ int x,
+ int y
+ );
+
+ // C function void glUniform2iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform2iv(
+ int location,
+ int count,
+ int[] v,
+ int offset
+ );
+
+ // C function void glUniform2iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform2iv(
+ int location,
+ int count,
+ java.nio.IntBuffer v
+ );
+
+ // C function void glUniform3f ( GLint location, GLfloat x, GLfloat y, GLfloat z )
+
+ public static native void glUniform3f(
+ int location,
+ float x,
+ float y,
+ float z
+ );
+
+ // C function void glUniform3fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform3fv(
+ int location,
+ int count,
+ float[] v,
+ int offset
+ );
+
+ // C function void glUniform3fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform3fv(
+ int location,
+ int count,
+ java.nio.FloatBuffer v
+ );
+
+ // C function void glUniform3i ( GLint location, GLint x, GLint y, GLint z )
+
+ public static native void glUniform3i(
+ int location,
+ int x,
+ int y,
+ int z
+ );
+
+ // C function void glUniform3iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform3iv(
+ int location,
+ int count,
+ int[] v,
+ int offset
+ );
+
+ // C function void glUniform3iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform3iv(
+ int location,
+ int count,
+ java.nio.IntBuffer v
+ );
+
+ // C function void glUniform4f ( GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+
+ public static native void glUniform4f(
+ int location,
+ float x,
+ float y,
+ float z,
+ float w
+ );
+
+ // C function void glUniform4fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform4fv(
+ int location,
+ int count,
+ float[] v,
+ int offset
+ );
+
+ // C function void glUniform4fv ( GLint location, GLsizei count, const GLfloat *v )
+
+ public static native void glUniform4fv(
+ int location,
+ int count,
+ java.nio.FloatBuffer v
+ );
+
+ // C function void glUniform4i ( GLint location, GLint x, GLint y, GLint z, GLint w )
+
+ public static native void glUniform4i(
+ int location,
+ int x,
+ int y,
+ int z,
+ int w
+ );
+
+ // C function void glUniform4iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform4iv(
+ int location,
+ int count,
+ int[] v,
+ int offset
+ );
+
+ // C function void glUniform4iv ( GLint location, GLsizei count, const GLint *v )
+
+ public static native void glUniform4iv(
+ int location,
+ int count,
+ java.nio.IntBuffer v
+ );
+
+ // C function void glUniformMatrix2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix2fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix2fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix3fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix3fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix4fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix4fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUseProgram ( GLuint program )
+
+ public static native void glUseProgram(
+ int program
+ );
+
+ // C function void glValidateProgram ( GLuint program )
+
+ public static native void glValidateProgram(
+ int program
+ );
+
+ // C function void glVertexAttrib1f ( GLuint indx, GLfloat x )
+
+ public static native void glVertexAttrib1f(
+ int indx,
+ float x
+ );
+
+ // C function void glVertexAttrib1fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib1fv(
+ int indx,
+ float[] values,
+ int offset
+ );
+
+ // C function void glVertexAttrib1fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib1fv(
+ int indx,
+ java.nio.FloatBuffer values
+ );
+
+ // C function void glVertexAttrib2f ( GLuint indx, GLfloat x, GLfloat y )
+
+ public static native void glVertexAttrib2f(
+ int indx,
+ float x,
+ float y
+ );
+
+ // C function void glVertexAttrib2fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib2fv(
+ int indx,
+ float[] values,
+ int offset
+ );
+
+ // C function void glVertexAttrib2fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib2fv(
+ int indx,
+ java.nio.FloatBuffer values
+ );
+
+ // C function void glVertexAttrib3f ( GLuint indx, GLfloat x, GLfloat y, GLfloat z )
+
+ public static native void glVertexAttrib3f(
+ int indx,
+ float x,
+ float y,
+ float z
+ );
+
+ // C function void glVertexAttrib3fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib3fv(
+ int indx,
+ float[] values,
+ int offset
+ );
+
+ // C function void glVertexAttrib3fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib3fv(
+ int indx,
+ java.nio.FloatBuffer values
+ );
+
+ // C function void glVertexAttrib4f ( GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+
+ public static native void glVertexAttrib4f(
+ int indx,
+ float x,
+ float y,
+ float z,
+ float w
+ );
+
+ // C function void glVertexAttrib4fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib4fv(
+ int indx,
+ float[] values,
+ int offset
+ );
+
+ // C function void glVertexAttrib4fv ( GLuint indx, const GLfloat *values )
+
+ public static native void glVertexAttrib4fv(
+ int indx,
+ java.nio.FloatBuffer values
+ );
+
+ // C function void glVertexAttribPointer ( GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *ptr )
+
+ private static native void glVertexAttribPointerBounds(
+ int indx,
+ int size,
+ int type,
+ boolean normalized,
+ int stride,
+ java.nio.Buffer ptr,
+ int remaining
+ );
+
+ public static void glVertexAttribPointer(
+ int indx,
+ int size,
+ int type,
+ boolean normalized,
+ int stride,
+ java.nio.Buffer ptr
+ ) {
+ glVertexAttribPointerBounds(
+ indx,
+ size,
+ type,
+ normalized,
+ stride,
+ ptr,
+ ptr.remaining()
+ );
+ }
+
+ // C function void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glViewport(
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+}
diff --git a/opengl/java/android/opengl/GLErrorWrapper.java b/opengl/java/android/opengl/GLErrorWrapper.java
index 884a1a0..9b66e49 100644
--- a/opengl/java/android/opengl/GLErrorWrapper.java
+++ b/opengl/java/android/opengl/GLErrorWrapper.java
@@ -958,4 +958,424 @@ class GLErrorWrapper extends GLWrapperBase {
checkError();
return valid;
}
+
+ public void glBindBuffer(int target, int buffer) {
+ checkThread();
+ mgl11.glBindBuffer(target, buffer);
+ checkError();
+ }
+
+ public void glBufferData(int target, int size, Buffer data, int usage) {
+ checkThread();
+ mgl11.glBufferData(target, size, data, usage);
+ checkError();
+ }
+
+ public void glBufferSubData(int target, int offset, int size, Buffer data) {
+ checkThread();
+ mgl11.glBufferSubData(target, offset, size, data);
+ checkError();
+ }
+
+ public void glColor4ub(byte red, byte green, byte blue, byte alpha) {
+ checkThread();
+ mgl11.glColor4ub(red, green, blue, alpha);
+ checkError(); }
+
+ public void glColorPointer(int size, int type, int stride, int offset) {
+ checkThread();
+ mgl11.glColorPointer(size, type, stride, offset);
+ checkError();
+ }
+
+ public void glDeleteBuffers(int n, int[] buffers, int offset) {
+ checkThread();
+ mgl11.glDeleteBuffers(n, buffers, offset);
+ checkError();
+ }
+
+ public void glDeleteBuffers(int n, IntBuffer buffers) {
+ checkThread();
+ mgl11.glDeleteBuffers(n, buffers);
+ checkError();
+ }
+
+ public void glDrawElements(int mode, int count, int type, int offset) {
+ checkThread();
+ mgl11.glDrawElements(mode, count, type, offset);
+ checkError();
+ }
+
+ public void glGenBuffers(int n, int[] buffers, int offset) {
+ checkThread();
+ mgl11.glGenBuffers(n, buffers, offset);
+ checkError();
+ }
+
+ public void glGenBuffers(int n, IntBuffer buffers) {
+ checkThread();
+ mgl11.glGenBuffers(n, buffers);
+ checkError();
+ }
+
+ public void glGetBooleanv(int pname, boolean[] params, int offset) {
+ checkThread();
+ mgl11.glGetBooleanv(pname, params, offset);
+ checkError();
+ }
+
+ public void glGetBooleanv(int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetBooleanv(pname, params);
+ checkError();
+ }
+
+ public void glGetBufferParameteriv(int target, int pname, int[] params,
+ int offset) {
+ checkThread();
+ mgl11.glGetBufferParameteriv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetBufferParameteriv(int target, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetBufferParameteriv(target, pname, params);
+ checkError();
+ }
+
+ public void glGetClipPlanef(int pname, float[] eqn, int offset) {
+ checkThread();
+ mgl11.glGetClipPlanef(pname, eqn, offset);
+ checkError();
+ }
+
+ public void glGetClipPlanef(int pname, FloatBuffer eqn) {
+ checkThread();
+ mgl11.glGetClipPlanef(pname, eqn);
+ checkError();
+ }
+
+ public void glGetClipPlanex(int pname, int[] eqn, int offset) {
+ checkThread();
+ mgl11.glGetClipPlanex(pname, eqn, offset);
+ checkError();
+ }
+
+ public void glGetClipPlanex(int pname, IntBuffer eqn) {
+ checkThread();
+ mgl11.glGetClipPlanex(pname, eqn);
+ checkError();
+ }
+
+ public void glGetFixedv(int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glGetFixedv(pname, params, offset);
+ checkError();
+ }
+
+ public void glGetFixedv(int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetFixedv(pname, params);
+ checkError();
+ }
+
+ public void glGetFloatv(int pname, float[] params, int offset) {
+ checkThread();
+ mgl11.glGetFloatv(pname, params, offset);
+ checkError();
+ }
+
+ public void glGetFloatv(int pname, FloatBuffer params) {
+ checkThread();
+ mgl11.glGetFloatv(pname, params);
+ checkError();
+ }
+
+ public void glGetLightfv(int light, int pname, float[] params, int offset) {
+ checkThread();
+ mgl11.glGetLightfv(light, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetLightfv(int light, int pname, FloatBuffer params) {
+ checkThread();
+ mgl11.glGetLightfv(light, pname, params);
+ checkError();
+ }
+
+ public void glGetLightxv(int light, int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glGetLightxv(light, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetLightxv(int light, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetLightxv(light, pname, params);
+ checkError();
+ }
+
+ public void glGetMaterialfv(int face, int pname, float[] params, int offset) {
+ checkThread();
+ mgl11.glGetMaterialfv(face, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetMaterialfv(int face, int pname, FloatBuffer params) {
+ checkThread();
+ mgl11.glGetMaterialfv(face, pname, params);
+ checkError();
+ }
+
+ public void glGetMaterialxv(int face, int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glGetMaterialxv(face, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetMaterialxv(int face, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetMaterialxv(face, pname, params);
+ checkError();
+ }
+
+ public void glGetPointerv(int pname, Buffer[] params) {
+ checkThread();
+ mgl11.glGetPointerv(pname, params);
+ checkError();
+ }
+
+ public void glGetTexEnviv(int env, int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glGetTexEnviv(env, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetTexEnviv(int env, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetTexEnviv(env, pname, params);
+ checkError();
+ }
+
+ public void glGetTexEnvxv(int env, int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glGetTexEnvxv(env, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetTexEnvxv(int env, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetTexEnvxv(env, pname, params);
+ checkError();
+ }
+
+ public void glGetTexParameterfv(int target, int pname, float[] params,
+ int offset) {
+ checkThread();
+ mgl11.glGetTexParameterfv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetTexParameterfv(int target, int pname, FloatBuffer params) {
+ checkThread();
+ mgl11.glGetTexParameterfv(target, pname, params);
+ checkError();
+ }
+
+ public void glGetTexParameteriv(int target, int pname, int[] params,
+ int offset) {
+ checkThread();
+ mgl11.glGetTexParameteriv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetTexParameteriv(int target, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetTexParameteriv(target, pname, params);
+ checkError();
+ }
+
+ public void glGetTexParameterxv(int target, int pname, int[] params,
+ int offset) {
+ checkThread();
+ mgl11.glGetTexParameterxv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glGetTexParameterxv(int target, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glGetTexParameterxv(target, pname, params);
+ checkError();
+ }
+
+ public boolean glIsBuffer(int buffer) {
+ checkThread();
+ boolean valid = mgl11.glIsBuffer(buffer);
+ checkError();
+ return valid;
+ }
+
+ public boolean glIsEnabled(int cap) {
+ checkThread();
+ boolean valid = mgl11.glIsEnabled(cap);
+ checkError();
+ return valid;
+ }
+
+ public boolean glIsTexture(int texture) {
+ checkThread();
+ boolean valid = mgl11.glIsTexture(texture);
+ checkError();
+ return valid;
+ }
+
+ public void glNormalPointer(int type, int stride, int offset) {
+ checkThread();
+ mgl11.glNormalPointer(type, stride, offset);
+ checkError();
+ }
+
+ public void glPointParameterf(int pname, float param) {
+ checkThread();
+ mgl11.glPointParameterf(pname, param);
+ checkError();
+ }
+
+ public void glPointParameterfv(int pname, float[] params, int offset) {
+ checkThread();
+ mgl11.glPointParameterfv(pname, params, offset);
+ checkError();
+ }
+
+ public void glPointParameterfv(int pname, FloatBuffer params) {
+ checkThread();
+ mgl11.glPointParameterfv(pname, params);
+ checkError();
+ }
+
+ public void glPointParameterx(int pname, int param) {
+ checkThread();
+ mgl11.glPointParameterx(pname, param);
+ checkError();
+ }
+
+ public void glPointParameterxv(int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glPointParameterxv(pname, params, offset);
+ checkError();
+ }
+
+ public void glPointParameterxv(int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glPointParameterxv(pname, params);
+ checkError();
+ }
+
+ public void glPointSizePointerOES(int type, int stride, Buffer pointer) {
+ checkThread();
+ mgl11.glPointSizePointerOES(type, stride, pointer);
+ checkError();
+ }
+
+ public void glTexCoordPointer(int size, int type, int stride, int offset) {
+ checkThread();
+ mgl11.glTexCoordPointer(size, type, stride, offset);
+ checkError();
+ }
+
+ public void glTexEnvi(int target, int pname, int param) {
+ checkThread();
+ mgl11.glTexEnvi(target, pname, param);
+ checkError();
+ }
+
+ public void glTexEnviv(int target, int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glTexEnviv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glTexEnviv(int target, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glTexEnviv(target, pname, params);
+ checkError();
+ }
+
+ public void glTexParameterfv(int target, int pname, float[] params,
+ int offset) {
+ checkThread();
+ mgl11.glTexParameterfv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glTexParameterfv(int target, int pname, FloatBuffer params) {
+ checkThread();
+ mgl11.glTexParameterfv(target, pname, params);
+ checkError();
+ }
+
+ public void glTexParameteri(int target, int pname, int param) {
+ checkThread();
+ mgl11.glTexParameteri(target, pname, param);
+ checkError();
+ }
+
+ public void glTexParameterxv(int target, int pname, int[] params, int offset) {
+ checkThread();
+ mgl11.glTexParameterxv(target, pname, params, offset);
+ checkError();
+ }
+
+ public void glTexParameterxv(int target, int pname, IntBuffer params) {
+ checkThread();
+ mgl11.glTexParameterxv(target, pname, params);
+ checkError();
+ }
+
+ public void glVertexPointer(int size, int type, int stride, int offset) {
+ checkThread();
+ mgl11.glVertexPointer(size, type, stride, offset);
+ checkError();
+ }
+
+ public void glCurrentPaletteMatrixOES(int matrixpaletteindex) {
+ checkThread();
+ mgl11Ext.glCurrentPaletteMatrixOES(matrixpaletteindex);
+ checkError();
+ }
+
+ public void glLoadPaletteFromModelViewMatrixOES() {
+ checkThread();
+ mgl11Ext.glLoadPaletteFromModelViewMatrixOES();
+ checkError();
+ }
+
+ public void glMatrixIndexPointerOES(int size, int type, int stride,
+ Buffer pointer) {
+ checkThread();
+ mgl11Ext.glMatrixIndexPointerOES(size, type, stride, pointer);
+ checkError();
+ }
+
+ public void glMatrixIndexPointerOES(int size, int type, int stride,
+ int offset) {
+ checkThread();
+ mgl11Ext.glMatrixIndexPointerOES(size, type, stride, offset);
+ checkError();
+ }
+
+ public void glWeightPointerOES(int size, int type, int stride,
+ Buffer pointer) {
+ checkThread();
+ mgl11Ext.glWeightPointerOES(size, type, stride, pointer);
+ checkError();
+ }
+
+ public void glWeightPointerOES(int size, int type, int stride, int offset) {
+ checkThread();
+ mgl11Ext.glWeightPointerOES(size, type, stride, offset);
+ checkError();
+ }
+
+
}
diff --git a/opengl/java/android/opengl/GLLogWrapper.java b/opengl/java/android/opengl/GLLogWrapper.java
index f332448..6e97f67 100644
--- a/opengl/java/android/opengl/GLLogWrapper.java
+++ b/opengl/java/android/opengl/GLLogWrapper.java
@@ -932,83 +932,83 @@ class GLLogWrapper extends GLWrapperBase {
boolean convertWholeBuffer = (byteCount < 0);
if (input instanceof ByteBuffer) {
ByteBuffer input2 = (ByteBuffer) input;
+ int position = input2.position();
if (convertWholeBuffer) {
- byteCount = input2.limit();
+ byteCount = input2.limit() - position;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
- int position = input2.position();
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() * 2;
+ byteCount = (input2.limit() - position) * 2;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
CharBuffer result2 = result.asCharBuffer();
- int position = input2.position();
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() * 2;
+ byteCount = (input2.limit() - position)* 2;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
ShortBuffer result2 = result.asShortBuffer();
- int position = input2.position();
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() * 4;
+ byteCount = (input2.limit() - position) * 4;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
IntBuffer result2 = result.asIntBuffer();
- int position = input2.position();
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() * 4;
+ byteCount = (input2.limit() - position) * 4;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
FloatBuffer result2 = result.asFloatBuffer();
- int position = input2.position();
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() * 8;
+ byteCount = (input2.limit() - position) * 8;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
DoubleBuffer result2 = result.asDoubleBuffer();
- int position = input2.position();
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() * 8;
+ byteCount = (input2.limit() - position) * 8;
}
result = ByteBuffer.allocate(byteCount).order(input2.order());
LongBuffer result2 = result.asLongBuffer();
- int position = input2.position();
for (int i = 0; i < byteCount / 8; i++) {
result2.put(input2.get());
}
@@ -1064,8 +1064,8 @@ class GLLogWrapper extends GLWrapperBase {
}
builder.append(" ");
builder.append(name + ":{");
- if (pointer == null) {
- builder.append("undefined");
+ if (pointer == null || pointer.mTempByteBuffer == null ) {
+ builder.append("undefined }");
return;
}
if (pointer.mStride < 0) {
@@ -2767,230 +2767,684 @@ class GLLogWrapper extends GLWrapperBase {
return valid;
}
- // Unsupported GL11 methods
-
public void glBindBuffer(int target, int buffer) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glDeleteBuffers");
+ arg("n", n);
+ arg("buffers", buffers.toString());
+ end();
+ mgl11.glDeleteBuffers(n, buffers);
+ checkError();
}
public void glGenBuffers(int n, int[] buffers, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glGenBuffers");
+ arg("n", n);
+ arg("buffers", buffers.toString());
+ end();
+ mgl11.glGenBuffers(n, buffers);
+ checkError();
}
public void glGetBooleanv(int pname, boolean[] params, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glGetClipPlanef");
+ arg("pname", pname);
+ arg("eqn", eqn.toString());
+ end();
+ mgl11.glGetClipPlanef(pname, eqn);
+ checkError();
}
public void glGetClipPlanex(int pname, int[] eqn, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glGetClipPlanex");
+ arg("pname", pname);
+ arg("eqn", eqn.toString());
+ end();
+ mgl11.glGetClipPlanex(pname, eqn);
+ checkError();
}
public void glGetFixedv(int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glGetFixedv");
+ arg("pname", pname);
+ arg("params", params.toString());
+ end();
+ mgl11.glGetFixedv(pname, params);
+ checkError();
}
public void glGetFloatv(int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glGetTexParameterxv");
+ arg("target", target);
+ arg("pname", pname);
+ arg("params", params.toString());
+ end();
+ mgl11.glGetTexParameterxv(target, pname, params);
+ checkError();
}
public boolean glIsBuffer(int buffer) {
- throw new UnsupportedOperationException();
+ begin("glIsBuffer");
+ arg("buffer", buffer);
+ end();
+ boolean result = mgl11.glIsBuffer(buffer);
+ checkError();
+ return result;
}
public boolean glIsEnabled(int cap) {
- throw new UnsupportedOperationException();
+ begin("glIsEnabled");
+ arg("cap", cap);
+ end();
+ boolean result = mgl11.glIsEnabled(cap);
+ checkError();
+ return result;
}
public boolean glIsTexture(int texture) {
- throw new UnsupportedOperationException();
+ begin("glIsTexture");
+ arg("texture", texture);
+ end();
+ boolean result = mgl11.glIsTexture(texture);
+ checkError();
+ return result;
}
public void glPointParameterf(int pname, float param) {
- throw new UnsupportedOperationException();
+ begin("glPointParameterf");
+ arg("pname", pname);
+ arg("param", param);
+ end();
+ mgl11.glPointParameterf( pname, param);
+ checkError();
}
public void glPointParameterfv(int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glPointParameterfv");
+ arg("pname", pname);
+ arg("params", params.toString());
+ end();
+ mgl11.glPointParameterfv(pname, params);
+ checkError();
}
public void glPointParameterx(int pname, int param) {
- throw new UnsupportedOperationException();
+ begin("glPointParameterfv");
+ arg("pname", pname);
+ arg("param", param);
+ end();
+ mgl11.glPointParameterx( pname, param);
+ checkError();
}
public void glPointParameterxv(int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ begin("glPointParameterxv");
+ arg("pname", pname);
+ arg("params", params.toString());
+ end();
+ mgl11.glPointParameterxv( pname, params);
+ checkError();
}
public void glPointSizePointerOES(int type, int stride, Buffer pointer) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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) {
- throw new UnsupportedOperationException();
+ 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();
}
private class PointerInfo {
@@ -3010,6 +3464,9 @@ class GLLogWrapper extends GLWrapperBase {
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;
@@ -3039,7 +3496,7 @@ class GLLogWrapper extends GLWrapperBase {
}
public void bindByteBuffer() {
- mTempByteBuffer = toByteBuffer(-1, mPointer);
+ mTempByteBuffer = mPointer == null ? null : toByteBuffer(-1, mPointer);
}
public void unbindByteBuffer() {
@@ -3051,10 +3508,10 @@ class GLLogWrapper extends GLWrapperBase {
private boolean mLogArgumentNames;
private int mArgCount;
- private PointerInfo mColorPointer;
- private PointerInfo mNormalPointer;
- private PointerInfo mTexCoordPointer;
- private PointerInfo mVertexPointer;
+ private PointerInfo mColorPointer = new PointerInfo();
+ private PointerInfo mNormalPointer = new PointerInfo();
+ private PointerInfo mTexCoordPointer = new PointerInfo();
+ private PointerInfo mVertexPointer = new PointerInfo();
boolean mColorArrayEnabled;
boolean mNormalArrayEnabled;
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 016df94..f904cdf 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -29,6 +29,9 @@ import javax.microedition.khronos.opengles.GL;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
+import android.content.pm.ConfigurationInfo;
+import android.graphics.PixelFormat;
+import android.os.SystemProperties;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
@@ -73,15 +76,23 @@ import android.view.SurfaceView;
* <li>{@link #setGLWrapper(GLWrapper)}
* </ul>
* <p>
+ * <h4>Specifying the android.view.Surface</h4>
+ * By default GLSurfaceView will create a PixelFormat.RGB_565 format surface. If a translucent
+ * surface is required, call getHolder().setFormat(PixelFormat.TRANSLUCENT).
+ * The exact format of a TRANSLUCENT surface is device dependent, but it will be
+ * a 32-bit-per-pixel surface with 8 bits per component.
+ * <p>
* <h4>Choosing an EGL Configuration</h4>
- * A given Android device may support multiple possible types of drawing surfaces.
- * The available surfaces may differ in how may channels of data are present, as
+ * A given Android device may support multiple EGLConfig rendering configurations.
+ * The available configurations may differ in how may channels of data are present, as
* well as how many bits are allocated to each channel. Therefore, the first thing
- * GLSurfaceView has to do when starting to render is choose what type of surface to use.
+ * GLSurfaceView has to do when starting to render is choose what EGLConfig to use.
+ * <p>
+ * By default GLSurfaceView chooses a EGLConfig that has an RGB_656 pixel format,
+ * with at least a 16-bit depth buffer and no stencil.
* <p>
- * By default GLSurfaceView chooses an available surface that's closest to a 16-bit R5G6B5 surface
- * with a 16-bit depth buffer and no stencil. If you would prefer a different surface (for example,
- * if you do not need a depth buffer) you can override the default behavior by calling one of the
+ * If you would prefer a different EGLConfig
+ * you can override the default behavior by calling one of the
* setEGLConfigChooser methods.
* <p>
* <h4>Debug Behavior</h4>
@@ -145,8 +156,11 @@ import android.view.SurfaceView;
*/
public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private final static boolean LOG_THREADS = false;
+ private final static boolean LOG_PAUSE_RESUME = false;
private final static boolean LOG_SURFACE = false;
private final static boolean LOG_RENDERER = false;
+ private final static boolean LOG_RENDERER_DRAW_FRAME = false;
+ private final static boolean LOG_EGL = false;
// Work-around for bug 2263168
private final static boolean DRAW_TWICE_AFTER_SIZE_CHANGED = true;
/**
@@ -155,6 +169,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
*
* @see #getRenderMode()
* @see #setRenderMode(int)
+ * @see #requestRender()
*/
public final static int RENDERMODE_WHEN_DIRTY = 0;
/**
@@ -163,7 +178,6 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
*
* @see #getRenderMode()
* @see #setRenderMode(int)
- * @see #requestRender()
*/
public final static int RENDERMODE_CONTINUOUSLY = 1;
@@ -208,6 +222,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
// underlying surface is created and destroyed
SurfaceHolder holder = getHolder();
holder.addCallback(this);
+ holder.setFormat(PixelFormat.RGB_565);
+ // setType is not needed for SDK 2.0 or newer. Uncomment this
+ // statement if back-porting this code to older SDKs.
+ // holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
}
/**
@@ -325,8 +343,9 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* is called.
* <p>
* If no setEGLConfigChooser method is called, then by default the
- * view will choose a config as close to 16-bit RGB as possible, with
- * a depth buffer as close to 16 bits as possible.
+ * view will choose an EGLConfig that is compatible with the current
+ * android.view.Surface, with a depth buffer depth of
+ * at least 16 bits.
* @param configChooser
*/
public void setEGLConfigChooser(EGLConfigChooser configChooser) {
@@ -342,9 +361,9 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* called, it must be called before {@link #setRenderer(Renderer)}
* is called.
* <p>
- * If no setEGLConfigChooser method is called, then by default the
- * view will choose a config as close to 16-bit RGB as possible, with
- * a depth buffer as close to 16 bits as possible.
+ * If no setEGLConfigChooser method is called, then by default the
+ * view will choose an RGB_565 surface with a depth buffer depth of
+ * at least 16 bits.
*
* @param needDepth
*/
@@ -354,15 +373,15 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
/**
* Install a config chooser which will choose a config
- * with at least the specified component sizes, and as close
- * to the specified component sizes as possible.
+ * with at least the specified depthSize and stencilSize,
+ * and exactly the specified redSize, greenSize, blueSize and alphaSize.
* <p>If this method is
* called, it must be called before {@link #setRenderer(Renderer)}
* is called.
* <p>
* If no setEGLConfigChooser method is called, then by default the
- * view will choose a config as close to 16-bit RGB as possible, with
- * a depth buffer as close to 16 bits as possible.
+ * view will choose an RGB_565 surface with a depth buffer depth of
+ * at least 16 bits.
*
*/
public void setEGLConfigChooser(int redSize, int greenSize, int blueSize,
@@ -370,6 +389,38 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
setEGLConfigChooser(new ComponentSizeChooser(redSize, greenSize,
blueSize, alphaSize, depthSize, stencilSize));
}
+
+ /**
+ * Inform the default EGLContextFactory and default EGLConfigChooser
+ * which EGLContext client version to pick.
+ * <p>Use this method to create an OpenGL ES 2.0-compatible context.
+ * Example:
+ * <pre class="prettyprint">
+ * public MyView(Context context) {
+ * super(context);
+ * setEGLContextClientVersion(2); // Pick an OpenGL ES 2.0 context.
+ * setRenderer(new MyRenderer());
+ * }
+ * </pre>
+ * <p>Note: Activities which require OpenGL ES 2.0 should indicate this by
+ * setting @lt;uses-feature android:glEsVersion="0x00020000" /> in the activity's
+ * AndroidManifest.xml file.
+ * <p>If this method is called, it must be called before {@link #setRenderer(Renderer)}
+ * is called.
+ * <p>This method only affects the behavior of the default EGLContexFactory and the
+ * default EGLConfigChooser. If
+ * {@link #setEGLContextFactory(EGLContextFactory)} has been called, then the supplied
+ * EGLContextFactory is responsible for creating an OpenGL ES 2.0-compatible context.
+ * If
+ * {@link #setEGLConfigChooser(EGLConfigChooser)} has been called, then the supplied
+ * EGLConfigChooser is responsible for choosing an OpenGL ES 2.0-compatible config.
+ * @param version The EGLContext client version to choose. Use 2 for OpenGL ES 2.0
+ */
+ public void setEGLContextClientVersion(int version) {
+ checkRenderThreadState();
+ mEGLContextClientVersion = version;
+ }
+
/**
* Set the rendering mode. When renderMode is
* RENDERMODE_CONTINUOUSLY, the renderer is called
@@ -545,7 +596,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* Called when the surface is created or recreated.
* <p>
* Called when the rendering thread
- * starts and whenever the EGL context is lost. The context will typically
+ * starts and whenever the EGL context is lost. The EGL context will typically
* be lost when the Android device awakes after going to sleep.
* <p>
* Since this method is called at the beginning of rendering, as well as
@@ -621,15 +672,27 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context);
}
- private static class DefaultContextFactory implements EGLContextFactory {
+ private class DefaultContextFactory implements EGLContextFactory {
+ private int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig config) {
- return egl.eglCreateContext(display, config, EGL10.EGL_NO_CONTEXT, null);
+ int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, mEGLContextClientVersion,
+ EGL10.EGL_NONE };
+
+ return egl.eglCreateContext(display, config, EGL10.EGL_NO_CONTEXT,
+ mEGLContextClientVersion != 0 ? attrib_list : null);
}
public void destroyContext(EGL10 egl, EGLDisplay display,
EGLContext context) {
- egl.eglDestroyContext(display, context);
+ if (!egl.eglDestroyContext(display, context)) {
+ Log.e("DefaultContextFactory", "display:" + display + " context: " + context);
+ if (LOG_THREADS) {
+ Log.i("DefaultContextFactory", "tid=" + Thread.currentThread().getId());
+ }
+ throw new RuntimeException("eglDestroyContext failed: "
+ + EGLLogWrapper.getErrorString(egl.eglGetError()));
+ }
}
}
@@ -678,14 +741,18 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
EGLConfig chooseConfig(EGL10 egl, EGLDisplay display);
}
- private static abstract class BaseConfigChooser
+ private abstract class BaseConfigChooser
implements EGLConfigChooser {
public BaseConfigChooser(int[] configSpec) {
- mConfigSpec = configSpec;
+ mConfigSpec = filterConfigSpec(configSpec);
}
+
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
int[] num_config = new int[1];
- egl.eglChooseConfig(display, mConfigSpec, null, 0, num_config);
+ if (!egl.eglChooseConfig(display, mConfigSpec, null, 0,
+ num_config)) {
+ throw new IllegalArgumentException("eglChooseConfig failed");
+ }
int numConfigs = num_config[0];
@@ -695,8 +762,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
EGLConfig[] configs = new EGLConfig[numConfigs];
- egl.eglChooseConfig(display, mConfigSpec, configs, numConfigs,
- num_config);
+ if (!egl.eglChooseConfig(display, mConfigSpec, configs, numConfigs,
+ num_config)) {
+ throw new IllegalArgumentException("eglChooseConfig#2 failed");
+ }
EGLConfig config = chooseConfig(egl, display, configs);
if (config == null) {
throw new IllegalArgumentException("No config chosen");
@@ -708,9 +777,29 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
EGLConfig[] configs);
protected int[] mConfigSpec;
+
+ private int[] filterConfigSpec(int[] configSpec) {
+ if (mEGLContextClientVersion != 2) {
+ return configSpec;
+ }
+ /* We know none of the subclasses define EGL_RENDERABLE_TYPE.
+ * And we know the configSpec is well formed.
+ */
+ int len = configSpec.length;
+ int[] newConfigSpec = new int[len + 2];
+ System.arraycopy(configSpec, 0, newConfigSpec, 0, len-1);
+ newConfigSpec[len-1] = EGL10.EGL_RENDERABLE_TYPE;
+ newConfigSpec[len] = 4; /* EGL_OPENGL_ES2_BIT */
+ newConfigSpec[len+1] = EGL10.EGL_NONE;
+ return newConfigSpec;
+ }
}
- private static class ComponentSizeChooser extends BaseConfigChooser {
+ /**
+ * Choose a configuration with exactly the specified r,g,b,a sizes,
+ * and at least the specified depth and stencil sizes.
+ */
+ private class ComponentSizeChooser extends BaseConfigChooser {
public ComponentSizeChooser(int redSize, int greenSize, int blueSize,
int alphaSize, int depthSize, int stencilSize) {
super(new int[] {
@@ -733,14 +822,12 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
@Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display,
EGLConfig[] configs) {
- EGLConfig closestConfig = null;
- int closestDistance = 1000;
- for(EGLConfig config : configs) {
+ for (EGLConfig config : configs) {
int d = findConfigAttrib(egl, display, config,
EGL10.EGL_DEPTH_SIZE, 0);
int s = findConfigAttrib(egl, display, config,
EGL10.EGL_STENCIL_SIZE, 0);
- if (d >= mDepthSize && s>= mStencilSize) {
+ if ((d >= mDepthSize) && (s >= mStencilSize)) {
int r = findConfigAttrib(egl, display, config,
EGL10.EGL_RED_SIZE, 0);
int g = findConfigAttrib(egl, display, config,
@@ -749,17 +836,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
EGL10.EGL_BLUE_SIZE, 0);
int a = findConfigAttrib(egl, display, config,
EGL10.EGL_ALPHA_SIZE, 0);
- int distance = Math.abs(r - mRedSize)
- + Math.abs(g - mGreenSize)
- + Math.abs(b - mBlueSize)
- + Math.abs(a - mAlphaSize);
- if (distance < closestDistance) {
- closestDistance = distance;
- closestConfig = config;
+ if ((r == mRedSize) && (g == mGreenSize)
+ && (b == mBlueSize) && (a == mAlphaSize)) {
+ return config;
}
}
}
- return closestConfig;
+ return null;
}
private int findConfigAttrib(EGL10 egl, EGLDisplay display,
@@ -782,18 +865,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
/**
- * This class will choose a supported surface as close to
- * RGB565 as possible, with or without a depth buffer.
+ * This class will choose a RGB_565 surface with
+ * or without a depth buffer.
*
*/
- private static class SimpleEGLConfigChooser extends ComponentSizeChooser {
+ private class SimpleEGLConfigChooser extends ComponentSizeChooser {
public SimpleEGLConfigChooser(boolean withDepthBuffer) {
- super(4, 4, 4, 0, withDepthBuffer ? 16 : 0, 0);
- // Adjust target values. This way we'll accept a 4444 or
- // 555 buffer if there's no 565 buffer available.
- mRedSize = 5;
- mGreenSize = 6;
- mBlueSize = 5;
+ super(5, 6, 5, 0, withDepthBuffer ? 16 : 0, 0);
}
}
@@ -810,7 +888,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* Initialize EGL for a given configuration spec.
* @param configSpec
*/
- public void start(){
+ public void start() {
+ if (LOG_EGL) {
+ Log.w("EglHelper", "start() tid=" + Thread.currentThread().getId());
+ }
/*
* Get an EGL instance
*/
@@ -821,20 +902,30 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
*/
mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
+ if (mEglDisplay == EGL10.EGL_NO_DISPLAY) {
+ throw new RuntimeException("eglGetDisplay failed");
+ }
+
/*
* We can now initialize EGL for that display
*/
int[] version = new int[2];
- mEgl.eglInitialize(mEglDisplay, version);
+ if(!mEgl.eglInitialize(mEglDisplay, version)) {
+ throw new RuntimeException("eglInitialize failed");
+ }
mEglConfig = mEGLConfigChooser.chooseConfig(mEgl, mEglDisplay);
/*
- * Create an OpenGL ES context. This must be done only once, an
- * OpenGL context is a somewhat heavy object.
+ * Create an EGL context. We want to do this as rarely as we can, because an
+ * EGL context is a somewhat heavy object.
*/
mEglContext = mEGLContextFactory.createContext(mEgl, mEglDisplay, mEglConfig);
if (mEglContext == null || mEglContext == EGL10.EGL_NO_CONTEXT) {
- throw new RuntimeException("createContext failed");
+ mEglContext = null;
+ throwEglException("createContext");
+ }
+ if (LOG_EGL) {
+ Log.w("EglHelper", "createContext " + mEglContext + " tid=" + Thread.currentThread().getId());
}
mEglSurface = null;
@@ -845,6 +936,21 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* OpenGL interface that renders to that surface.
*/
public GL createSurface(SurfaceHolder holder) {
+ if (LOG_EGL) {
+ Log.w("EglHelper", "createSurface() tid=" + Thread.currentThread().getId());
+ }
+ /*
+ * Check preconditions.
+ */
+ if (mEgl == null) {
+ throw new RuntimeException("egl not initialized");
+ }
+ if (mEglDisplay == null) {
+ throw new RuntimeException("eglDisplay not initialized");
+ }
+ if (mEglConfig == null) {
+ throw new RuntimeException("mEglConfig not initialized");
+ }
/*
* The window size has changed, so we need to create a new
* surface.
@@ -867,7 +973,12 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
mEglDisplay, mEglConfig, holder);
if (mEglSurface == null || mEglSurface == EGL10.EGL_NO_SURFACE) {
- throwEglException("createWindowSurface");
+ int error = mEgl.eglGetError();
+ if (error == EGL10.EGL_BAD_NATIVE_WINDOW) {
+ Log.e("EglHelper", "createWindowSurface returned EGL_BAD_NATIVE_WINDOW.");
+ return null;
+ }
+ throwEglException("createWindowSurface", error);
}
/*
@@ -902,18 +1013,35 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* @return false if the context has been lost.
*/
public boolean swap() {
- mEgl.eglSwapBuffers(mEglDisplay, mEglSurface);
+ if (! mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) {
- /*
- * Always check for EGL_CONTEXT_LOST, which means the context
- * and all associated data were lost (For instance because
- * the device went to sleep). We need to sleep until we
- * get a new surface.
- */
- return mEgl.eglGetError() != EGL11.EGL_CONTEXT_LOST;
+ /*
+ * Check for EGL_CONTEXT_LOST, which means the context
+ * and all associated data were lost (For instance because
+ * the device went to sleep). We need to sleep until we
+ * get a new surface.
+ */
+ int error = mEgl.eglGetError();
+ switch(error) {
+ case EGL11.EGL_CONTEXT_LOST:
+ return false;
+ case EGL10.EGL_BAD_NATIVE_WINDOW:
+ // The native window is bad, probably because the
+ // window manager has closed it. Ignore this error,
+ // on the expectation that the application will be closed soon.
+ Log.e("EglHelper", "eglSwapBuffers returned EGL_BAD_NATIVE_WINDOW. tid=" + Thread.currentThread().getId());
+ break;
+ default:
+ throwEglException("eglSwapBuffers", error);
+ }
+ }
+ return true;
}
public void destroySurface() {
+ if (LOG_EGL) {
+ Log.w("EglHelper", "destroySurface() tid=" + Thread.currentThread().getId());
+ }
if (mEglSurface != null && mEglSurface != EGL10.EGL_NO_SURFACE) {
mEgl.eglMakeCurrent(mEglDisplay, EGL10.EGL_NO_SURFACE,
EGL10.EGL_NO_SURFACE,
@@ -924,6 +1052,9 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
public void finish() {
+ if (LOG_EGL) {
+ Log.w("EglHelper", "finish() tid=" + Thread.currentThread().getId());
+ }
if (mEglContext != null) {
mEGLContextFactory.destroyContext(mEgl, mEglDisplay, mEglContext);
mEglContext = null;
@@ -935,7 +1066,15 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
private void throwEglException(String function) {
- throw new RuntimeException(function + " failed: " + mEgl.eglGetError());
+ throwEglException(function, mEgl.eglGetError());
+ }
+
+ private void throwEglException(String function, int error) {
+ String message = function + " failed: " + EGLLogWrapper.getErrorString(error);
+ if (LOG_THREADS) {
+ Log.e("EglHelper", "throwEglException tid=" + Thread.currentThread().getId() + " " + message);
+ }
+ throw new RuntimeException(message);
}
EGL10 mEgl;
@@ -943,6 +1082,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
EGLSurface mEglSurface;
EGLConfig mEglConfig;
EGLContext mEglContext;
+
}
/**
@@ -964,6 +1104,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
mRenderer = renderer;
}
+
@Override
public void run() {
setName("GLThread " + getId());
@@ -984,20 +1125,33 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
* This private method should only be called inside a
* synchronized(sGLThreadManager) block.
*/
- private void stopEglLocked() {
- if (mHaveEgl) {
- mHaveEgl = false;
+ private void stopEglSurfaceLocked() {
+ if (mHaveEglSurface) {
+ mHaveEglSurface = false;
mEglHelper.destroySurface();
- mEglHelper.finish();
- sGLThreadManager.releaseEglSurfaceLocked(this);
}
}
+ /*
+ * This private method should only be called inside a
+ * synchronized(sGLThreadManager) block.
+ */
+ private void stopEglContextLocked() {
+ if (mHaveEglContext) {
+ mEglHelper.finish();
+ mHaveEglContext = false;
+ sGLThreadManager.releaseEglContextLocked(this);
+ }
+ }
private void guardedRun() throws InterruptedException {
mEglHelper = new EglHelper();
+ mHaveEglContext = false;
+ mHaveEglSurface = false;
try {
GL10 gl = null;
+ boolean createEglContext = false;
boolean createEglSurface = false;
+ boolean lostEglContext = false;
boolean sizeChanged = false;
boolean wantRenderNotification = false;
boolean doRenderNotification = false;
@@ -1017,12 +1171,40 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
break;
}
+ // Update the pause state.
+ if (mPaused != mRequestPaused) {
+ mPaused = mRequestPaused;
+ sGLThreadManager.notifyAll();
+ if (LOG_PAUSE_RESUME) {
+ Log.i("GLThread", "mPaused is now " + mPaused + " tid=" + getId());
+ }
+ }
+
+ // Have we lost the EGL context?
+ if (lostEglContext) {
+ stopEglSurfaceLocked();
+ stopEglContextLocked();
+ lostEglContext = false;
+ }
+
// Do we need to release the EGL surface?
- if (mHaveEgl && mPaused) {
+ if (mHaveEglSurface && mPaused) {
if (LOG_SURFACE) {
Log.i("GLThread", "releasing EGL surface because paused tid=" + getId());
}
- stopEglLocked();
+ stopEglSurfaceLocked();
+ if (sGLThreadManager.shouldReleaseEGLContextWhenPausing()) {
+ stopEglContextLocked();
+ if (LOG_SURFACE) {
+ Log.i("GLThread", "releasing EGL context because paused tid=" + getId());
+ }
+ }
+ if (sGLThreadManager.shouldTerminateEGLWhenPausing()) {
+ mEglHelper.finish();
+ if (LOG_SURFACE) {
+ Log.i("GLThread", "terminating EGL because paused tid=" + getId());
+ }
+ }
}
// Have we lost the surface view surface?
@@ -1030,8 +1212,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
if (LOG_SURFACE) {
Log.i("GLThread", "noticed surfaceView surface lost tid=" + getId());
}
- if (mHaveEgl) {
- stopEglLocked();
+ if (mHaveEglSurface) {
+ stopEglSurfaceLocked();
}
mWaitingForSurface = true;
sGLThreadManager.notifyAll();
@@ -1058,16 +1240,27 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
&& (mWidth > 0) && (mHeight > 0)
&& (mRequestRender || (mRenderMode == RENDERMODE_CONTINUOUSLY))) {
- // If we don't have an egl surface, try to acquire one.
- if ((! mHaveEgl) && sGLThreadManager.tryAcquireEglSurfaceLocked(this)) {
- mHaveEgl = true;
- mEglHelper.start();
+ // If we don't have an EGL context, try to acquire one.
+ if ((! mHaveEglContext) && sGLThreadManager.tryAcquireEglContextLocked(this)) {
+ try {
+ mEglHelper.start();
+ } catch (RuntimeException t) {
+ sGLThreadManager.releaseEglContextLocked(this);
+ throw t;
+ }
+ mHaveEglContext = true;
+ createEglContext = true;
+
+ sGLThreadManager.notifyAll();
+ }
+
+ if (mHaveEglContext && !mHaveEglSurface) {
+ mHaveEglSurface = true;
createEglSurface = true;
sizeChanged = true;
- sGLThreadManager.notifyAll();
}
- if (mHaveEgl) {
+ if (mHaveEglSurface) {
if (mSizeChanged) {
sizeChanged = true;
w = mWidth;
@@ -1105,12 +1298,24 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
if (createEglSurface) {
+ if (LOG_SURFACE) {
+ Log.w("GLThread", "egl createSurface");
+ }
gl = (GL10) mEglHelper.createSurface(getHolder());
+ if (gl == null) {
+ // Couldn't create a surface. Quit quietly.
+ break;
+ }
+ sGLThreadManager.checkGLDriver(gl);
+ createEglSurface = false;
+ }
+
+ if (createEglContext) {
if (LOG_RENDERER) {
Log.w("GLThread", "onSurfaceCreated");
}
mRenderer.onSurfaceCreated(gl, mEglHelper.mEglConfig);
- createEglSurface = false;
+ createEglContext = false;
}
if (sizeChanged) {
@@ -1121,26 +1326,29 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
sizeChanged = false;
}
- if (LOG_RENDERER) {
+ if (LOG_RENDERER_DRAW_FRAME) {
Log.w("GLThread", "onDrawFrame");
}
mRenderer.onDrawFrame(gl);
- if(!mEglHelper.swap()) {
+ if (!mEglHelper.swap()) {
if (LOG_SURFACE) {
- Log.i("GLThread", "egl surface lost tid=" + getId());
+ Log.i("GLThread", "egl context lost tid=" + getId());
}
+ lostEglContext = true;
}
if (wantRenderNotification) {
doRenderNotification = true;
}
}
+
} finally {
/*
* clean-up everything...
*/
synchronized (sGLThreadManager) {
- stopEglLocked();
+ stopEglSurfaceLocked();
+ stopEglContextLocked();
}
}
}
@@ -1175,6 +1383,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
mHasSurface = true;
sGLThreadManager.notifyAll();
+ while((mWaitingForSurface) && (!mExited)) {
+ try {
+ sGLThreadManager.wait();
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
}
}
@@ -1197,16 +1412,43 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
public void onPause() {
synchronized (sGLThreadManager) {
- mPaused = true;
+ if (LOG_PAUSE_RESUME) {
+ Log.i("GLThread", "onPause tid=" + getId());
+ }
+ mRequestPaused = true;
sGLThreadManager.notifyAll();
+ while ((! mExited) && (! mPaused)) {
+ if (LOG_PAUSE_RESUME) {
+ Log.i("Main thread", "onPause waiting for mPaused.");
+ }
+ try {
+ sGLThreadManager.wait();
+ } catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ }
+ }
}
}
public void onResume() {
synchronized (sGLThreadManager) {
- mPaused = false;
+ if (LOG_PAUSE_RESUME) {
+ Log.i("GLThread", "onResume tid=" + getId());
+ }
+ mRequestPaused = false;
mRequestRender = true;
+ mRenderComplete = false;
sGLThreadManager.notifyAll();
+ while ((! mExited) && mPaused && (!mRenderComplete)) {
+ if (LOG_PAUSE_RESUME) {
+ Log.i("Main thread", "onResume waiting for !mPaused.");
+ }
+ try {
+ sGLThreadManager.wait();
+ } catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ }
+ }
}
}
@@ -1267,16 +1509,19 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
// variables are protected by the sGLThreadManager monitor
private boolean mShouldExit;
private boolean mExited;
+ private boolean mRequestPaused;
private boolean mPaused;
private boolean mHasSurface;
private boolean mWaitingForSurface;
- private boolean mHaveEgl;
+ private boolean mHaveEglContext;
+ private boolean mHaveEglSurface;
private int mWidth;
private int mHeight;
private int mRenderMode;
private boolean mRequestRender;
private boolean mRenderComplete;
private ArrayList<Runnable> mEventQueue = new ArrayList<Runnable>();
+
// End of member variables protected by the sGLThreadManager monitor.
private Renderer mRenderer;
@@ -1324,6 +1569,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
}
private static class GLThreadManager {
+ private static String TAG = "GLThreadManager";
public synchronized void threadExiting(GLThread thread) {
if (LOG_THREADS) {
@@ -1338,29 +1584,87 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
/*
* Tries once to acquire the right to use an EGL
- * surface. Does not block. Requires that we are already
+ * context. Does not block. Requires that we are already
* in the sGLThreadManager monitor when this is called.
- * @return true if the right to use an EGL surface was acquired.
+ *
+ * @return true if the right to use an EGL context was acquired.
*/
- public boolean tryAcquireEglSurfaceLocked(GLThread thread) {
+ public boolean tryAcquireEglContextLocked(GLThread thread) {
if (mEglOwner == thread || mEglOwner == null) {
mEglOwner = thread;
notifyAll();
return true;
}
+ checkGLESVersion();
+ if (mMultipleGLESContextsAllowed) {
+ return true;
+ }
return false;
}
+
/*
- * Releases the EGL surface. Requires that we are already in the
+ * Releases the EGL context. Requires that we are already in the
* sGLThreadManager monitor when this is called.
*/
- public void releaseEglSurfaceLocked(GLThread thread) {
+ public void releaseEglContextLocked(GLThread thread) {
if (mEglOwner == thread) {
mEglOwner = null;
}
notifyAll();
}
+ public synchronized boolean shouldReleaseEGLContextWhenPausing() {
+ // Release the EGL context when pausing even if
+ // the hardware supports multiple EGL contexts.
+ // Otherwise the device could run out of EGL contexts.
+ return true;
+ }
+
+ public synchronized boolean shouldTerminateEGLWhenPausing() {
+ checkGLESVersion();
+ return !mMultipleGLESContextsAllowed;
+ }
+
+ public synchronized void checkGLDriver(GL10 gl) {
+ if (! mGLESDriverCheckComplete) {
+ checkGLESVersion();
+ if (mGLESVersion < kGLES_20) {
+ String renderer = gl.glGetString(GL10.GL_RENDERER);
+ mMultipleGLESContextsAllowed =
+ ! renderer.startsWith(kMSM7K_RENDERER_PREFIX);
+ if (LOG_SURFACE) {
+ Log.w(TAG, "checkGLDriver renderer = \"" + renderer + "\" multipleContextsAllowed = "
+ + mMultipleGLESContextsAllowed);
+ }
+ notifyAll();
+ }
+ mGLESDriverCheckComplete = true;
+ }
+ }
+
+ private void checkGLESVersion() {
+ if (! mGLESVersionCheckComplete) {
+ mGLESVersion = SystemProperties.getInt(
+ "ro.opengles.version",
+ ConfigurationInfo.GL_ES_VERSION_UNDEFINED);
+ if (mGLESVersion >= kGLES_20) {
+ mMultipleGLESContextsAllowed = true;
+ }
+ if (LOG_SURFACE) {
+ Log.w(TAG, "checkGLESVersion mGLESVersion =" +
+ " " + mGLESVersion + " mMultipleGLESContextsAllowed = " + mMultipleGLESContextsAllowed);
+ }
+ mGLESVersionCheckComplete = true;
+ }
+ }
+
+ private boolean mGLESVersionCheckComplete;
+ private int mGLESVersion;
+ private boolean mGLESDriverCheckComplete;
+ private boolean mMultipleGLESContextsAllowed;
+ private static final int kGLES_20 = 0x20000;
+ private static final String kMSM7K_RENDERER_PREFIX =
+ "Q3Dimension MSM7500 ";
private GLThread mEglOwner;
}
@@ -1373,4 +1677,5 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
private EGLWindowSurfaceFactory mEGLWindowSurfaceFactory;
private GLWrapper mGLWrapper;
private int mDebugFlags;
+ private int mEGLContextClientVersion;
}
diff --git a/opengl/java/android/opengl/GLU.java b/opengl/java/android/opengl/GLU.java
index 49a43d0..ed64556 100644
--- a/opengl/java/android/opengl/GLU.java
+++ b/opengl/java/android/opengl/GLU.java
@@ -72,60 +72,12 @@ public class GLU {
float centerX, float centerY, float centerZ, float upX, float upY,
float upZ) {
- // See the OpenGL GLUT documentation for gluLookAt for a description
- // of the algorithm. We implement it in a straightforward way:
-
- float fx = centerX - eyeX;
- float fy = centerY - eyeY;
- float fz = centerZ - eyeZ;
-
- // Normalize f
- float rlf = 1.0f / Matrix.length(fx, fy, fz);
- fx *= rlf;
- fy *= rlf;
- fz *= rlf;
-
- // compute s = f x up (x means "cross product")
- float sx = fy * upZ - fz * upY;
- float sy = fz * upX - fx * upZ;
- float sz = fx * upY - fy * upX;
-
- // and normalize s
- float rls = 1.0f / Matrix.length(sx, sy, sz);
- sx *= rls;
- sy *= rls;
- sz *= rls;
-
- // compute u = s x f
- float ux = sy * fz - sz * fy;
- float uy = sz * fx - sx * fz;
- float uz = sx * fy - sy * fx;
-
float[] scratch = sScratch;
synchronized(scratch) {
- scratch[0] = sx;
- scratch[1] = ux;
- scratch[2] = -fx;
- scratch[3] = 0.0f;
-
- scratch[4] = sy;
- scratch[5] = uy;
- scratch[6] = -fy;
- scratch[7] = 0.0f;
-
- scratch[8] = sz;
- scratch[9] = uz;
- scratch[10] = -fz;
- scratch[11] = 0.0f;
-
- scratch[12] = 0.0f;
- scratch[13] = 0.0f;
- scratch[14] = 0.0f;
- scratch[15] = 1.0f;
-
+ Matrix.setLookAtM(scratch, 0, eyeX, eyeY, eyeZ, centerX, centerY, centerZ,
+ upX, upY, upZ);
gl.glMultMatrixf(scratch, 0);
}
- gl.glTranslatef(-eyeX, -eyeY, -eyeZ);
}
/**
diff --git a/opengl/java/android/opengl/GLWrapperBase.java b/opengl/java/android/opengl/GLWrapperBase.java
index 067f95f..b0f83f7 100644
--- a/opengl/java/android/opengl/GLWrapperBase.java
+++ b/opengl/java/android/opengl/GLWrapperBase.java
@@ -16,9 +16,6 @@
package android.opengl;
-import java.nio.Buffer;
-import java.nio.FloatBuffer;
-import java.nio.IntBuffer;
import javax.microedition.khronos.opengles.GL;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.opengles.GL10Ext;
@@ -32,464 +29,25 @@ import javax.microedition.khronos.opengles.GL11ExtensionPack;
*/
abstract class GLWrapperBase
implements GL, GL10, GL10Ext, GL11, GL11Ext {
- public GLWrapperBase(GL gl) {
- mgl = (GL10) gl;
- if (gl instanceof GL10Ext) {
- mgl10Ext = (GL10Ext) gl;
- }
- if (gl instanceof GL11) {
- mgl11 = (GL11) gl;
- }
- if (gl instanceof GL11Ext) {
- mgl11Ext = (GL11Ext) gl;
- }
- if (gl instanceof GL11ExtensionPack) {
- mgl11ExtensionPack = (GL11ExtensionPack) gl;
- }
- }
-
- protected GL10 mgl;
- protected GL10Ext mgl10Ext;
- protected GL11 mgl11;
- protected GL11Ext mgl11Ext;
- protected GL11ExtensionPack mgl11ExtensionPack;
-
- // Unsupported GL11 methods
-
- public void glGetPointerv(int pname, java.nio.Buffer[] params) {
- throw new UnsupportedOperationException();
- }
-
- // VBO versions of *Pointer and *Elements methods
- public void glColorPointer(int size, int type, int stride, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glNormalPointer(int type, int stride, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexCoordPointer(int size, int type, int stride, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glVertexPointer(int size, int type, int stride, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glDrawElements(int mode, int count, int type, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glBindBuffer(int target, int buffer) {
- throw new UnsupportedOperationException();
- }
-
- public void glBufferData(int target, int size, Buffer data, int usage) {
- throw new UnsupportedOperationException();
- }
-
- public void glBufferSubData(int target, int offset, int size, Buffer data) {
- throw new UnsupportedOperationException();
- }
-
- public void glColor4ub(byte red, byte green, byte blue, byte alpha) {
- throw new UnsupportedOperationException();
- }
-
- public void glDeleteBuffers(int n, int[] buffers, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glDeleteBuffers(int n, IntBuffer buffers) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenBuffers(int n, int[] buffers, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenBuffers(int n, IntBuffer buffers) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetBooleanv(int pname, boolean[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetBooleanv(int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetBufferParameteriv(int target, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetBufferParameteriv(int target, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetClipPlanef(int pname, float[] eqn, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetClipPlanef(int pname, FloatBuffer eqn) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetClipPlanex(int pname, int[] eqn, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetClipPlanex(int pname, IntBuffer eqn) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetFixedv(int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetFixedv(int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetFloatv(int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetFloatv(int pname, FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetLightfv(int light, int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetLightfv(int light, int pname, FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetLightxv(int light, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetLightxv(int light, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetMaterialfv(int face, int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetMaterialfv(int face, int pname, FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetMaterialxv(int face, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetMaterialxv(int face, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexEnviv(int env, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexEnviv(int env, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexEnvxv(int env, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexEnvxv(int env, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexParameterfv(int target, int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexParameterfv(int target, int pname, FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexParameteriv(int target, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexParameteriv(int target, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexParameterxv(int target, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexParameterxv(int target, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public boolean glIsBuffer(int buffer) {
- throw new UnsupportedOperationException();
- }
-
- public boolean glIsEnabled(int cap) {
- throw new UnsupportedOperationException();
- }
-
- public boolean glIsTexture(int texture) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointParameterf(int pname, float param) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointParameterfv(int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointParameterfv(int pname, FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointParameterx(int pname, int param) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointParameterxv(int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointParameterxv(int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glPointSizePointerOES(int type, int stride, Buffer pointer) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexEnvi(int target, int pname, int param) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexEnviv(int target, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexEnviv(int target, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexParameterfv(int target, int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexParameterfv(int target, int pname, FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexParameteri(int target, int pname, int param) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexParameterxv(int target, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexParameterxv(int target, int pname, IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- // Unsupported GL11Ext methods
-
- public void glCurrentPaletteMatrixOES(int matrixpaletteindex) {
- throw new UnsupportedOperationException();
- }
-
- public void glLoadPaletteFromModelViewMatrixOES() {
- throw new UnsupportedOperationException();
- }
-
- public void glMatrixIndexPointerOES(int size, int type, int stride, Buffer pointer) {
- throw new UnsupportedOperationException();
- }
-
- public void glMatrixIndexPointerOES(int size, int type, int stride, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glWeightPointerOES(int size, int type, int stride, Buffer pointer) {
- throw new UnsupportedOperationException();
- }
-
- public void glWeightPointerOES(int size, int type, int stride, int offset) {
- throw new UnsupportedOperationException();
- }
-
- // Unsupported GL11ExtensionPack methods
-
- public void glBindFramebufferOES(int target, int framebuffer) {
- throw new UnsupportedOperationException();
- }
-
- public void glBindRenderbufferOES(int target, int renderbuffer) {
- throw new UnsupportedOperationException();
- }
-
- public void glBlendEquation(int mode) {
- throw new UnsupportedOperationException();
- }
-
- public void glBlendEquationSeparate(int modeRGB, int modeAlpha) {
- throw new UnsupportedOperationException();
- }
-
- public void glBlendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) {
- throw new UnsupportedOperationException();
- }
-
- int glCheckFramebufferStatusOES(int target) {
- throw new UnsupportedOperationException();
- }
-
- public void glCompressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, int imageSize) {
- throw new UnsupportedOperationException();
- }
-
- public void glDeleteFramebuffersOES(int n, int[] framebuffers, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glDeleteFramebuffersOES(int n, java.nio.IntBuffer framebuffers) {
- throw new UnsupportedOperationException();
- }
-
- public void glDeleteRenderbuffersOES(int n, int[] renderbuffers, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glDeleteRenderbuffersOES(int n, java.nio.IntBuffer renderbuffers) {
- throw new UnsupportedOperationException();
- }
-
- public void glFramebufferRenderbufferOES(int target, int attachment, int renderbuffertarget, int renderbuffer) {
- throw new UnsupportedOperationException();
- }
-
- public void glFramebufferTexture2DOES(int target, int attachment, int textarget, int texture, int level) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenerateMipmapOES(int target) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenFramebuffersOES(int n, int[] framebuffers, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenFramebuffersOES(int n, java.nio.IntBuffer framebuffers) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenRenderbuffersOES(int n, int[] renderbuffers, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGenRenderbuffersOES(int n, java.nio.IntBuffer renderbuffers) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetFramebufferAttachmentParameterivOES(int target, int attachment, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetFramebufferAttachmentParameterivOES(int target, int attachment, int pname, java.nio.IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetRenderbufferParameterivOES(int target, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetRenderbufferParameterivOES(int target, int pname, java.nio.IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexGenfv(int coord, int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexGenfv(int coord, int pname, java.nio.FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexGeniv(int coord, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexGeniv(int coord, int pname, java.nio.IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexGenxv(int coord, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glGetTexGenxv(int coord, int pname, java.nio.IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public boolean glIsFramebufferOES(int framebuffer) {
- throw new UnsupportedOperationException();
- }
-
- public boolean glIsRenderbufferOES(int renderbuffer) {
- throw new UnsupportedOperationException();
- }
-
- public void glRenderbufferStorageOES(int target, int internalformat, int width, int height) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGenf(int coord, int pname, float param) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGenfv(int coord, int pname, float[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGenfv(int coord, int pname, java.nio.FloatBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGeni(int coord, int pname, int param) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGeniv(int coord, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGeniv(int coord, int pname, java.nio.IntBuffer params) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGenx(int coord, int pname, int param) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGenxv(int coord, int pname, int[] params, int offset) {
- throw new UnsupportedOperationException();
- }
-
- public void glTexGenxv(int coord, int pname, java.nio.IntBuffer params) {
- throw new UnsupportedOperationException();
- }
+ public GLWrapperBase(GL gl) {
+ mgl = (GL10) gl;
+ if (gl instanceof GL10Ext) {
+ mgl10Ext = (GL10Ext) gl;
+ }
+ if (gl instanceof GL11) {
+ mgl11 = (GL11) gl;
+ }
+ if (gl instanceof GL11Ext) {
+ mgl11Ext = (GL11Ext) gl;
+ }
+ if (gl instanceof GL11ExtensionPack) {
+ mgl11ExtensionPack = (GL11ExtensionPack) gl;
+ }
+ }
+
+ protected GL10 mgl;
+ protected GL10Ext mgl10Ext;
+ protected GL11 mgl11;
+ protected GL11Ext mgl11Ext;
+ protected GL11ExtensionPack mgl11ExtensionPack;
}
diff --git a/opengl/java/android/opengl/Matrix.java b/opengl/java/android/opengl/Matrix.java
index 13ba36e..b9fd4ab 100644
--- a/opengl/java/android/opengl/Matrix.java
+++ b/opengl/java/android/opengl/Matrix.java
@@ -16,6 +16,8 @@
package android.opengl;
+import javax.microedition.khronos.opengles.GL10;
+
/**
* Matrix math utilities. These methods operate on OpenGL ES format
* matrices and vectors stored in float arrays.
@@ -582,4 +584,77 @@ public class Matrix {
rm[rmOffset + 14] = 0.0f;
rm[rmOffset + 15] = 1.0f;
}
+
+ /**
+ * Define a viewing transformation in terms of an eye point, a center of
+ * view, and an up vector.
+ *
+ * @param rm returns the result
+ * @param rmOffset index into rm where the result matrix starts
+ * @param eyeX eye point X
+ * @param eyeY eye point Y
+ * @param eyeZ eye point Z
+ * @param centerX center of view X
+ * @param centerY center of view Y
+ * @param centerZ center of view Z
+ * @param upX up vector X
+ * @param upY up vector Y
+ * @param upZ up vector Z
+ */
+ public static void setLookAtM(float[] rm, int rmOffset,
+ float eyeX, float eyeY, float eyeZ,
+ float centerX, float centerY, float centerZ, float upX, float upY,
+ float upZ) {
+
+ // See the OpenGL GLUT documentation for gluLookAt for a description
+ // of the algorithm. We implement it in a straightforward way:
+
+ float fx = centerX - eyeX;
+ float fy = centerY - eyeY;
+ float fz = centerZ - eyeZ;
+
+ // Normalize f
+ float rlf = 1.0f / Matrix.length(fx, fy, fz);
+ fx *= rlf;
+ fy *= rlf;
+ fz *= rlf;
+
+ // compute s = f x up (x means "cross product")
+ float sx = fy * upZ - fz * upY;
+ float sy = fz * upX - fx * upZ;
+ float sz = fx * upY - fy * upX;
+
+ // and normalize s
+ float rls = 1.0f / Matrix.length(sx, sy, sz);
+ sx *= rls;
+ sy *= rls;
+ sz *= rls;
+
+ // compute u = s x f
+ float ux = sy * fz - sz * fy;
+ float uy = sz * fx - sx * fz;
+ float uz = sx * fy - sy * fx;
+
+ rm[rmOffset + 0] = sx;
+ rm[rmOffset + 1] = ux;
+ rm[rmOffset + 2] = -fx;
+ rm[rmOffset + 3] = 0.0f;
+
+ rm[rmOffset + 4] = sy;
+ rm[rmOffset + 5] = uy;
+ rm[rmOffset + 6] = -fy;
+ rm[rmOffset + 7] = 0.0f;
+
+ rm[rmOffset + 8] = sz;
+ rm[rmOffset + 9] = uz;
+ rm[rmOffset + 10] = -fz;
+ rm[rmOffset + 11] = 0.0f;
+
+ rm[rmOffset + 12] = 0.0f;
+ rm[rmOffset + 13] = 0.0f;
+ rm[rmOffset + 14] = 0.0f;
+ rm[rmOffset + 15] = 1.0f;
+
+ translateM(rm, rmOffset, -eyeX, -eyeY, -eyeZ);
+ }
}
diff --git a/opengl/java/com/google/android/gles_jni/EGLImpl.java b/opengl/java/com/google/android/gles_jni/EGLImpl.java
index a667e8d..3e06ded 100644
--- a/opengl/java/com/google/android/gles_jni/EGLImpl.java
+++ b/opengl/java/com/google/android/gles_jni/EGLImpl.java
@@ -2,16 +2,16 @@
**
** Copyright 2006, 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
+** 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
+** 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
+** 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.
*/
@@ -30,11 +30,11 @@ public class EGLImpl implements EGL10 {
private EGLSurfaceImpl mSurface = new EGLSurfaceImpl(-1);
public native boolean eglInitialize(EGLDisplay display, int[] major_minor);
- public native boolean eglQueryContext(EGLDisplay display, EGLContext context, int attribute, int[] value);
+ public native boolean eglQueryContext(EGLDisplay display, EGLContext context, int attribute, int[] value);
public native boolean eglQuerySurface(EGLDisplay display, EGLSurface surface, int attribute, int[] value);
public native boolean eglChooseConfig(EGLDisplay display, int[] attrib_list, EGLConfig[] configs, int config_size, int[] num_config);
public native boolean eglGetConfigAttrib(EGLDisplay display, EGLConfig config, int attribute, int[] value);
- public native boolean eglGetConfigs(EGLDisplay display, EGLConfig[] configs, int config_size, int[] num_config);
+ public native boolean eglGetConfigs(EGLDisplay display, EGLConfig[] configs, int config_size, int[] num_config);
public native int eglGetError();
public native boolean eglDestroyContext(EGLDisplay display, EGLContext context);
public native boolean eglDestroySurface(EGLDisplay display, EGLSurface surface);
@@ -47,16 +47,27 @@ public class EGLImpl implements EGL10 {
public native boolean eglWaitNative(int engine, Object bindTarget);
public EGLContext eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list) {
- return new EGLContextImpl( _eglCreateContext(display, config, share_context, attrib_list) );
+ int eglContextId = _eglCreateContext(display, config, share_context, attrib_list);
+ if (eglContextId == 0) {
+ return EGL10.EGL_NO_CONTEXT;
+ }
+ return new EGLContextImpl( eglContextId );
}
public EGLSurface eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list) {
- return new EGLSurfaceImpl( _eglCreatePbufferSurface(display, config, attrib_list) );
+ int eglSurfaceId = _eglCreatePbufferSurface(display, config, attrib_list);
+ if (eglSurfaceId == 0) {
+ return EGL10.EGL_NO_SURFACE;
+ }
+ return new EGLSurfaceImpl( eglSurfaceId );
}
-
+
public EGLSurface eglCreatePixmapSurface(EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list) {
EGLSurfaceImpl sur = new EGLSurfaceImpl();
_eglCreatePixmapSurface(sur, display, config, native_pixmap, attrib_list);
+ if (sur.mEGLSurface == 0) {
+ return EGL10.EGL_NO_SURFACE;
+ }
return sur;
}
@@ -73,11 +84,18 @@ public class EGLImpl implements EGL10 {
"eglCreateWindowSurface() can only be called with an instance of " +
"SurfaceView or SurfaceHolder at the moment, this will be fixed later.");
}
- return new EGLSurfaceImpl( _eglCreateWindowSurface(display, config, sur, attrib_list) );
+ int eglSurfaceId = _eglCreateWindowSurface(display, config, sur, attrib_list);
+ if (eglSurfaceId == 0) {
+ return EGL10.EGL_NO_SURFACE;
+ }
+ return new EGLSurfaceImpl( eglSurfaceId );
}
-
+
public synchronized EGLDisplay eglGetDisplay(Object native_display) {
int value = _eglGetDisplay(native_display);
+ if (value == 0) {
+ return EGL10.EGL_NO_DISPLAY;
+ }
if (mDisplay.mEGLDisplay != value)
mDisplay = new EGLDisplayImpl(value);
return mDisplay;
@@ -85,13 +103,19 @@ public class EGLImpl implements EGL10 {
public synchronized EGLContext eglGetCurrentContext() {
int value = _eglGetCurrentContext();
+ if (value == 0) {
+ return EGL10.EGL_NO_CONTEXT;
+ }
if (mContext.mEGLContext != value)
mContext = new EGLContextImpl(value);
return mContext;
}
-
+
public synchronized EGLDisplay eglGetCurrentDisplay() {
int value = _eglGetCurrentDisplay();
+ if (value == 0) {
+ return EGL10.EGL_NO_DISPLAY;
+ }
if (mDisplay.mEGLDisplay != value)
mDisplay = new EGLDisplayImpl(value);
return mDisplay;
@@ -99,6 +123,9 @@ public class EGLImpl implements EGL10 {
public synchronized EGLSurface eglGetCurrentSurface(int readdraw) {
int value = _eglGetCurrentSurface(readdraw);
+ if (value == 0) {
+ return EGL10.EGL_NO_SURFACE;
+ }
if (mSurface.mEGLSurface != value)
mSurface = new EGLSurfaceImpl(value);
return mSurface;
@@ -107,7 +134,7 @@ public class EGLImpl implements EGL10 {
private native int _eglCreateContext(EGLDisplay display, EGLConfig config, EGLContext share_context, int[] attrib_list);
private native int _eglCreatePbufferSurface(EGLDisplay display, EGLConfig config, int[] attrib_list);
private native void _eglCreatePixmapSurface(EGLSurface sur, EGLDisplay display, EGLConfig config, Object native_pixmap, int[] attrib_list);
- private native int _eglCreateWindowSurface(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list);
+ private native int _eglCreateWindowSurface(EGLDisplay display, EGLConfig config, Object native_window, int[] attrib_list);
private native int _eglGetDisplay(Object native_display);
private native int _eglGetCurrentContext();
private native int _eglGetCurrentDisplay();
diff --git a/opengl/java/com/google/android/gles_jni/GLImpl.java b/opengl/java/com/google/android/gles_jni/GLImpl.java
index 36b6ea0..30b9325 100644
--- a/opengl/java/com/google/android/gles_jni/GLImpl.java
+++ b/opengl/java/com/google/android/gles_jni/GLImpl.java
@@ -45,6 +45,15 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
Buffer _normalPointer = null;
Buffer _texCoordPointer = null;
Buffer _vertexPointer = null;
+ Buffer _pointSizePointerOES = null;
+ Buffer _matrixIndexPointerOES = null;
+ Buffer _weightPointerOES = null;
+
+ private boolean haveCheckedExtensions;
+ private boolean have_OES_blend_equation_separate;
+ private boolean have_OES_blend_subtract;
+ private boolean have_OES_framebuffer_object;
+ private boolean have_OES_texture_cube_map;
public GLImpl() {
}
@@ -1582,12 +1591,31 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
// C function void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer )
- public native void glPointSizePointerOES(
+ private native void glPointSizePointerOESBounds(
int type,
int stride,
- java.nio.Buffer pointer
+ java.nio.Buffer pointer,
+ int remaining
);
+ public void glPointSizePointerOES(
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glPointSizePointerOESBounds(
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ if (((type == GL_FLOAT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _pointSizePointerOES = pointer;
+ }
+ }
+
// C function void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
public native void glTexCoordPointer(
@@ -1795,13 +1823,39 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
// C function void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
- public native void glMatrixIndexPointerOES(
+ private native void glMatrixIndexPointerOESBounds(
int size,
int type,
int stride,
- java.nio.Buffer pointer
+ java.nio.Buffer pointer,
+ int remaining
);
+ public void glMatrixIndexPointerOES(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glMatrixIndexPointerOESBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ if (((size == 2) ||
+ (size == 3) ||
+ (size == 4)) &&
+ ((type == GL_FLOAT) ||
+ (type == GL_BYTE) ||
+ (type == GL_SHORT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _matrixIndexPointerOES = pointer;
+ }
+ }
+
// C function void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, GLint offset )
public native void glMatrixIndexPointerOES(
@@ -1813,13 +1867,29 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
// C function void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
- public native void glWeightPointerOES(
+ private native void glWeightPointerOESBounds(
int size,
int type,
int stride,
- java.nio.Buffer pointer
+ java.nio.Buffer pointer,
+ int remaining
);
+ public void glWeightPointerOES(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glWeightPointerOESBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
// C function void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, GLint offset )
public native void glWeightPointerOES(
@@ -1871,7 +1941,7 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
int target
);
- // C function void glDeleteFramebuffersOES ( GLint n, GLint *framebuffers )
+ // C function void glDeleteFramebuffersOES ( GLint n, GLuint *framebuffers )
public native void glDeleteFramebuffersOES(
int n,
@@ -1879,14 +1949,14 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
int offset
);
- // C function void glDeleteFramebuffersOES ( GLint n, GLint *framebuffers )
+ // C function void glDeleteFramebuffersOES ( GLint n, GLuint *framebuffers )
public native void glDeleteFramebuffersOES(
int n,
java.nio.IntBuffer framebuffers
);
- // C function void glDeleteRenderbuffersOES ( GLint n, GLint *renderbuffers )
+ // C function void glDeleteRenderbuffersOES ( GLint n, GLuint *renderbuffers )
public native void glDeleteRenderbuffersOES(
int n,
@@ -1894,7 +1964,7 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
int offset
);
- // C function void glDeleteRenderbuffersOES ( GLint n, GLint *renderbuffers )
+ // C function void glDeleteRenderbuffersOES ( GLint n, GLuint *renderbuffers )
public native void glDeleteRenderbuffersOES(
int n,
@@ -1926,7 +1996,7 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
int target
);
- // C function void glGenFramebuffersOES ( GLint n, GLint *framebuffers )
+ // C function void glGenFramebuffersOES ( GLint n, GLuint *framebuffers )
public native void glGenFramebuffersOES(
int n,
@@ -1934,14 +2004,14 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
int offset
);
- // C function void glGenFramebuffersOES ( GLint n, GLint *framebuffers )
+ // C function void glGenFramebuffersOES ( GLint n, GLuint *framebuffers )
public native void glGenFramebuffersOES(
int n,
java.nio.IntBuffer framebuffers
);
- // C function void glGenRenderbuffersOES ( GLint n, GLint *renderbuffers )
+ // C function void glGenRenderbuffersOES ( GLint n, GLuint *renderbuffers )
public native void glGenRenderbuffersOES(
int n,
@@ -1949,7 +2019,7 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
int offset
);
- // C function void glGenRenderbuffersOES ( GLint n, GLint *renderbuffers )
+ // C function void glGenRenderbuffersOES ( GLint n, GLuint *renderbuffers )
public native void glGenRenderbuffersOES(
int n,