am 981ccfbb: Implement Matrix Palette extension.

Merge commit '981ccfbbfd737e2bdf0cedec0089975f91fd4e0a' into eclair-mr2-plus-aosp

* commit '981ccfbbfd737e2bdf0cedec0089975f91fd4e0a':
  Implement Matrix Palette extension.
This commit is contained in:
Jack Palevich
2009-12-09 15:59:08 -08:00
committed by Android Git Automerger
19 changed files with 473 additions and 114 deletions

View File

@ -24,6 +24,13 @@
#include <GLES/gl.h>
#include <GLES/glext.h>
/* special calls implemented in Android's GLES wrapper used to more
* efficiently bound-check passed arrays */
extern "C" {
GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type, GLsizei stride,
const GLvoid *ptr, GLsizei count);
}
static int initialized = 0;
static jclass nioAccessClass;
@ -122,6 +129,19 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
commit ? 0 : JNI_ABORT);
}
static void *
getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
char* buf = (char*) _env->GetDirectBufferAddress(buffer);
if (buf) {
jint position = _env->GetIntField(buffer, positionID);
jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
buf += position << elementSizeShift;
} else {
_env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
}
return (void*) buf;
}
// --------------------------------------------------------------------------
/* void glBindBuffer ( GLenum target, GLuint buffer ) */
@ -2035,21 +2055,24 @@ exit:
/* void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
static void
android_glPointSizePointerOES__IILjava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf) {
android_glPointSizePointerOESBounds__IILjava_nio_Buffer_2I
(JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf, jint remaining) {
jarray _array = (jarray) 0;
jint _remaining;
GLvoid *pointer = (GLvoid *) 0;
pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
glPointSizePointerOES(
if (pointer_buf) {
pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
if ( ! pointer ) {
return;
}
}
glPointSizePointerOESBounds(
(GLenum)type,
(GLsizei)stride,
(GLvoid *)pointer
(GLvoid *)pointer,
(GLsizei)remaining
);
if (_array) {
releasePointer(_env, _array, pointer, JNI_FALSE);
}
}
/* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
@ -2454,7 +2477,7 @@ static JNINativeMethod methods[] = {
{"glPointParameterx", "(II)V", (void *) android_glPointParameterx__II },
{"glPointParameterxv", "(I[II)V", (void *) android_glPointParameterxv__I_3II },
{"glPointParameterxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glPointParameterxv__ILjava_nio_IntBuffer_2 },
{"glPointSizePointerOES", "(IILjava/nio/Buffer;)V", (void *) android_glPointSizePointerOES__IILjava_nio_Buffer_2 },
{"glPointSizePointerOESBounds", "(IILjava/nio/Buffer;I)V", (void *) android_glPointSizePointerOESBounds__IILjava_nio_Buffer_2I },
{"glTexCoordPointer", "(IIII)V", (void *) android_glTexCoordPointer__IIII },
{"glTexEnvi", "(III)V", (void *) android_glTexEnvi__III },
{"glTexEnviv", "(II[II)V", (void *) android_glTexEnviv__II_3II },

View File

@ -24,6 +24,15 @@
#include <GLES/gl.h>
#include <GLES/glext.h>
/* special calls implemented in Android's GLES wrapper used to more
* efficiently bound-check passed arrays */
extern "C" {
GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type, GLsizei stride,
const GLvoid *ptr, GLsizei count);
GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, GLsizei stride,
const GLvoid *ptr, GLsizei count);
}
static int initialized = 0;
static jclass nioAccessClass;
@ -122,6 +131,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
commit ? 0 : JNI_ABORT);
}
static void *
getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
char* buf = (char*) _env->GetDirectBufferAddress(buffer);
if (buf) {
jint position = _env->GetIntField(buffer, positionID);
jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
buf += position << elementSizeShift;
} else {
_env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
}
return (void*) buf;
}
// --------------------------------------------------------------------------
/* void glBlendEquationSeparateOES ( GLenum modeRGB, GLenum modeAlpha ) */
@ -1771,32 +1792,62 @@ android_glGenerateMipmapOES__I
static void
android_glCurrentPaletteMatrixOES__I
(JNIEnv *_env, jobject _this, jint matrixpaletteindex) {
_env->ThrowNew(UOEClass,
"glCurrentPaletteMatrixOES");
glCurrentPaletteMatrixOES(
(GLuint)matrixpaletteindex
);
}
/* void glLoadPaletteFromModelViewMatrixOES ( void ) */
static void
android_glLoadPaletteFromModelViewMatrixOES__
(JNIEnv *_env, jobject _this) {
_env->ThrowNew(UOEClass,
"glLoadPaletteFromModelViewMatrixOES");
glLoadPaletteFromModelViewMatrixOES();
}
/* void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
static void
android_glMatrixIndexPointerOES__IIILjava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf) {
_env->ThrowNew(UOEClass,
"glMatrixIndexPointerOES");
android_glMatrixIndexPointerOESBounds__IIILjava_nio_Buffer_2I
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
jarray _array = (jarray) 0;
jint _remaining;
GLvoid *pointer = (GLvoid *) 0;
if (pointer_buf) {
pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
if ( ! pointer ) {
return;
}
}
glMatrixIndexPointerOESBounds(
(GLint)size,
(GLenum)type,
(GLsizei)stride,
(GLvoid *)pointer,
(GLsizei)remaining
);
}
/* void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
static void
android_glWeightPointerOES__IIILjava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf) {
_env->ThrowNew(UOEClass,
"glWeightPointerOES");
android_glWeightPointerOESBounds__IIILjava_nio_Buffer_2I
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
jarray _array = (jarray) 0;
jint _remaining;
GLvoid *pointer = (GLvoid *) 0;
if (pointer_buf) {
pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
if ( ! pointer ) {
return;
}
}
glWeightPointerOESBounds(
(GLint)size,
(GLenum)type,
(GLsizei)stride,
(GLvoid *)pointer,
(GLsizei)remaining
);
}
/* void glDepthRangefOES ( GLclampf zNear, GLclampf zFar ) */
@ -2426,8 +2477,8 @@ static JNINativeMethod methods[] = {
{"glGenerateMipmapOES", "(I)V", (void *) android_glGenerateMipmapOES__I },
{"glCurrentPaletteMatrixOES", "(I)V", (void *) android_glCurrentPaletteMatrixOES__I },
{"glLoadPaletteFromModelViewMatrixOES", "()V", (void *) android_glLoadPaletteFromModelViewMatrixOES__ },
{"glMatrixIndexPointerOES", "(IIILjava/nio/Buffer;)V", (void *) android_glMatrixIndexPointerOES__IIILjava_nio_Buffer_2 },
{"glWeightPointerOES", "(IIILjava/nio/Buffer;)V", (void *) android_glWeightPointerOES__IIILjava_nio_Buffer_2 },
{"glMatrixIndexPointerOESBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glMatrixIndexPointerOESBounds__IIILjava_nio_Buffer_2I },
{"glWeightPointerOESBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glWeightPointerOESBounds__IIILjava_nio_Buffer_2I },
{"glDepthRangefOES", "(FF)V", (void *) android_glDepthRangefOES__FF },
{"glFrustumfOES", "(FFFFFF)V", (void *) android_glFrustumfOES__FFFFFF },
{"glOrthofOES", "(FFFFFF)V", (void *) android_glOrthofOES__FFFFFF },

View File

@ -35,6 +35,12 @@ GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
}
static int initialized = 0;
@ -5391,21 +5397,24 @@ exit:
/* void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
static void
android_glPointSizePointerOES__IILjava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf) {
android_glPointSizePointerOESBounds__IILjava_nio_Buffer_2I
(JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf, jint remaining) {
jarray _array = (jarray) 0;
jint _remaining;
GLvoid *pointer = (GLvoid *) 0;
pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
glPointSizePointerOES(
if (pointer_buf) {
pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
if ( ! pointer ) {
return;
}
}
glPointSizePointerOESBounds(
(GLenum)type,
(GLsizei)stride,
(GLvoid *)pointer
(GLvoid *)pointer,
(GLsizei)remaining
);
if (_array) {
releasePointer(_env, _array, pointer, JNI_FALSE);
}
}
/* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
@ -5754,8 +5763,9 @@ android_glVertexPointer__IIII
static void
android_glCurrentPaletteMatrixOES__I
(JNIEnv *_env, jobject _this, jint matrixpaletteindex) {
_env->ThrowNew(UOEClass,
"glCurrentPaletteMatrixOES");
glCurrentPaletteMatrixOES(
(GLuint)matrixpaletteindex
);
}
/* void glDrawTexfOES ( GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height ) */
@ -6050,40 +6060,77 @@ exit:
static void
android_glLoadPaletteFromModelViewMatrixOES__
(JNIEnv *_env, jobject _this) {
_env->ThrowNew(UOEClass,
"glLoadPaletteFromModelViewMatrixOES");
glLoadPaletteFromModelViewMatrixOES();
}
/* void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
static void
android_glMatrixIndexPointerOES__IIILjava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf) {
_env->ThrowNew(UOEClass,
"glMatrixIndexPointerOES");
android_glMatrixIndexPointerOESBounds__IIILjava_nio_Buffer_2I
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
jarray _array = (jarray) 0;
jint _remaining;
GLvoid *pointer = (GLvoid *) 0;
if (pointer_buf) {
pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
if ( ! pointer ) {
return;
}
}
glMatrixIndexPointerOESBounds(
(GLint)size,
(GLenum)type,
(GLsizei)stride,
(GLvoid *)pointer,
(GLsizei)remaining
);
}
/* void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
static void
android_glMatrixIndexPointerOES__IIII
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
_env->ThrowNew(UOEClass,
"glMatrixIndexPointerOES");
glMatrixIndexPointerOES(
(GLint)size,
(GLenum)type,
(GLsizei)stride,
(const GLvoid *)offset
);
}
/* void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
static void
android_glWeightPointerOES__IIILjava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf) {
_env->ThrowNew(UOEClass,
"glWeightPointerOES");
android_glWeightPointerOESBounds__IIILjava_nio_Buffer_2I
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
jarray _array = (jarray) 0;
jint _remaining;
GLvoid *pointer = (GLvoid *) 0;
if (pointer_buf) {
pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
if ( ! pointer ) {
return;
}
}
glWeightPointerOESBounds(
(GLint)size,
(GLenum)type,
(GLsizei)stride,
(GLvoid *)pointer,
(GLsizei)remaining
);
}
/* void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
static void
android_glWeightPointerOES__IIII
(JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
_env->ThrowNew(UOEClass,
"glWeightPointerOES");
glWeightPointerOES(
(GLint)size,
(GLenum)type,
(GLsizei)stride,
(const GLvoid *)offset
);
}
/* void glBindFramebufferOES ( GLint target, GLint framebuffer ) */
@ -6584,7 +6631,7 @@ static JNINativeMethod methods[] = {
{"glPointParameterx", "(II)V", (void *) android_glPointParameterx__II },
{"glPointParameterxv", "(I[II)V", (void *) android_glPointParameterxv__I_3II },
{"glPointParameterxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glPointParameterxv__ILjava_nio_IntBuffer_2 },
{"glPointSizePointerOES", "(IILjava/nio/Buffer;)V", (void *) android_glPointSizePointerOES__IILjava_nio_Buffer_2 },
{"glPointSizePointerOESBounds", "(IILjava/nio/Buffer;I)V", (void *) android_glPointSizePointerOESBounds__IILjava_nio_Buffer_2I },
{"glTexCoordPointer", "(IIII)V", (void *) android_glTexCoordPointer__IIII },
{"glTexEnvi", "(III)V", (void *) android_glTexEnvi__III },
{"glTexEnviv", "(II[II)V", (void *) android_glTexEnviv__II_3II },
@ -6611,9 +6658,9 @@ static JNINativeMethod methods[] = {
{"glDrawTexxvOES", "([II)V", (void *) android_glDrawTexxvOES___3II },
{"glDrawTexxvOES", "(Ljava/nio/IntBuffer;)V", (void *) android_glDrawTexxvOES__Ljava_nio_IntBuffer_2 },
{"glLoadPaletteFromModelViewMatrixOES", "()V", (void *) android_glLoadPaletteFromModelViewMatrixOES__ },
{"glMatrixIndexPointerOES", "(IIILjava/nio/Buffer;)V", (void *) android_glMatrixIndexPointerOES__IIILjava_nio_Buffer_2 },
{"glMatrixIndexPointerOESBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glMatrixIndexPointerOESBounds__IIILjava_nio_Buffer_2I },
{"glMatrixIndexPointerOES", "(IIII)V", (void *) android_glMatrixIndexPointerOES__IIII },
{"glWeightPointerOES", "(IIILjava/nio/Buffer;)V", (void *) android_glWeightPointerOES__IIILjava_nio_Buffer_2 },
{"glWeightPointerOESBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glWeightPointerOESBounds__IIILjava_nio_Buffer_2I },
{"glWeightPointerOES", "(IIII)V", (void *) android_glWeightPointerOES__IIII },
{"glBindFramebufferOES", "(II)V", (void *) android_glBindFramebufferOES__II },
{"glBindRenderbufferOES", "(II)V", (void *) android_glBindRenderbufferOES__II },

View File

@ -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,11 +597,30 @@ 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,
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 )

View File

@ -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,21 +874,63 @@ 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,
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,
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 )

View File

@ -19,8 +19,7 @@
package android.opengl;
/** OpenGL ES 2.0. This class exposes the core OpenGL ES 2.0 APIs.
* All the methods are static.
/** OpenGL ES 2.0
*/
public class GLES20 {
public static final int GL_ACTIVE_TEXTURE = 0x84E0;
@ -49,7 +48,7 @@ public class GLES20 {
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;
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;

View File

@ -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) {
@ -3010,6 +3010,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 +3042,7 @@ class GLLogWrapper extends GLWrapperBase {
}
public void bindByteBuffer() {
mTempByteBuffer = toByteBuffer(-1, mPointer);
mTempByteBuffer = mPointer == null ? null : toByteBuffer(-1, mPointer);
}
public void unbindByteBuffer() {
@ -3051,10 +3054,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;

View File

@ -45,6 +45,9 @@ 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;
public GLImpl() {
}
@ -1582,11 +1585,30 @@ 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,
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 )
@ -1795,12 +1817,38 @@ 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,
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 )
@ -1813,12 +1861,28 @@ 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,
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 )

View File

@ -47,6 +47,12 @@ GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
}
void glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
@ -66,6 +72,21 @@ void glVertexPointerBounds(GLint size, GLenum type,
glVertexPointer(size, type, stride, pointer);
}
void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count) {
glPointSizePointerOES(type, stride, pointer);
}
GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count) {
glMatrixIndexPointerOES(size, type, stride, pointer);
}
GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count) {
glWeightPointerOES(size, type, stride, pointer);
}
// ----------------------------------------------------------------------------
// Actual GL entry-points
// ----------------------------------------------------------------------------

View File

@ -37,7 +37,6 @@ glBlendEquation unsupported
glBlendEquationSeparate unsupported
glBlendFuncSeparate unsupported
glCheckFramebufferStatusOES unsupported return 0
glCurrentPaletteMatrixOES unsupported
glDeleteFramebuffersOES unsupported
glDeleteRenderbuffersOES unsupported
glFramebufferRenderbufferOES unsupported
@ -52,11 +51,8 @@ glGetRenderbufferParameterivOES unsupported
glGetTexGen unsupported
glIsFramebufferOES unsupported return JNI_FALSE
glIsRenderbufferOES unsupported return JNI_FALSE
glLoadPaletteFromModelViewMatrixOES unsupported
glMatrixIndexPointerOES unsupported
glRenderbufferStorageOES unsupported return false
glTexGen unsupported
glTexGenf unsupported
glTexGeni unsupported
glTexGenx unsupported
glWeightPointerOES unsupported

View File

@ -35,7 +35,6 @@ glBlendEquation unsupported
glBlendEquationSeparate unsupported
glBlendFuncSeparate unsupported
glCheckFramebufferStatusOES unsupported return 0
glCurrentPaletteMatrixOES unsupported
glDeleteFramebuffersOES unsupported
glDeleteRenderbuffersOES unsupported
glFramebufferRenderbufferOES unsupported
@ -50,11 +49,8 @@ glGetRenderbufferParameterivOES unsupported
glGetTexGen unsupported
glIsFramebufferOES unsupported return JNI_FALSE
glIsRenderbufferOES unsupported return JNI_FALSE
glLoadPaletteFromModelViewMatrixOES unsupported
glMatrixIndexPointerOES unsupported
glRenderbufferStorageOES unsupported return false
glTexGen unsupported
glTexGenf unsupported
glTexGeni unsupported
glTexGenx unsupported
glWeightPointerOES unsupported

View File

@ -119,10 +119,15 @@ public class JniCodeEmitter {
emitFunction(jfunc, out, false, false);
}
boolean isPointerFunc(JFunc jfunc) {
String name = jfunc.getName();
return (name.endsWith("Pointer") || name.endsWith("PointerOES"))
&& jfunc.getCFunc().hasPointerArg();
}
void emitFunctionCall(JFunc jfunc, PrintStream out, String iii, boolean grabArray) {
boolean isVoid = jfunc.getType().isVoid();
boolean isPointerFunc = jfunc.getName().endsWith("Pointer") &&
jfunc.getCFunc().hasPointerArg();
boolean isPointerFunc = isPointerFunc(jfunc);
if (!isVoid) {
out.println(iii +
@ -406,9 +411,7 @@ public class JniCodeEmitter {
* if !interfaceDecl: public <returntype> func(args) { body }
*/
void emitFunction(JFunc jfunc, PrintStream out, boolean nativeDecl, boolean interfaceDecl) {
boolean isPointerFunc =
jfunc.getName().endsWith("Pointer") &&
jfunc.getCFunc().hasPointerArg();
boolean isPointerFunc = isPointerFunc(jfunc);
if (!nativeDecl && !interfaceDecl && !isPointerFunc) {
// If it's not a pointer function, we've already emitted it
@ -510,6 +513,34 @@ public class JniCodeEmitter {
out.println(iii + " (stride >= 0)) {");
out.println(iii + indent + "_vertexPointer = pointer;");
out.println(iii + "}");
} else if (fname.equals("glPointSizePointerOES")) {
out.println(iii + "if (((type == GL_FLOAT) ||");
out.println(iii + " (type == GL_FIXED)) &&");
out.println(iii + " (stride >= 0)) {");
out.println(iii + indent + "_pointSizePointerOES = pointer;");
out.println(iii + "}");
} else if (fname.equals("glMatrixIndexPointerOES")) {
out.println(iii + "if (((size == 2) ||");
out.println(iii + " (size == 3) ||");
out.println(iii + " (size == 4)) &&");
out.println(iii + " ((type == GL_FLOAT) ||");
out.println(iii + " (type == GL_BYTE) ||");
out.println(iii + " (type == GL_SHORT) ||");
out.println(iii + " (type == GL_FIXED)) &&");
out.println(iii + " (stride >= 0)) {");
out.println(iii + indent + "_matrixIndexPointerOES = pointer;");
out.println(iii + "}");
} else if (fname.equals("glWeightPointer")) {
out.println(iii + "if (((size == 2) ||");
out.println(iii + " (size == 3) ||");
out.println(iii + " (size == 4)) &&");
out.println(iii + " ((type == GL_FLOAT) ||");
out.println(iii + " (type == GL_BYTE) ||");
out.println(iii + " (type == GL_SHORT) ||");
out.println(iii + " (type == GL_FIXED)) &&");
out.println(iii + " (stride >= 0)) {");
out.println(iii + indent + "_weightPointerOES = pointer;");
out.println(iii + "}");
}
}
@ -609,9 +640,9 @@ public class JniCodeEmitter {
//
String outName = "android_" + jfunc.getName();
boolean isPointerFunc = outName.endsWith("Pointer") &&
jfunc.getCFunc().hasPointerArg();
boolean isPointerFunc = isPointerFunc(jfunc);
boolean isVBOPointerFunc = (outName.endsWith("Pointer") ||
outName.endsWith("PointerOES") ||
outName.endsWith("DrawElements")) &&
!jfunc.getCFunc().hasPointerArg();
if (isPointerFunc) {

View File

@ -18,6 +18,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;
@ -128,3 +130,9 @@ 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;

View File

@ -23,6 +23,15 @@
#include <GLES/gl.h>
#include <GLES/glext.h>
/* special calls implemented in Android's GLES wrapper used to more
* efficiently bound-check passed arrays */
extern "C" {
GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type, GLsizei stride,
const GLvoid *ptr, GLsizei count);
GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, GLsizei stride,
const GLvoid *ptr, GLsizei count);
}
static int initialized = 0;
static jclass nioAccessClass;
@ -121,5 +130,17 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
commit ? 0 : JNI_ABORT);
}
static void *
getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
char* buf = (char*) _env->GetDirectBufferAddress(buffer);
if (buf) {
jint position = _env->GetIntField(buffer, positionID);
jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
buf += position << elementSizeShift;
} else {
_env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
}
return (void*) buf;
}
// --------------------------------------------------------------------------

View File

@ -149,3 +149,4 @@ public class GLES11 extends GLES10 {
_nativeClassInit();
}
private static Buffer _pointSizePointerOES;

View File

@ -23,6 +23,13 @@
#include <GLES/gl.h>
#include <GLES/glext.h>
/* special calls implemented in Android's GLES wrapper used to more
* efficiently bound-check passed arrays */
extern "C" {
GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type, GLsizei stride,
const GLvoid *ptr, GLsizei count);
}
static int initialized = 0;
static jclass nioAccessClass;
@ -121,5 +128,18 @@ releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
commit ? 0 : JNI_ABORT);
}
static void *
getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
char* buf = (char*) _env->GetDirectBufferAddress(buffer);
if (buf) {
jint position = _env->GetIntField(buffer, positionID);
jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
buf += position << elementSizeShift;
} else {
_env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
}
return (void*) buf;
}
// --------------------------------------------------------------------------

View File

@ -19,7 +19,6 @@
package android.opengl;
/** OpenGL ES 2.0
* @hide
*/
public class GLES20 {
public static final int GL_ACTIVE_TEXTURE = 0x84E0;

View File

@ -34,6 +34,12 @@ GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
GLsizei stride, const GLvoid *pointer, GLsizei count);
}
static int initialized = 0;

View File

@ -44,6 +44,9 @@ 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;
public GLImpl() {
}