Merge "Replace JNI primitive array critical calls with non-critical ones." into mnc-dev

This commit is contained in:
Hiroshi Yamauchi 2015-05-13 18:37:56 +00:00 committed by Android (Google) Code Review
commit 6f48c7f3dc
15 changed files with 395 additions and 161 deletions

View File

@ -191,6 +191,84 @@ public class JType {
(baseType.indexOf("Buffer") != -1); (baseType.indexOf("Buffer") != -1);
} }
public JType getArrayTypeForTypedBuffer() {
if (!isTypedBuffer()) {
throw new RuntimeException("Not typed buffer type " + this);
}
switch (baseType) {
case "java.nio.ByteBuffer":
return new JType("byte", false, true);
case "java.nio.BooleanBuffer":
return new JType("boolean", false, true);
case "java.nio.ShortBuffer":
return new JType("short", false, true);
case "java.nio.CharBuffer":
return new JType("char", false, true);
case "java.nio.IntBuffer":
return new JType("int", false, true);
case "java.nio.LongBuffer":
return new JType("long", false, true);
case "java.nio.FloatBuffer":
return new JType("float", false, true);
case "java.nio.DoubleBuffer":
return new JType("double", false, true);
default:
throw new RuntimeException("Unknown typed buffer type " + this);
}
}
public String getArrayGetterForPrimitiveArray() {
if (!isArray() || isClass()) {
throw new RuntimeException("Not array type " + this);
}
switch (baseType) {
case "byte":
return "GetByteArrayElements";
case "boolean":
return "GetBooleanArrayElements";
case "short":
return "GetShortArrayElements";
case "char":
return "GetCharArrayElements";
case "int":
return "GetIntArrayElements";
case "long":
return "GetLongArrayElements";
case "float":
return "GetFloatArrayElements";
case "double":
return "GetDoubleArrayElements";
default:
throw new RuntimeException("Unknown array type " + this);
}
}
public String getArrayReleaserForPrimitiveArray() {
if (!isArray() || isClass()) {
throw new RuntimeException("Not array type " + this);
}
switch (baseType) {
case "byte":
return "ReleaseByteArrayElements";
case "boolean":
return "ReleaseBooleanArrayElements";
case "short":
return "ReleaseShortArrayElements";
case "char":
return "ReleaseCharArrayElements";
case "int":
return "ReleaseIntArrayElements";
case "long":
return "ReleaseLongArrayElements";
case "float":
return "ReleaseFloatArrayElements";
case "double":
return "ReleaseDoubleArrayElements";
default:
throw new RuntimeException("Unknown array type " + this);
}
}
public boolean isEGLHandle() { public boolean isEGLHandle() {
return !isPrimitive() && return !isPrimitive() &&
(baseType.startsWith("EGL")); (baseType.startsWith("EGL"));

View File

@ -812,6 +812,7 @@ public class JniCodeEmitter {
List<Integer> stringArgs = new ArrayList<Integer>(); List<Integer> stringArgs = new ArrayList<Integer>();
int numBufferArgs = 0; int numBufferArgs = 0;
List<String> bufferArgNames = new ArrayList<String>(); List<String> bufferArgNames = new ArrayList<String>();
List<JType> bufferArgTypes = new ArrayList<JType>();
// Emit JNI signature (arguments) // Emit JNI signature (arguments)
// //
@ -835,6 +836,7 @@ public class JniCodeEmitter {
int cIndex = jfunc.getArgCIndex(i); int cIndex = jfunc.getArgCIndex(i);
String cname = cfunc.getArgName(cIndex); String cname = cfunc.getArgName(cIndex);
bufferArgNames.add(cname); bufferArgNames.add(cname);
bufferArgTypes.add(jfunc.getArgType(i));
numBufferArgs++; numBufferArgs++;
} }
} }
@ -948,12 +950,25 @@ public class JniCodeEmitter {
// Emit a single _array or multiple _XXXArray variables // Emit a single _array or multiple _XXXArray variables
if (numBufferArgs == 1) { if (numBufferArgs == 1) {
JType bufferType = bufferArgTypes.get(0);
if (bufferType.isTypedBuffer()) {
String typedArrayType = getJniType(bufferType.getArrayTypeForTypedBuffer());
out.println(indent + typedArrayType + " _array = (" + typedArrayType + ") 0;");
} else {
out.println(indent + "jarray _array = (jarray) 0;"); out.println(indent + "jarray _array = (jarray) 0;");
out.println(indent + "jint _bufferOffset = (jint) 0;"); }
out.println(indent + "jint _bufferOffset = (jint) 0;");
} else { } else {
for (int i = 0; i < numBufferArgs; i++) { for (int i = 0; i < numBufferArgs; i++) {
out.println(indent + "jarray _" + bufferArgNames.get(i) + JType bufferType = bufferArgTypes.get(0);
"Array = (jarray) 0;"); if (bufferType.isTypedBuffer()) {
String typedArrayType = getJniType(bufferType.getArrayTypeForTypedBuffer());
out.println(indent + typedArrayType + " _" + bufferArgNames.get(i) +
"Array = (" + typedArrayType + ") 0;");
} else {
out.println(indent + "jarray _" + bufferArgNames.get(i) +
"Array = (jarray) 0;");
}
out.println(indent + "jint _" + bufferArgNames.get(i) + out.println(indent + "jint _" + bufferArgNames.get(i) +
"BufferOffset = (jint) 0;"); "BufferOffset = (jint) 0;");
} }
@ -1135,9 +1150,10 @@ public class JniCodeEmitter {
"_base = (" + "_base = (" +
cfunc.getArgType(cIndex).getDeclaration() + cfunc.getArgType(cIndex).getDeclaration() +
")"); ")");
String arrayGetter = jfunc.getArgType(idx).getArrayGetterForPrimitiveArray();
out.println(indent + " " + out.println(indent + " " +
(mUseCPlusPlus ? "_env" : "(*_env)") + (mUseCPlusPlus ? "_env" : "(*_env)") +
"->GetPrimitiveArrayCritical(" + "->" + arrayGetter + "(" +
(mUseCPlusPlus ? "" : "_env, ") + (mUseCPlusPlus ? "" : "_env, ") +
jfunc.getArgName(idx) + jfunc.getArgName(idx) +
"_ref, (jboolean *)0);"); "_ref, (jboolean *)0);");
@ -1209,7 +1225,7 @@ public class JniCodeEmitter {
cfunc.getArgType(cIndex).getDeclaration() + cfunc.getArgType(cIndex).getDeclaration() +
")getPointer(_env, " + ")getPointer(_env, " +
cname + cname +
"_buf, &" + array + ", &" + remaining + ", &" + bufferOffset + "_buf, (jarray*)&" + array + ", &" + remaining + ", &" + bufferOffset +
");"); ");");
} }
@ -1244,9 +1260,17 @@ public class JniCodeEmitter {
} else { } else {
out.println(indent + "if (" + cname +" == NULL) {"); out.println(indent + "if (" + cname +" == NULL) {");
} }
out.println(indent + indent + "char * _" + cname + "Base = (char *)_env->GetPrimitiveArrayCritical(" + array + ", (jboolean *) 0);"); JType argType = jfunc.getArgType(idx);
out.println(indent + indent + cname + " = (" +cfunc.getArgType(cIndex).getDeclaration() +") (_" + cname + "Base + " + bufferOffset + ");"); if (argType.isTypedBuffer()) {
out.println(indent + "}"); String arrayGetter = argType.getArrayTypeForTypedBuffer().getArrayGetterForPrimitiveArray();
out.println(indent + indent + "char * _" + cname + "Base = (char *)_env->" + arrayGetter + "(" + array + ", (jboolean *) 0);");
out.println(indent + indent + cname + " = (" +cfunc.getArgType(cIndex).getDeclaration() +") (_" + cname + "Base + " + bufferOffset + ");");
out.println(indent + "}");
} else {
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 + "}");
}
} }
} }
@ -1336,12 +1360,13 @@ public class JniCodeEmitter {
// the need to write back to the Java array // the need to write back to the Java array
out.println(indent + out.println(indent +
"if (" + jfunc.getArgName(idx) + "_base) {"); "if (" + jfunc.getArgName(idx) + "_base) {");
String arrayReleaser = jfunc.getArgType(idx).getArrayReleaserForPrimitiveArray();
out.println(indent + indent + out.println(indent + indent +
(mUseCPlusPlus ? "_env" : "(*_env)") + (mUseCPlusPlus ? "_env" : "(*_env)") +
"->ReleasePrimitiveArrayCritical(" + "->" + arrayReleaser + "(" +
(mUseCPlusPlus ? "" : "_env, ") + (mUseCPlusPlus ? "" : "_env, ") +
jfunc.getArgName(idx) + "_ref, " + jfunc.getArgName(idx) + "_ref, " +
cfunc.getArgName(cIndex) + "(j" + jfunc.getArgType(idx).getBaseType() + "*)" + cfunc.getArgName(cIndex) +
"_base,"); "_base,");
out.println(indent + indent + indent + out.println(indent + indent + indent +
(cfunc.getArgType(cIndex).isConst() ? (cfunc.getArgType(cIndex).isConst() ?
@ -1350,17 +1375,32 @@ public class JniCodeEmitter {
out.println(indent + "}"); out.println(indent + "}");
} else if (jfunc.getArgType(idx).isBuffer()) { } else if (jfunc.getArgType(idx).isBuffer()) {
if (! isPointerFunc) { if (! isPointerFunc) {
JType argType = jfunc.getArgType(idx);
String array = numBufferArgs <= 1 ? "_array" : String array = numBufferArgs <= 1 ? "_array" :
"_" + cfunc.getArgName(cIndex) + "Array"; "_" + cfunc.getArgName(cIndex) + "Array";
out.println(indent + "if (" + array + ") {"); out.println(indent + "if (" + array + ") {");
out.println(indent + indent + if (argType.isTypedBuffer()) {
"releasePointer(_env, " + array + ", " + String arrayReleaser =
cfunc.getArgName(cIndex) + argType.getArrayTypeForTypedBuffer().getArrayReleaserForPrimitiveArray();
", " + out.println(indent + indent +
(cfunc.getArgType(cIndex).isConst() ? "_env->" + arrayReleaser + "(" + array + ", " +
"JNI_FALSE" : (emitExceptionCheck ? "(j" + argType.getArrayTypeForTypedBuffer().getBaseType() + "*)" +
"_exception ? JNI_FALSE : JNI_TRUE" : "JNI_TRUE")) + cfunc.getArgName(cIndex) +
");"); ", " +
(cfunc.getArgType(cIndex).isConst() ?
"JNI_ABORT" : (emitExceptionCheck ?
"_exception ? JNI_ABORT : 0" : "0")) +
");");
} else {
out.println(indent + indent +
"releasePointer(_env, " + array + ", " +
cfunc.getArgName(cIndex) +
", " +
(cfunc.getArgType(cIndex).isConst() ?
"JNI_FALSE" : (emitExceptionCheck ?
"_exception ? JNI_FALSE : JNI_TRUE" : "JNI_TRUE")) +
");");
}
out.println(indent + "}"); out.println(indent + "}");
} }
} }

View File

@ -27,7 +27,7 @@ android_eglCreatePbufferFromClientBuffer
} }
_remaining = _env->GetArrayLength(attrib_list_ref) - offset; _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *) attrib_list_base = (EGLint *)
_env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset; attrib_list = attrib_list_base + offset;
attrib_list_sentinel = false; attrib_list_sentinel = false;
for (int i = _remaining - 1; i >= 0; i--) { for (int i = _remaining - 1; i >= 0; i--) {
@ -53,7 +53,7 @@ android_eglCreatePbufferFromClientBuffer
exit: exit:
if (attrib_list_base) { if (attrib_list_base) {
_env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
JNI_ABORT); JNI_ABORT);
} }
if (_exception) { if (_exception) {
@ -71,4 +71,3 @@ android_eglCreatePbufferFromClientBufferInt
} }
return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset); return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset);
} }

