summaryrefslogtreecommitdiffstats
path: root/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'opengl')
-rw-r--r--opengl/tools/glgen/src/EGLCodeEmitter.java2
-rw-r--r--opengl/tools/glgen/src/JniCodeEmitter.java38
-rw-r--r--opengl/tools/glgen/static/egl/EGLConfig.java10
-rw-r--r--opengl/tools/glgen/static/egl/EGLContext.java10
-rw-r--r--opengl/tools/glgen/static/egl/EGLDisplay.java10
-rw-r--r--opengl/tools/glgen/static/egl/EGLObjectHandle.java18
-rw-r--r--opengl/tools/glgen/static/egl/EGLSurface.java10
-rw-r--r--opengl/tools/glgen/stubs/egl/EGL14Header.java-if6
-rw-r--r--opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp9
-rw-r--r--opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp9
-rw-r--r--opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp10
-rw-r--r--opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp9
-rw-r--r--opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp9
-rw-r--r--opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp13
14 files changed, 85 insertions, 78 deletions
diff --git a/opengl/tools/glgen/src/EGLCodeEmitter.java b/opengl/tools/glgen/src/EGLCodeEmitter.java
index 1691b65..300f776 100644
--- a/opengl/tools/glgen/src/EGLCodeEmitter.java
+++ b/opengl/tools/glgen/src/EGLCodeEmitter.java
@@ -44,7 +44,7 @@ public class EGLCodeEmitter extends JniCodeEmitter {
mUseContextPointer = false;
mUseStaticMethods = true;
mUseSimpleMethodNames = true;
- mUseHideCommentForAPI = true;
+ mUseHideCommentForAPI = false;
}
public void emitCode(CFunc cfunc, String original) {
diff --git a/opengl/tools/glgen/src/JniCodeEmitter.java b/opengl/tools/glgen/src/JniCodeEmitter.java
index af98889..726dc61 100644
--- a/opengl/tools/glgen/src/JniCodeEmitter.java
+++ b/opengl/tools/glgen/src/JniCodeEmitter.java
@@ -939,10 +939,13 @@ public class JniCodeEmitter {
// Emit a single _array or multiple _XXXArray variables
if (numBufferArgs == 1) {
out.println(indent + "jarray _array = (jarray) 0;");
+ out.println(indent + "jint _bufferOffset = (jint) 0;");
} else {
for (int i = 0; i < numBufferArgs; i++) {
out.println(indent + "jarray _" + bufferArgNames.get(i) +
"Array = (jarray) 0;");
+ out.println(indent + "jint _" + bufferArgNames.get(i) +
+ "BufferOffset = (jint) 0;");
}
}
if (!isVoid) {
@@ -1075,7 +1078,6 @@ public class JniCodeEmitter {
// Emit 'GetPrimitiveArrayCritical' for non-object arrays
// Emit 'GetPointer' calls for Buffer pointers
- int bufArgIdx = 0;
if (nonPrimitiveArgs.size() > 0) {
for (int i = 0; i < nonPrimitiveArgs.size(); i++) {
int idx = nonPrimitiveArgs.get(i).intValue();
@@ -1168,7 +1170,9 @@ public class JniCodeEmitter {
out.println();
} else if (jfunc.getArgType(idx).isBuffer()) {
String array = numBufferArgs <= 1 ? "_array" :
- "_" + bufferArgNames.get(bufArgIdx++) + "Array";
+ "_" + cfunc.getArgName(cIndex) + "Array";
+ String bufferOffset = numBufferArgs <= 1 ? "_bufferOffset" :
+ "_" + cfunc.getArgName(cIndex) + "BufferOffset";
boolean nullAllowed = isNullAllowed(cfunc) || isPointerFunc;
if (nullAllowed) {
@@ -1194,7 +1198,7 @@ public class JniCodeEmitter {
cfunc.getArgType(cIndex).getDeclaration() +
")getPointer(_env, " +
cname +
- "_buf, &" + array + ", &" + remaining +
+ "_buf, &" + array + ", &" + remaining + ", &" + bufferOffset +
");");
}
@@ -1209,6 +1213,28 @@ public class JniCodeEmitter {
}
}
+ // Emit 'GetPrimitiveArrayCritical' for pointers if needed
+ if (nonPrimitiveArgs.size() > 0) {
+ for (int i = 0; i < nonPrimitiveArgs.size(); i++) {
+ int idx = nonPrimitiveArgs.get(i).intValue();
+ int cIndex = jfunc.getArgCIndex(idx);
+
+ if(!jfunc.getArgType(idx).isBuffer() || isPointerFunc) continue;
+
+ String cname = cfunc.getArgName(cIndex);
+ String bufferOffset = numBufferArgs <= 1 ? "_bufferOffset" :
+ "_" + cname + "BufferOffset";
+ String array = numBufferArgs <= 1 ? "_array" :
+ "_" + cfunc.getArgName(cIndex) + "Array";
+
+ out.println(indent + "if (" + cname +" == NULL) {");
+ out.println(indent + indent + "char * _" + cname + "Base = (char *)_env->GetPrimitiveArrayCritical(" + array + ", (jboolean *) 0);");
+ out.println(indent + indent + cname + " = (" +cfunc.getArgType(cIndex).getDeclaration() +") (_" + cname + "Base + " + bufferOffset + ");");
+ out.println(indent + "}");
+ }
+ }
+
+
if (!isVoid) {
out.print(indent + "_returnValue = ");
} else {
@@ -1252,7 +1278,7 @@ public class JniCodeEmitter {
out.print("_native");
}
- if (cfunc.getArgType(i).isEGLHandle() &&
+ if (cfunc.getArgType(i).isEGLHandle() &&
!cfunc.getArgType(i).isPointer()){
out.print(cfunc.getArgName(i)+"_native");
} else {
@@ -1279,7 +1305,7 @@ public class JniCodeEmitter {
needsExit = false;
}
- bufArgIdx = 0;
+
if (nonPrimitiveArgs.size() > 0) {
for (int i = nonPrimitiveArgs.size() - 1; i >= 0; i--) {
int idx = nonPrimitiveArgs.get(i).intValue();
@@ -1307,7 +1333,7 @@ public class JniCodeEmitter {
} else if (jfunc.getArgType(idx).isBuffer()) {
if (! isPointerFunc) {
String array = numBufferArgs <= 1 ? "_array" :
- "_" + bufferArgNames.get(bufArgIdx++) + "Array";
+ "_" + cfunc.getArgName(cIndex) + "Array";
out.println(indent + "if (" + array + ") {");
out.println(indent + indent +
"releasePointer(_env, " + array + ", " +
diff --git a/opengl/tools/glgen/static/egl/EGLConfig.java b/opengl/tools/glgen/static/egl/EGLConfig.java
index d9aebfc..d457c9f 100644
--- a/opengl/tools/glgen/static/egl/EGLConfig.java
+++ b/opengl/tools/glgen/static/egl/EGLConfig.java
@@ -18,10 +18,11 @@
package android.opengl;
/**
- * @hide
+ * Wrapper class for native EGLConfig objects.
+ *
*/
public class EGLConfig extends EGLObjectHandle {
- public EGLConfig(int handle) {
+ private EGLConfig(int handle) {
super(handle);
}
@@ -33,9 +34,4 @@ public class EGLConfig extends EGLObjectHandle {
EGLConfig that = (EGLConfig) o;
return getHandle() == that.getHandle();
}
-
- @Override
- public int hashCode() {
- return getHandle();
- }
}
diff --git a/opengl/tools/glgen/static/egl/EGLContext.java b/opengl/tools/glgen/static/egl/EGLContext.java
index 7b194f3..41b8ef1 100644
--- a/opengl/tools/glgen/static/egl/EGLContext.java
+++ b/opengl/tools/glgen/static/egl/EGLContext.java
@@ -18,10 +18,11 @@
package android.opengl;
/**
- * @hide
+ * Wrapper class for native EGLContext objects.
+ *
*/
public class EGLContext extends EGLObjectHandle {
- public EGLContext(int handle) {
+ private EGLContext(int handle) {
super(handle);
}
@@ -33,9 +34,4 @@ public class EGLContext extends EGLObjectHandle {
EGLContext that = (EGLContext) o;
return getHandle() == that.getHandle();
}
-
- @Override
- public int hashCode() {
- return getHandle();
- }
}
diff --git a/opengl/tools/glgen/static/egl/EGLDisplay.java b/opengl/tools/glgen/static/egl/EGLDisplay.java
index a090cf0..17d1a64 100644
--- a/opengl/tools/glgen/static/egl/EGLDisplay.java
+++ b/opengl/tools/glgen/static/egl/EGLDisplay.java
@@ -18,10 +18,11 @@
package android.opengl;
/**
- * @hide
+ * Wrapper class for native EGLDisplay objects.
+ *
*/
public class EGLDisplay extends EGLObjectHandle {
- public EGLDisplay(int handle) {
+ private EGLDisplay(int handle) {
super(handle);
}
@@ -33,9 +34,4 @@ public class EGLDisplay extends EGLObjectHandle {
EGLDisplay that = (EGLDisplay) o;
return getHandle() == that.getHandle();
}
-
- @Override
- public int hashCode() {
- return getHandle();
- }
}
diff --git a/opengl/tools/glgen/static/egl/EGLObjectHandle.java b/opengl/tools/glgen/static/egl/EGLObjectHandle.java
index 01f9bd4..d2710de 100644
--- a/opengl/tools/glgen/static/egl/EGLObjectHandle.java
+++ b/opengl/tools/glgen/static/egl/EGLObjectHandle.java
@@ -18,16 +18,30 @@
package android.opengl;
/**
- * @hide
+ * Base class for wrapped EGL objects.
+ *
*/
public abstract class EGLObjectHandle {
private final int mHandle;
- public EGLObjectHandle(int handle) {
+ protected EGLObjectHandle(int handle) {
mHandle = handle;
}
+ /**
+ * Returns the native handle of the wrapped EGL object. This handle can be
+ * cast to the corresponding native type on the native side.
+ *
+ * For example, EGLDisplay dpy = (EGLDisplay)handle;
+ *
+ * @return the native handle of the wrapped EGL object.
+ */
public int getHandle() {
return mHandle;
}
+
+ @Override
+ public int hashCode() {
+ return getHandle();
+ }
}
diff --git a/opengl/tools/glgen/static/egl/EGLSurface.java b/opengl/tools/glgen/static/egl/EGLSurface.java
index 4800a64..65bec4f 100644
--- a/opengl/tools/glgen/static/egl/EGLSurface.java
+++ b/opengl/tools/glgen/static/egl/EGLSurface.java
@@ -18,10 +18,11 @@
package android.opengl;
/**
- * @hide
+ * Wrapper class for native EGLSurface objects.
+ *
*/
public class EGLSurface extends EGLObjectHandle {
- public EGLSurface(int handle) {
+ private EGLSurface(int handle) {
super(handle);
}
@@ -33,9 +34,4 @@ public class EGLSurface extends EGLObjectHandle {
EGLSurface that = (EGLSurface) o;
return getHandle() == that.getHandle();
}
-
- @Override
- public int hashCode() {
- return getHandle();
- }
}
diff --git a/opengl/tools/glgen/stubs/egl/EGL14Header.java-if b/opengl/tools/glgen/stubs/egl/EGL14Header.java-if
index 9330c99..0c29d5c 100644
--- a/opengl/tools/glgen/stubs/egl/EGL14Header.java-if
+++ b/opengl/tools/glgen/stubs/egl/EGL14Header.java-if
@@ -23,10 +23,10 @@ import android.view.Surface;
import android.view.SurfaceView;
import android.view.SurfaceHolder;
-
/**
-* @hide
-*/
+ * EGL 1.4
+ *
+ */
public class EGL14 {
public static final int EGL_DEFAULT_DISPLAY = 0;
diff --git a/opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp
index 5d418d7..172c0e7 100644
--- a/opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp
@@ -62,14 +62,12 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass)
static void *
-getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
{
jint position;
jint limit;
jint elementSizeShift;
jlong pointer;
- jint offset;
- void *data;
position = _env->GetIntField(buffer, positionID);
limit = _env->GetIntField(buffer, limitID);
@@ -84,11 +82,10 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
*array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
getBaseArrayID, buffer);
- offset = _env->CallStaticIntMethod(nioAccessClass,
+ *offset = _env->CallStaticIntMethod(nioAccessClass,
getBaseArrayOffsetID, buffer);
- data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
- return (void *) ((char *) data + offset);
+ return NULL;
}
diff --git a/opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp
index 35a3c33..4ef815b 100644
--- a/opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp
@@ -74,14 +74,12 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass)
}
static void *
-getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
{
jint position;
jint limit;
jint elementSizeShift;
jlong pointer;
- jint offset;
- void *data;
position = _env->GetIntField(buffer, positionID);
limit = _env->GetIntField(buffer, limitID);
@@ -96,11 +94,10 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
*array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
getBaseArrayID, buffer);
- offset = _env->CallStaticIntMethod(nioAccessClass,
+ *offset = _env->CallStaticIntMethod(nioAccessClass,
getBaseArrayOffsetID, buffer);
- data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
- return (void *) ((char *) data + offset);
+ return NULL;
}
static void
diff --git a/opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp
index 9b29a44..0df95f4 100644
--- a/opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp
@@ -71,14 +71,12 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass)
static void *
-getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
{
jint position;
jint limit;
jint elementSizeShift;
jlong pointer;
- jint offset;
- void *data;
position = _env->GetIntField(buffer, positionID);
limit = _env->GetIntField(buffer, limitID);
@@ -93,11 +91,9 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
*array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
getBaseArrayID, buffer);
- offset = _env->CallStaticIntMethod(nioAccessClass,
+ *offset = _env->CallStaticIntMethod(nioAccessClass,
getBaseArrayOffsetID, buffer);
- data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
-
- return (void *) ((char *) data + offset);
+ return NULL;
}
diff --git a/opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp
index 823079f..dd860d5 100644
--- a/opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp
@@ -69,14 +69,12 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass)
static void *
-getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
{
jint position;
jint limit;
jint elementSizeShift;
jlong pointer;
- jint offset;
- void *data;
position = _env->GetIntField(buffer, positionID);
limit = _env->GetIntField(buffer, limitID);
@@ -91,11 +89,10 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
*array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
getBaseArrayID, buffer);
- offset = _env->CallStaticIntMethod(nioAccessClass,
+ *offset = _env->CallStaticIntMethod(nioAccessClass,
getBaseArrayOffsetID, buffer);
- data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
- return (void *) ((char *) data + offset);
+ return NULL;
}
diff --git a/opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp
index 13a2577..996f441 100644
--- a/opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES20cHeader.cpp
@@ -62,14 +62,12 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass)
static void *
-getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
{
jint position;
jint limit;
jint elementSizeShift;
jlong pointer;
- jint offset;
- void *data;
position = _env->GetIntField(buffer, positionID);
limit = _env->GetIntField(buffer, limitID);
@@ -84,11 +82,10 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
*array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
getBaseArrayID, buffer);
- offset = _env->CallStaticIntMethod(nioAccessClass,
+ *offset = _env->CallStaticIntMethod(nioAccessClass,
getBaseArrayOffsetID, buffer);
- data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
- return (void *) ((char *) data + offset);
+ return NULL;
}
diff --git a/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp b/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
index f7315ee..cc10336 100644
--- a/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
+++ b/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
@@ -113,14 +113,12 @@ nativeClassInit(JNIEnv *_env, jclass glImplClass)
}
static void *
-getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
{
jint position;
jint limit;
jint elementSizeShift;
jlong pointer;
- jint offset;
- void *data;
position = _env->GetIntField(buffer, positionID);
limit = _env->GetIntField(buffer, limitID);
@@ -138,11 +136,10 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
if (*array == NULL) {
return (void*) NULL;
}
- offset = _env->CallStaticIntMethod(nioAccessClass,
+ *offset = _env->CallStaticIntMethod(nioAccessClass,
getBaseArrayOffsetID, buffer);
- data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
- return (void *) ((char *) data + offset);
+ return NULL;
}
static void
@@ -180,10 +177,12 @@ getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
if (allowIndirectBuffers(_env)) {
jarray array = 0;
jint remaining;
- buf = getPointer(_env, buffer, &array, &remaining);
+ jint offset;
+ buf = getPointer(_env, buffer, &array, &remaining, &offset);
if (array) {
releasePointer(_env, array, buf, 0);
}
+ buf = buf + offset;
} else {
jniThrowException(_env, "java/lang/IllegalArgumentException",
"Must use a native order direct Buffer");