summaryrefslogtreecommitdiffstats
path: root/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
diff options
context:
space:
mode:
authorThomas Tafertshofer <tafertth@google.com>2012-07-12 11:16:20 -0700
committerThomas Tafertshofer <tafertth@google.com>2012-07-12 11:23:02 -0700
commite58a97b5d77b59fad1572ba3c0572c7434e8e503 (patch)
tree21fd4ea77bc12da8d79a62706d879811fa905e29 /opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
parent2aa3aa680e24521e9874a5da9b017d978142faba (diff)
downloadframeworks_native-e58a97b5d77b59fad1572ba3c0572c7434e8e503.zip
frameworks_native-e58a97b5d77b59fad1572ba3c0572c7434e8e503.tar.gz
frameworks_native-e58a97b5d77b59fad1572ba3c0572c7434e8e503.tar.bz2
OpenGL bindings fix for methods with iobuffer args
This changes generation of the OpenGL bindings to prevent crashes of methods with more then one nio buffer argument. Bug: 6772416 Change-Id: I4eff25c2f568dea78a6ffd3e95ff4620ab4b3b7d
Diffstat (limited to 'opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp')
-rw-r--r--opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp13
1 files changed, 6 insertions, 7 deletions
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");