View File

@ -41,7 +41,7 @@ not_valid_surface:
_remaining = _env->GetArrayLength(attrib_list_ref) - offset; _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *) attrib_list_base = (EGLint *)
_env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset; attrib_list = attrib_list_base + offset;
attrib_list_sentinel = 0; attrib_list_sentinel = 0;
for (int i = _remaining - 1; i >= 0; i--) { for (int i = _remaining - 1; i >= 0; i--) {
@ -66,7 +66,7 @@ not_valid_surface:
exit: exit:
if (attrib_list_base) { if (attrib_list_base) {
_env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
JNI_ABORT); JNI_ABORT);
} }
if (_exception) { if (_exception) {
@ -123,7 +123,7 @@ not_valid_surface:
_remaining = _env->GetArrayLength(attrib_list_ref) - offset; _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *) attrib_list_base = (EGLint *)
_env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset; attrib_list = attrib_list_base + offset;
attrib_list_sentinel = 0; attrib_list_sentinel = 0;
for (int i = _remaining - 1; i >= 0; i--) { for (int i = _remaining - 1; i >= 0; i--) {
@ -148,7 +148,7 @@ not_valid_surface:
exit: exit:
if (attrib_list_base) { if (attrib_list_base) {
_env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
JNI_ABORT); JNI_ABORT);
} }
if (_exception) { if (_exception) {

View File

@ -100,6 +100,116 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o
return NULL; return NULL;
} }
class ByteArrayGetter {
public:
static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
return _env->GetByteArrayElements(array, is_copy);
}
};
class BooleanArrayGetter {
public:
static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
return _env->GetBooleanArrayElements(array, is_copy);
}
};
class CharArrayGetter {
public:
static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
return _env->GetCharArrayElements(array, is_copy);
}
};
class ShortArrayGetter {
public:
static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
return _env->GetShortArrayElements(array, is_copy);
}
};
class IntArrayGetter {
public:
static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
return _env->GetIntArrayElements(array, is_copy);
}
};
class LongArrayGetter {
public:
static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
return _env->GetLongArrayElements(array, is_copy);
}
};
class FloatArrayGetter {
public:
static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
return _env->GetFloatArrayElements(array, is_copy);
}
};
class DoubleArrayGetter {
public:
static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
return _env->GetDoubleArrayElements(array, is_copy);
}
};
template<typename JTYPEARRAY, typename ARRAYGETTER>
static void*
getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
return ARRAYGETTER::Get(_env, array, is_copy);
}
class ByteArrayReleaser {
public:
static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
_env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class BooleanArrayReleaser {
public:
static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
_env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class CharArrayReleaser {
public:
static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
_env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class ShortArrayReleaser {
public:
static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
_env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class IntArrayReleaser {
public:
static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
_env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class LongArrayReleaser {
public:
static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
_env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class FloatArrayReleaser {
public:
static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
_env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
class DoubleArrayReleaser {
public:
static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
_env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
}
};
template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
static void
releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
ARRAYRELEASER::Release(_env, array, data, commit);
}
static void static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{ {
@ -203,7 +313,8 @@ static int getNeededCount(GLint pname) {
return needed; return needed;
} }
template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)> template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void static void
get get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) { (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@ -238,8 +349,8 @@ get
_exceptionMessage = "length - offset < needed"; _exceptionMessage = "length - offset < needed";
goto exit; goto exit;
} }
params_base = (CTYPE *) params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
_env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0); _env, params_ref, (jboolean *)0);
params = params_base + offset; params = params_base + offset;
GET( GET(
@ -249,8 +360,8 @@ get
exit: exit:
if (params_base) { if (params_base) {
_env->ReleasePrimitiveArrayCritical(params_ref, params_base, releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
_exception ? JNI_ABORT: 0); _env, params_ref, params_base, !_exception);
} }
if (_exception) { if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage); jniThrowException(_env, _exceptionType, _exceptionMessage);
@ -258,20 +369,21 @@ exit:
} }
template <typename CTYPE, void GET(GLenum, CTYPE*)> template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void static void
getarray getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0; jint _exception = 0;
const char * _exceptionType; const char * _exceptionType;
const char * _exceptionMessage; const char * _exceptionMessage;
jarray _array = (jarray) 0; JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0; jint _bufferOffset = (jint) 0;
jint _remaining; jint _remaining;
CTYPE *params = (CTYPE *) 0; CTYPE *params = (CTYPE *) 0;
int _needed = 0; int _needed = 0;
params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset); params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count _remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname); _needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed // if we didn't find this pname, we just assume the user passed
@ -284,7 +396,8 @@ getarray
goto exit; goto exit;
} }
if (params == NULL) { if (params == NULL) {
char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0); char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
_env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset); params = (CTYPE *) (_paramsBase + _bufferOffset);
} }
GET( GET(
@ -294,7 +407,8 @@ getarray
exit: exit:
if (_array) { if (_array) {
releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE); releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
_env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
} }
if (_exception) { if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage); jniThrowException(_env, _exceptionType, _exceptionMessage);

View File

@ -36,4 +36,3 @@ android_glDrawElementsInstanced__IIIII
(GLsizei)instanceCount (GLsizei)instanceCount
); );
} }

