Merge "OpenGL bindings fix for methods with iobuffer args"
This commit is contained in:
commit
df5cbd7622
|
@ -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 + ", " +
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue