diff options
Diffstat (limited to 'opengl/java')
| -rw-r--r-- | opengl/java/android/opengl/EGLLogWrapper.java | 16 | ||||
| -rw-r--r-- | opengl/java/android/opengl/ETC1.java | 137 | ||||
| -rw-r--r-- | opengl/java/android/opengl/ETC1Util.java | 228 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLES11.java | 24 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLES11Ext.java | 58 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLES20.java | 1857 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLErrorWrapper.java | 420 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLLogWrapper.java | 625 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLSurfaceView.java | 485 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLU.java | 52 | ||||
| -rw-r--r-- | opengl/java/android/opengl/GLWrapperBase.java | 484 | ||||
| -rw-r--r-- | opengl/java/android/opengl/Matrix.java | 75 | ||||
| -rw-r--r-- | opengl/java/com/google/android/gles_jni/EGLImpl.java | 61 | ||||
| -rw-r--r-- | opengl/java/com/google/android/gles_jni/GLImpl.java | 98 |
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, |