View File

@ -32,7 +32,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
} }
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *) length_base = (GLsizei *)
_env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset; length = length_base + lengthOffset;
if (!size_ref) { if (!size_ref) {
@ -49,7 +49,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
} }
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *) size_base = (GLint *)
_env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset; size = size_base + sizeOffset;
if (!type_ref) { if (!type_ref) {
@ -66,7 +66,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
} }
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *) type_base = (GLenum *)
_env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset; type = type_base + typeOffset;
if (!name_ref) { if (!name_ref) {
@ -83,7 +83,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
} }
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
name_base = (char *) name_base = (char *)
_env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0); _env->GetByteArrayElements(name_ref, (jboolean *)0);
name = name_base + nameOffset; name = name_base + nameOffset;
glGetActiveAttrib( glGetActiveAttrib(
@ -98,19 +98,19 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
exit: exit:
if (name_base) { if (name_base) {
_env->ReleasePrimitiveArrayCritical(name_ref, name_base, _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (type_base) { if (type_base) {
_env->ReleasePrimitiveArrayCritical(type_ref, type_base, _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (size_base) { if (size_base) {
_env->ReleasePrimitiveArrayCritical(size_ref, size_base, _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (length_base) { if (length_base) {
_env->ReleasePrimitiveArrayCritical(length_ref, length_base, _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception) { if (_exception) {
@ -122,11 +122,11 @@ exit:
static void static void
android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
jarray _lengthArray = (jarray) 0; jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0; jint _lengthBufferOffset = (jint) 0;
jarray _sizeArray = (jarray) 0; jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0; jint _sizeBufferOffset = (jint) 0;
jarray _typeArray = (jarray) 0; jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0; jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining; jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0; GLsizei *length = (GLsizei *) 0;
@ -135,19 +135,19 @@ android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_ni
jint _typeRemaining; jint _typeRemaining;
GLenum *type = (GLenum *) 0; GLenum *type = (GLenum *) 0;
length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (length == NULL) { if (length == NULL) {
char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0); char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset); length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
} }
if (size == NULL) { if (size == NULL) {
char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset); size = (GLint *) (_sizeBase + _sizeBufferOffset);
} }
if (type == NULL) { if (type == NULL) {
char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset); type = (GLenum *) (_typeBase + _typeBufferOffset);
} }
glGetActiveAttrib( glGetActiveAttrib(
@ -160,13 +160,13 @@ android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_ni
reinterpret_cast<char *>(name) reinterpret_cast<char *>(name)
); );
if (_typeArray) { if (_typeArray) {
releasePointer(_env, _typeArray, type, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
} }
if (_sizeArray) { if (_sizeArray) {
releasePointer(_env, _sizeArray, size, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
} }
if (_lengthArray) { if (_lengthArray) {
releasePointer(_env, _lengthArray, length, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
} }
} }
@ -211,7 +211,7 @@ android_glGetActiveAttrib1
} }
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *) size_base = (GLint *)
_env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset; size = size_base + sizeOffset;
if (!type_ref) { if (!type_ref) {
@ -228,7 +228,7 @@ android_glGetActiveAttrib1
} }
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *) type_base = (GLenum *)
_env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset; type = type_base + typeOffset;
glGetActiveAttrib( glGetActiveAttrib(
@ -242,11 +242,11 @@ android_glGetActiveAttrib1
); );
exit: exit:
if (type_base) { if (type_base) {
_env->ReleasePrimitiveArrayCritical(type_ref, type_base, _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (size_base) { if (size_base) {
_env->ReleasePrimitiveArrayCritical(size_ref, size_base, _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception != 1) { if (_exception != 1) {
@ -269,9 +269,9 @@ exit:
static jstring static jstring
android_glGetActiveAttrib2 android_glGetActiveAttrib2
(JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
jarray _sizeArray = (jarray) 0; jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0; jint _sizeBufferOffset = (jint) 0;
jarray _typeArray = (jarray) 0; jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0; jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining; jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0; GLsizei *length = (GLsizei *) 0;
@ -294,14 +294,14 @@ android_glGetActiveAttrib2
return NULL; return NULL;
} }
size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (size == NULL) { if (size == NULL) {
char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset); size = (GLint *) (_sizeBase + _sizeBufferOffset);
} }
if (type == NULL) { if (type == NULL) {
char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset); type = (GLenum *) (_typeBase + _typeBufferOffset);
} }
glGetActiveAttrib( glGetActiveAttrib(
@ -315,10 +315,10 @@ android_glGetActiveAttrib2
); );
if (_typeArray) { if (_typeArray) {
releasePointer(_env, _typeArray, type, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
} }
if (_sizeArray) { if (_sizeArray) {
releasePointer(_env, _sizeArray, size, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
} }
result = _env->NewStringUTF(buf); result = _env->NewStringUTF(buf);
if (buf) { if (buf) {

View File

@ -32,7 +32,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
} }
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *) length_base = (GLsizei *)
_env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset; length = length_base + lengthOffset;
if (!size_ref) { if (!size_ref) {
@ -49,7 +49,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
} }
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *) size_base = (GLint *)
_env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset; size = size_base + sizeOffset;
if (!type_ref) { if (!type_ref) {
@ -66,7 +66,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
} }
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *) type_base = (GLenum *)
_env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset; type = type_base + typeOffset;
if (!name_ref) { if (!name_ref) {
@ -83,7 +83,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
} }
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
name_base = (char *) name_base = (char *)
_env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0); _env->GetByteArrayElements(name_ref, (jboolean *)0);
name = name_base + nameOffset; name = name_base + nameOffset;
glGetActiveUniform( glGetActiveUniform(
@ -98,19 +98,19 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
exit: exit:
if (name_base) { if (name_base) {
_env->ReleasePrimitiveArrayCritical(name_ref, name_base, _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (type_base) { if (type_base) {
_env->ReleasePrimitiveArrayCritical(type_ref, type_base, _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (size_base) { if (size_base) {
_env->ReleasePrimitiveArrayCritical(size_ref, size_base, _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (length_base) { if (length_base) {
_env->ReleasePrimitiveArrayCritical(length_ref, length_base, _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception) { if (_exception) {
@ -122,11 +122,11 @@ exit:
static void static void
android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
jarray _lengthArray = (jarray) 0; jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0; jint _lengthBufferOffset = (jint) 0;
jarray _sizeArray = (jarray) 0; jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0; jint _sizeBufferOffset = (jint) 0;
jarray _typeArray = (jarray) 0; jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0; jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining; jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0; GLsizei *length = (GLsizei *) 0;
@ -135,19 +135,19 @@ android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_n
jint _typeRemaining; jint _typeRemaining;
GLenum *type = (GLenum *) 0; GLenum *type = (GLenum *) 0;
length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (length == NULL) { if (length == NULL) {
char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0); char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset); length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
} }
if (size == NULL) { if (size == NULL) {
char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset); size = (GLint *) (_sizeBase + _sizeBufferOffset);
} }
if (type == NULL) { if (type == NULL) {
char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset); type = (GLenum *) (_typeBase + _typeBufferOffset);
} }
glGetActiveUniform( glGetActiveUniform(
@ -160,13 +160,13 @@ android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_n
reinterpret_cast<char *>(name) reinterpret_cast<char *>(name)
); );
if (_typeArray) { if (_typeArray) {
releasePointer(_env, _typeArray, type, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
} }
if (_sizeArray) { if (_sizeArray) {
releasePointer(_env, _sizeArray, size, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
} }
if (_lengthArray) { if (_lengthArray) {
releasePointer(_env, _lengthArray, length, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
} }
} }
@ -214,7 +214,7 @@ android_glGetActiveUniform1
} }
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *) size_base = (GLint *)
_env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset; size = size_base + sizeOffset;
if (!type_ref) { if (!type_ref) {
@ -231,7 +231,7 @@ android_glGetActiveUniform1
} }
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *) type_base = (GLenum *)
_env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset; type = type_base + typeOffset;
glGetActiveUniform( glGetActiveUniform(
@ -246,11 +246,11 @@ android_glGetActiveUniform1
exit: exit:
if (type_base) { if (type_base) {
_env->ReleasePrimitiveArrayCritical(type_ref, type_base, _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (size_base) { if (size_base) {
_env->ReleasePrimitiveArrayCritical(size_ref, size_base, _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception != 1) { if (_exception != 1) {
@ -272,9 +272,9 @@ exit:
static jstring static jstring
android_glGetActiveUniform2 android_glGetActiveUniform2
(JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
jarray _sizeArray = (jarray) 0; jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0; jint _sizeBufferOffset = (jint) 0;
jarray _typeArray = (jarray) 0; jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0; jint _typeBufferOffset = (jint) 0;
jint _sizeRemaining; jint _sizeRemaining;
GLint *size = (GLint *) 0; GLint *size = (GLint *) 0;
@ -294,15 +294,15 @@ android_glGetActiveUniform2
return NULL; return NULL;
} }
size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (size == NULL) { if (size == NULL) {
char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset); size = (GLint *) (_sizeBase + _sizeBufferOffset);
} }
if (type == NULL) { if (type == NULL) {
char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset); type = (GLenum *) (_typeBase + _typeBufferOffset);
} }
glGetActiveUniform( glGetActiveUniform(
@ -316,10 +316,10 @@ android_glGetActiveUniform2
); );
if (_typeArray) { if (_typeArray) {
releasePointer(_env, _typeArray, type, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
} }
if (_sizeArray) { if (_sizeArray) {
releasePointer(_env, _sizeArray, size, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
} }
result = _env->NewStringUTF(buf); result = _env->NewStringUTF(buf);
if (buf) { if (buf) {

View File

@ -25,7 +25,7 @@ android_glGetActiveUniformBlockName_III_3II_3BI
goto exit; goto exit;
} }
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
_length_base = (GLsizei*)_env->GetPrimitiveArrayCritical( _length_base = (GLsizei*)_env->GetIntArrayElements(
length_ref, (jboolean*)0); length_ref, (jboolean*)0);
_length = _length_base + lengthOffset; _length = _length_base + lengthOffset;
@ -42,7 +42,7 @@ android_glGetActiveUniformBlockName_III_3II_3BI
goto exit; goto exit;
} }
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
_name_base = (GLchar*)_env->GetPrimitiveArrayCritical( _name_base = (GLchar*)_env->GetByteArrayElements(
name_ref, (jboolean*)0); name_ref, (jboolean*)0);
_name = _name_base + nameOffset; _name = _name_base + nameOffset;
@ -56,11 +56,11 @@ android_glGetActiveUniformBlockName_III_3II_3BI
exit: exit:
if (_name_base) { if (_name_base) {
_env->ReleasePrimitiveArrayCritical(name_ref, _name_base, _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_length_base) { if (_length_base) {
_env->ReleasePrimitiveArrayCritical(length_ref, _length_base, _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception) { if (_exception) {
@ -124,4 +124,3 @@ android_glGetActiveUniformBlockName_II
free(name); free(name);
return result; return result;
} }

View File

@ -2,12 +2,14 @@
static void static void
android_glGetBooleanv__I_3ZI android_glGetBooleanv__I_3ZI
(JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) { (JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
get<jbooleanArray, GLboolean, glGetBooleanv>(_env, _this, pname, params_ref, offset); get<jbooleanArray, BooleanArrayGetter, jboolean*, BooleanArrayReleaser, GLboolean, glGetBooleanv>(
_env, _this, pname, params_ref, offset);
} }
/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */ /* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
static void static void
android_glGetBooleanv__ILjava_nio_IntBuffer_2 android_glGetBooleanv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
getarray<GLboolean, glGetBooleanv>(_env, _this, pname, params_buf); getarray<GLboolean, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetBooleanv>(
_env, _this, pname, params_buf);
} }

View File

@ -2,12 +2,14 @@
static void static void
android_glGetFloatv__I_3FI android_glGetFloatv__I_3FI
(JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) { (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
get<jfloatArray, GLfloat, glGetFloatv>(_env, _this, pname, params_ref, offset); get<jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, GLfloat, glGetFloatv>(
_env, _this, pname, params_ref, offset);
} }
/* void glGetFloatv ( GLenum pname, GLfloat *params ) */ /* void glGetFloatv ( GLenum pname, GLfloat *params ) */
static void static void
android_glGetFloatv__ILjava_nio_FloatBuffer_2 android_glGetFloatv__ILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
getarray<GLfloat, glGetFloatv>(_env, _this, pname, params_buf); getarray<GLfloat, jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, glGetFloatv>(
_env, _this, pname, params_buf);
} }

View File

@ -2,13 +2,14 @@
static void static void
android_glGetIntegerv__I_3II android_glGetIntegerv__I_3II
(JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) { (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
get<jintArray, GLint, glGetIntegerv>(_env, _this, pname, params_ref, offset); get<jintArray, IntArrayGetter, jint*, IntArrayReleaser, GLint, glGetIntegerv>(
_env, _this, pname, params_ref, offset);
} }
/* void glGetIntegerv ( GLenum pname, GLint *params ) */ /* void glGetIntegerv ( GLenum pname, GLint *params ) */
static void static void
android_glGetIntegerv__ILjava_nio_IntBuffer_2 android_glGetIntegerv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
getarray<GLint, glGetIntegerv>(_env, _this, pname, params_buf); getarray<GLint, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetIntegerv>(
_env, _this, pname, params_buf);
} }

View File

@ -26,7 +26,7 @@ android_glGetShaderSource__II_3II_3BI
} }
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *) length_base = (GLsizei *)
_env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset; length = length_base + lengthOffset;
if (!source_ref) { if (!source_ref) {
@ -43,7 +43,7 @@ android_glGetShaderSource__II_3II_3BI
} }
_sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset; _sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset;
source_base = (char *) source_base = (char *)
_env->GetPrimitiveArrayCritical(source_ref, (jboolean *)0); _env->GetByteArrayElements(source_ref, (jboolean *)0);
source = source_base + sourceOffset; source = source_base + sourceOffset;
glGetShaderSource( glGetShaderSource(
@ -55,11 +55,11 @@ android_glGetShaderSource__II_3II_3BI
exit: exit:
if (source_base) { if (source_base) {
_env->ReleasePrimitiveArrayCritical(source_ref, source_base, _env->ReleaseByteArrayElements(source_ref, (jbyte*)source_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (length_base) { if (length_base) {
_env->ReleasePrimitiveArrayCritical(length_ref, length_base, _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception) { if (_exception) {
@ -71,14 +71,14 @@ exit:
static void static void
android_glGetShaderSource__IILjava_nio_IntBuffer_2B android_glGetShaderSource__IILjava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) { (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) {
jarray _array = (jarray) 0; jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0; jint _bufferOffset = (jint) 0;
jint _remaining; jint _remaining;
GLsizei *length = (GLsizei *) 0; GLsizei *length = (GLsizei *) 0;
length = (GLsizei *)getPointer(_env, length_buf, &_array, &_remaining, &_bufferOffset); length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (length == NULL) { if (length == NULL) {
char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0); char * _lengthBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _bufferOffset); length = (GLsizei *) (_lengthBase + _bufferOffset);
} }
glGetShaderSource( glGetShaderSource(
@ -88,7 +88,7 @@ android_glGetShaderSource__IILjava_nio_IntBuffer_2B
reinterpret_cast<char *>(source) reinterpret_cast<char *>(source)
); );
if (_array) { if (_array) {
releasePointer(_env, _array, length, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _array, (jint*)length, JNI_TRUE);
} }
} }

View File

@ -32,7 +32,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
} }
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *) length_base = (GLsizei *)
_env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset; length = length_base + lengthOffset;
if (!size_ref) { if (!size_ref) {
@ -49,7 +49,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
} }
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *) size_base = (GLint *)
_env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset; size = size_base + sizeOffset;
if (!type_ref) { if (!type_ref) {
@ -66,7 +66,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
} }
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *) type_base = (GLenum *)
_env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset; type = type_base + typeOffset;
if (!name_ref) { if (!name_ref) {
@ -83,7 +83,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
} }
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
name_base = (char *) name_base = (char *)
_env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0); _env->GetByteArrayElements(name_ref, (jboolean *)0);
name = name_base + nameOffset; name = name_base + nameOffset;
glGetTransformFeedbackVarying( glGetTransformFeedbackVarying(
@ -98,19 +98,19 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
exit: exit:
if (name_base) { if (name_base) {
_env->ReleasePrimitiveArrayCritical(name_ref, name_base, _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (type_base) { if (type_base) {
_env->ReleasePrimitiveArrayCritical(type_ref, type_base, _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (size_base) { if (size_base) {
_env->ReleasePrimitiveArrayCritical(size_ref, size_base, _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (length_base) { if (length_base) {
_env->ReleasePrimitiveArrayCritical(length_ref, length_base, _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception) { if (_exception) {
@ -122,11 +122,11 @@ exit:
static void static void
android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
jarray _lengthArray = (jarray) 0; jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0; jint _lengthBufferOffset = (jint) 0;
jarray _sizeArray = (jarray) 0; jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0; jint _sizeBufferOffset = (jint) 0;
jarray _typeArray = (jarray) 0; jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0; jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining; jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0; GLsizei *length = (GLsizei *) 0;
@ -135,19 +135,19 @@ android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuff
jint _typeRemaining; jint _typeRemaining;
GLenum *type = (GLenum *) 0; GLenum *type = (GLenum *) 0;
length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (length == NULL) { if (length == NULL) {
char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0); char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset); length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
} }
if (size == NULL) { if (size == NULL) {
char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset); size = (GLint *) (_sizeBase + _sizeBufferOffset);
} }
if (type == NULL) { if (type == NULL) {
char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset); type = (GLenum *) (_typeBase + _typeBufferOffset);
} }
glGetTransformFeedbackVarying( glGetTransformFeedbackVarying(
@ -164,13 +164,13 @@ android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuff
(char *)static_cast<uintptr_t>(name) (char *)static_cast<uintptr_t>(name)
); );
if (_typeArray) { if (_typeArray) {
releasePointer(_env, _typeArray, type, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
} }
if (_sizeArray) { if (_sizeArray) {
releasePointer(_env, _sizeArray, size, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
} }
if (_lengthArray) { if (_lengthArray) {
releasePointer(_env, _lengthArray, length, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
} }
} }
@ -215,7 +215,7 @@ android_glGetTransformFeedbackVarying1
} }
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *) size_base = (GLint *)
_env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset; size = size_base + sizeOffset;
if (!type_ref) { if (!type_ref) {
@ -232,7 +232,7 @@ android_glGetTransformFeedbackVarying1
} }
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *) type_base = (GLenum *)
_env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset; type = type_base + typeOffset;
glGetTransformFeedbackVarying( glGetTransformFeedbackVarying(
@ -246,11 +246,11 @@ android_glGetTransformFeedbackVarying1
); );
exit: exit:
if (type_base) { if (type_base) {
_env->ReleasePrimitiveArrayCritical(type_ref, type_base, _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (size_base) { if (size_base) {
_env->ReleasePrimitiveArrayCritical(size_ref, size_base, _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0); _exception ? JNI_ABORT: 0);
} }
if (_exception != 1) { if (_exception != 1) {
@ -273,9 +273,9 @@ exit:
static jstring static jstring
android_glGetTransformFeedbackVarying2 android_glGetTransformFeedbackVarying2
(JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
jarray _sizeArray = (jarray) 0; jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0; jint _sizeBufferOffset = (jint) 0;
jarray _typeArray = (jarray) 0; jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0; jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining; jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0; GLsizei *length = (GLsizei *) 0;
@ -298,14 +298,14 @@ android_glGetTransformFeedbackVarying2
return NULL; return NULL;
} }
size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (size == NULL) { if (size == NULL) {
char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset); size = (GLint *) (_sizeBase + _sizeBufferOffset);
} }
if (type == NULL) { if (type == NULL) {
char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset); type = (GLenum *) (_typeBase + _typeBufferOffset);
} }
glGetTransformFeedbackVarying( glGetTransformFeedbackVarying(
@ -319,10 +319,10 @@ android_glGetTransformFeedbackVarying2
); );
if (_typeArray) { if (_typeArray) {
releasePointer(_env, _typeArray, type, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
} }
if (_sizeArray) { if (_sizeArray) {
releasePointer(_env, _sizeArray, size, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
} }
result = _env->NewStringUTF(buf); result = _env->NewStringUTF(buf);
if (buf) { if (buf) {

View File

@ -49,7 +49,7 @@ android_glGetUniformIndices_array
_exceptionMessage = "not enough space in uniformIndices"; _exceptionMessage = "not enough space in uniformIndices";
goto exit; goto exit;
} }
_indices_base = (GLuint*)_env->GetPrimitiveArrayCritical( _indices_base = (GLuint*)_env->GetIntArrayElements(
uniformIndices_ref, 0); uniformIndices_ref, 0);
_indices = _indices_base + uniformIndicesOffset; _indices = _indices_base + uniformIndicesOffset;
@ -57,8 +57,8 @@ android_glGetUniformIndices_array
exit: exit:
if (_indices_base) { if (_indices_base) {
_env->ReleasePrimitiveArrayCritical(uniformIndices_ref, _indices_base, _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)_indices_base,
_exception ? JNI_ABORT : 0); _exception ? JNI_ABORT : 0);
} }
for (_i = _count - 1; _i >= 0; _i--) { for (_i = _count - 1; _i >= 0; _i--) {
if (_names[_i]) { if (_names[_i]) {
@ -85,7 +85,7 @@ android_glGetUniformIndices_buffer
jint _count = 0; jint _count = 0;
jint _i; jint _i;
const char** _names = NULL; const char** _names = NULL;
jarray _uniformIndicesArray = (jarray)0; jintArray _uniformIndicesArray = (jintArray)0;
jint _uniformIndicesRemaining; jint _uniformIndicesRemaining;
jint _uniformIndicesOffset = 0; jint _uniformIndicesOffset = 0;
GLuint* _indices = NULL; GLuint* _indices = NULL;
@ -118,11 +118,11 @@ android_glGetUniformIndices_buffer
} }
_indices = (GLuint*)getPointer(_env, uniformIndices_buf, _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
&_uniformIndicesArray, &_uniformIndicesRemaining, (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining,
&_uniformIndicesOffset); &_uniformIndicesOffset);
if (!_indices) { if (!_indices) {
_indicesBase = (char*)_env->GetPrimitiveArrayCritical( _indicesBase = (char*)_env->GetIntArrayElements(
_uniformIndicesArray, 0); _uniformIndicesArray, 0);
_indices = (GLuint*)(_indicesBase + _uniformIndicesOffset); _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
} }
if (_uniformIndicesRemaining < _count) { if (_uniformIndicesRemaining < _count) {
@ -136,7 +136,8 @@ android_glGetUniformIndices_buffer
exit: exit:
if (_uniformIndicesArray) { if (_uniformIndicesArray) {
releasePointer(_env, _uniformIndicesArray, _indicesBase, JNI_TRUE); releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(
_env, _uniformIndicesArray, (jint*)_indicesBase, JNI_TRUE);
} }
for (_i = _count - 1; _i >= 0; _i--) { for (_i = _count - 1; _i >= 0; _i--) {
if (_names[_i]) { if (_names[_i]) {
@ -151,4 +152,3 @@ exit:
jniThrowException(_env, _exceptionType, _exceptionMessage); jniThrowException(_env, _exceptionType, _exceptionMessage);
} }
} }