summaryrefslogtreecommitdiffstats
path: root/opengl
diff options
context:
space:
mode:
authorHiroshi Yamauchi2015-05-08 19:54:55 -0500
committerHiroshi Yamauchi2015-05-12 16:24:23 -0500
commit4e7de461c18278a31be83e7c9074a02fbb6e9475 (patch)
tree20b779909ce8ab69ef9ea1b1b4df65e394eaa9ce /opengl
parentaf8ed3f06cf5a0fd37357b438da803f53f33fa56 (diff)
downloadframeworks-native-4e7de461c18278a31be83e7c9074a02fbb6e9475.tar.gz
frameworks-native-4e7de461c18278a31be83e7c9074a02fbb6e9475.tar.xz
frameworks-native-4e7de461c18278a31be83e7c9074a02fbb6e9475.zip
Replace JNI primitive array critical calls with non-critical ones.
The glgen part. Bug: 19235243 Change-Id: I69dfa84f15366808b964517c1ba270ddeb3c5940
Diffstat (limited to 'opengl')
-rw-r--r--opengl/tools/glgen/src/JType.java78
-rw-r--r--opengl/tools/glgen/src/JniCodeEmitter.java76
-rwxr-xr-xopengl/tools/glgen/stubs/egl/eglCreatePbufferFromClientBuffer.cpp5
-rw-r--r--opengl/tools/glgen/stubs/egl/eglCreateWindowSurface.cpp8
-rw-r--r--opengl/tools/glgen/stubs/gles11/common.cpp134
-rw-r--r--opengl/tools/glgen/stubs/gles11/glDrawElementsInstanced.cpp1
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetActiveAttrib.cpp64
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetActiveUniform.cpp64
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetActiveUniformBlockName.cpp9
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetBooleanv.cpp6
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetFloatv.cpp6
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetIntegerv.cpp7
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetShaderSource.cpp16
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetTransformFeedbackVarying.cpp64
-rw-r--r--opengl/tools/glgen/stubs/gles11/glGetUniformIndices.cpp18
15 files changed, 395 insertions, 161 deletions
diff --git a/opengl/tools/glgen/src/JType.java b/opengl/tools/glgen/src/JType.java
index c6e227e5f..5803a44a2 100644
--- a/opengl/tools/glgen/src/JType.java
+++ b/opengl/tools/glgen/src/JType.java
@@ -191,6 +191,84 @@ public class JType {
191 (baseType.indexOf("Buffer") != -1); 191 (baseType.indexOf("Buffer") != -1);
192 } 192 }
193 193
194 public JType getArrayTypeForTypedBuffer() {
195 if (!isTypedBuffer()) {
196 throw new RuntimeException("Not typed buffer type " + this);
197 }
198 switch (baseType) {
199 case "java.nio.ByteBuffer":
200 return new JType("byte", false, true);
201 case "java.nio.BooleanBuffer":
202 return new JType("boolean", false, true);
203 case "java.nio.ShortBuffer":
204 return new JType("short", false, true);
205 case "java.nio.CharBuffer":
206 return new JType("char", false, true);
207 case "java.nio.IntBuffer":
208 return new JType("int", false, true);
209 case "java.nio.LongBuffer":
210 return new JType("long", false, true);
211 case "java.nio.FloatBuffer":
212 return new JType("float", false, true);
213 case "java.nio.DoubleBuffer":
214 return new JType("double", false, true);
215 default:
216 throw new RuntimeException("Unknown typed buffer type " + this);
217 }
218 }
219
220 public String getArrayGetterForPrimitiveArray() {
221 if (!isArray() || isClass()) {
222 throw new RuntimeException("Not array type " + this);
223 }
224 switch (baseType) {
225 case "byte":
226 return "GetByteArrayElements";
227 case "boolean":
228 return "GetBooleanArrayElements";
229 case "short":
230 return "GetShortArrayElements";
231 case "char":
232 return "GetCharArrayElements";
233 case "int":
234 return "GetIntArrayElements";
235 case "long":
236 return "GetLongArrayElements";
237 case "float":
238 return "GetFloatArrayElements";
239 case "double":
240 return "GetDoubleArrayElements";
241 default:
242 throw new RuntimeException("Unknown array type " + this);
243 }
244 }
245
246 public String getArrayReleaserForPrimitiveArray() {
247 if (!isArray() || isClass()) {
248 throw new RuntimeException("Not array type " + this);
249 }
250 switch (baseType) {
251 case "byte":
252 return "ReleaseByteArrayElements";
253 case "boolean":
254 return "ReleaseBooleanArrayElements";
255 case "short":
256 return "ReleaseShortArrayElements";
257 case "char":
258 return "ReleaseCharArrayElements";
259 case "int":
260 return "ReleaseIntArrayElements";
261 case "long":
262 return "ReleaseLongArrayElements";
263 case "float":
264 return "ReleaseFloatArrayElements";
265 case "double":
266 return "ReleaseDoubleArrayElements";
267 default:
268 throw new RuntimeException("Unknown array type " + this);
269 }
270 }
271
194 public boolean isEGLHandle() { 272 public boolean isEGLHandle() {
195 return !isPrimitive() && 273 return !isPrimitive() &&
196 (baseType.startsWith("EGL")); 274 (baseType.startsWith("EGL"));
diff --git a/opengl/tools/glgen/src/JniCodeEmitter.java b/opengl/tools/glgen/src/JniCodeEmitter.java
index e51b7a284..1bed05bb6 100644
--- a/opengl/tools/glgen/src/JniCodeEmitter.java
+++ b/opengl/tools/glgen/src/JniCodeEmitter.java
@@ -812,6 +812,7 @@ public class JniCodeEmitter {
812 List<Integer> stringArgs = new ArrayList<Integer>(); 812 List<Integer> stringArgs = new ArrayList<Integer>();
813 int numBufferArgs = 0; 813 int numBufferArgs = 0;
814 List<String> bufferArgNames = new ArrayList<String>(); 814 List<String> bufferArgNames = new ArrayList<String>();
815 List<JType> bufferArgTypes = new ArrayList<JType>();
815 816
816 // Emit JNI signature (arguments) 817 // Emit JNI signature (arguments)
817 // 818 //
@@ -835,6 +836,7 @@ public class JniCodeEmitter {
835 int cIndex = jfunc.getArgCIndex(i); 836 int cIndex = jfunc.getArgCIndex(i);
836 String cname = cfunc.getArgName(cIndex); 837 String cname = cfunc.getArgName(cIndex);
837 bufferArgNames.add(cname); 838 bufferArgNames.add(cname);
839 bufferArgTypes.add(jfunc.getArgType(i));
838 numBufferArgs++; 840 numBufferArgs++;
839 } 841 }
840 } 842 }
@@ -948,12 +950,25 @@ public class JniCodeEmitter {
948 950
949 // Emit a single _array or multiple _XXXArray variables 951 // Emit a single _array or multiple _XXXArray variables
950 if (numBufferArgs == 1) { 952 if (numBufferArgs == 1) {
953 JType bufferType = bufferArgTypes.get(0);
954 if (bufferType.isTypedBuffer()) {
955 String typedArrayType = getJniType(bufferType.getArrayTypeForTypedBuffer());
956 out.println(indent + typedArrayType + " _array = (" + typedArrayType + ") 0;");
957 } else {
951 out.println(indent + "jarray _array = (jarray) 0;"); 958 out.println(indent + "jarray _array = (jarray) 0;");
952 out.println(indent + "jint _bufferOffset = (jint) 0;"); 959 }
960 out.println(indent + "jint _bufferOffset = (jint) 0;");
953 } else { 961 } else {
954 for (int i = 0; i < numBufferArgs; i++) { 962 for (int i = 0; i < numBufferArgs; i++) {
955 out.println(indent + "jarray _" + bufferArgNames.get(i) + 963 JType bufferType = bufferArgTypes.get(0);
956 "Array = (jarray) 0;"); 964 if (bufferType.isTypedBuffer()) {
965 String typedArrayType = getJniType(bufferType.getArrayTypeForTypedBuffer());
966 out.println(indent + typedArrayType + " _" + bufferArgNames.get(i) +
967 "Array = (" + typedArrayType + ") 0;");
968 } else {
969 out.println(indent + "jarray _" + bufferArgNames.get(i) +
970 "Array = (jarray) 0;");
971 }
957 out.println(indent + "jint _" + bufferArgNames.get(i) + 972 out.println(indent + "jint _" + bufferArgNames.get(i) +
958 "BufferOffset = (jint) 0;"); 973 "BufferOffset = (jint) 0;");
959 } 974 }
@@ -1135,9 +1150,10 @@ public class JniCodeEmitter {
1135 "_base = (" + 1150 "_base = (" +
1136 cfunc.getArgType(cIndex).getDeclaration() + 1151 cfunc.getArgType(cIndex).getDeclaration() +
1137 ")"); 1152 ")");
1153 String arrayGetter = jfunc.getArgType(idx).getArrayGetterForPrimitiveArray();
1138 out.println(indent + " " + 1154 out.println(indent + " " +
1139 (mUseCPlusPlus ? "_env" : "(*_env)") + 1155 (mUseCPlusPlus ? "_env" : "(*_env)") +
1140 "->GetPrimitiveArrayCritical(" + 1156 "->" + arrayGetter + "(" +
1141 (mUseCPlusPlus ? "" : "_env, ") + 1157 (mUseCPlusPlus ? "" : "_env, ") +
1142 jfunc.getArgName(idx) + 1158 jfunc.getArgName(idx) +
1143 "_ref, (jboolean *)0);"); 1159 "_ref, (jboolean *)0);");
@@ -1209,7 +1225,7 @@ public class JniCodeEmitter {
1209 cfunc.getArgType(cIndex).getDeclaration() + 1225 cfunc.getArgType(cIndex).getDeclaration() +
1210 ")getPointer(_env, " + 1226 ")getPointer(_env, " +
1211 cname + 1227 cname +
1212 "_buf, &" + array + ", &" + remaining + ", &" + bufferOffset + 1228 "_buf, (jarray*)&" + array + ", &" + remaining + ", &" + bufferOffset +
1213 ");"); 1229 ");");
1214 } 1230 }
1215 1231
@@ -1244,9 +1260,17 @@ public class JniCodeEmitter {
1244 } else { 1260 } else {
1245 out.println(indent + "if (" + cname +" == NULL) {"); 1261 out.println(indent + "if (" + cname +" == NULL) {");
1246 } 1262 }
1247 out.println(indent + indent + "char * _" + cname + "Base = (char *)_env->GetPrimitiveArrayCritical(" + array + ", (jboolean *) 0);"); 1263 JType argType = jfunc.getArgType(idx);
1248 out.println(indent + indent + cname + " = (" +cfunc.getArgType(cIndex).getDeclaration() +") (_" + cname + "Base + " + bufferOffset + ");"); 1264 if (argType.isTypedBuffer()) {
1249 out.println(indent + "}"); 1265 String arrayGetter = argType.getArrayTypeForTypedBuffer().getArrayGetterForPrimitiveArray();
1266 out.println(indent + indent + "char * _" + cname + "Base = (char *)_env->" + arrayGetter + "(" + array + ", (jboolean *) 0);");
1267 out.println(indent + indent + cname + " = (" +cfunc.getArgType(cIndex).getDeclaration() +") (_" + cname + "Base + " + bufferOffset + ");");
1268 out.println(indent + "}");
1269 } else {
1270 out.println(indent + indent + "char * _" + cname + "Base = (char *)_env->GetPrimitiveArrayCritical(" + array + ", (jboolean *) 0);");
1271 out.println(indent + indent + cname + " = (" +cfunc.getArgType(cIndex).getDeclaration() +") (_" + cname + "Base + " + bufferOffset + ");");
1272 out.println(indent + "}");
1273 }
1250 } 1274 }
1251 } 1275 }
1252 1276
@@ -1336,12 +1360,13 @@ public class JniCodeEmitter {
1336 // the need to write back to the Java array 1360 // the need to write back to the Java array
1337 out.println(indent + 1361 out.println(indent +
1338 "if (" + jfunc.getArgName(idx) + "_base) {"); 1362 "if (" + jfunc.getArgName(idx) + "_base) {");
1363 String arrayReleaser = jfunc.getArgType(idx).getArrayReleaserForPrimitiveArray();
1339 out.println(indent + indent + 1364 out.println(indent + indent +
1340 (mUseCPlusPlus ? "_env" : "(*_env)") + 1365 (mUseCPlusPlus ? "_env" : "(*_env)") +
1341 "->ReleasePrimitiveArrayCritical(" + 1366 "->" + arrayReleaser + "(" +
1342 (mUseCPlusPlus ? "" : "_env, ") + 1367 (mUseCPlusPlus ? "" : "_env, ") +
1343 jfunc.getArgName(idx) + "_ref, " + 1368 jfunc.getArgName(idx) + "_ref, " +
1344 cfunc.getArgName(cIndex) + 1369 "(j" + jfunc.getArgType(idx).getBaseType() + "*)" + cfunc.getArgName(cIndex) +
1345 "_base,"); 1370 "_base,");
1346 out.println(indent + indent + indent + 1371 out.println(indent + indent + indent +
1347 (cfunc.getArgType(cIndex).isConst() ? 1372 (cfunc.getArgType(cIndex).isConst() ?
@@ -1350,17 +1375,32 @@ public class JniCodeEmitter {
1350 out.println(indent + "}"); 1375 out.println(indent + "}");
1351 } else if (jfunc.getArgType(idx).isBuffer()) { 1376 } else if (jfunc.getArgType(idx).isBuffer()) {
1352 if (! isPointerFunc) { 1377 if (! isPointerFunc) {
1378 JType argType = jfunc.getArgType(idx);
1353 String array = numBufferArgs <= 1 ? "_array" : 1379 String array = numBufferArgs <= 1 ? "_array" :
1354 "_" + cfunc.getArgName(cIndex) + "Array"; 1380 "_" + cfunc.getArgName(cIndex) + "Array";
1355 out.println(indent + "if (" + array + ") {"); 1381 out.println(indent + "if (" + array + ") {");
1356 out.println(indent + indent + 1382 if (argType.isTypedBuffer()) {
1357 "releasePointer(_env, " + array + ", " + 1383 String arrayReleaser =
1358 cfunc.getArgName(cIndex) + 1384 argType.getArrayTypeForTypedBuffer().getArrayReleaserForPrimitiveArray();
1359 ", " + 1385 out.println(indent + indent +
1360 (cfunc.getArgType(cIndex).isConst() ? 1386 "_env->" + arrayReleaser + "(" + array + ", " +
1361 "JNI_FALSE" : (emitExceptionCheck ? 1387 "(j" + argType.getArrayTypeForTypedBuffer().getBaseType() + "*)" +
1362 "_exception ? JNI_FALSE : JNI_TRUE" : "JNI_TRUE")) + 1388 cfunc.getArgName(cIndex) +
1363 ");"); 1389 ", " +
1390 (cfunc.getArgType(cIndex).isConst() ?
1391 "JNI_ABORT" : (emitExceptionCheck ?
1392 "_exception ? JNI_ABORT : 0" : "0")) +
1393 ");");
1394 } else {
1395 out.println(indent + indent +
1396 "releasePointer(_env, " + array + ", " +
1397 cfunc.getArgName(cIndex) +
1398 ", " +
1399 (cfunc.getArgType(cIndex).isConst() ?
1400 "JNI_FALSE" : (emitExceptionCheck ?
1401 "_exception ? JNI_FALSE : JNI_TRUE" : "JNI_TRUE")) +
1402 ");");
1403 }
1364 out.println(indent + "}"); 1404 out.println(indent + "}");
1365 } 1405 }
1366 } 1406 }
diff --git a/opengl/tools/glgen/stubs/egl/eglCreatePbufferFromClientBuffer.cpp b/opengl/tools/glgen/stubs/egl/eglCreatePbufferFromClientBuffer.cpp
index f09c17161..6199637d6 100755
--- a/opengl/tools/glgen/stubs/egl/eglCreatePbufferFromClientBuffer.cpp
+++ b/opengl/tools/glgen/stubs/egl/eglCreatePbufferFromClientBuffer.cpp
@@ -27,7 +27,7 @@ android_eglCreatePbufferFromClientBuffer
27 } 27 }
28 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 28 _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
29 attrib_list_base = (EGLint *) 29 attrib_list_base = (EGLint *)
30 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 30 _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
31 attrib_list = attrib_list_base + offset; 31 attrib_list = attrib_list_base + offset;
32 attrib_list_sentinel = false; 32 attrib_list_sentinel = false;
33 for (int i = _remaining - 1; i >= 0; i--) { 33 for (int i = _remaining - 1; i >= 0; i--) {
@@ -53,7 +53,7 @@ android_eglCreatePbufferFromClientBuffer
53 53
54exit: 54exit:
55 if (attrib_list_base) { 55 if (attrib_list_base) {
56 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 56 _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
57 JNI_ABORT); 57 JNI_ABORT);
58 } 58 }
59 if (_exception) { 59 if (_exception) {
@@ -71,4 +71,3 @@ android_eglCreatePbufferFromClientBufferInt
71 } 71 }
72 return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset); 72 return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset);
73} 73}
74
diff --git a/opengl/tools/glgen/stubs/egl/eglCreateWindowSurface.cpp b/opengl/tools/glgen/stubs/egl/eglCreateWindowSurface.cpp
index 0b6bf581e..cc7b85d1d 100644
--- a/opengl/tools/glgen/stubs/egl/eglCreateWindowSurface.cpp
+++ b/opengl/tools/glgen/stubs/egl/eglCreateWindowSurface.cpp
@@ -41,7 +41,7 @@ not_valid_surface:
41 41
42 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 42 _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
43 attrib_list_base = (EGLint *) 43 attrib_list_base = (EGLint *)
44 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 44 _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
45 attrib_list = attrib_list_base + offset; 45 attrib_list = attrib_list_base + offset;
46 attrib_list_sentinel = 0; 46 attrib_list_sentinel = 0;
47 for (int i = _remaining - 1; i >= 0; i--) { 47 for (int i = _remaining - 1; i >= 0; i--) {
@@ -66,7 +66,7 @@ not_valid_surface:
66 66
67exit: 67exit:
68 if (attrib_list_base) { 68 if (attrib_list_base) {
69 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 69 _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
70 JNI_ABORT); 70 JNI_ABORT);
71 } 71 }
72 if (_exception) { 72 if (_exception) {
@@ -123,7 +123,7 @@ not_valid_surface:
123 123
124 _remaining = _env->GetArrayLength(attrib_list_ref) - offset; 124 _remaining = _env->GetArrayLength(attrib_list_ref) - offset;
125 attrib_list_base = (EGLint *) 125 attrib_list_base = (EGLint *)
126 _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0); 126 _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
127 attrib_list = attrib_list_base + offset; 127 attrib_list = attrib_list_base + offset;
128 attrib_list_sentinel = 0; 128 attrib_list_sentinel = 0;
129 for (int i = _remaining - 1; i >= 0; i--) { 129 for (int i = _remaining - 1; i >= 0; i--) {
@@ -148,7 +148,7 @@ not_valid_surface:
148 148
149exit: 149exit:
150 if (attrib_list_base) { 150 if (attrib_list_base) {
151 _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base, 151 _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
152 JNI_ABORT); 152 JNI_ABORT);
153 } 153 }
154 if (_exception) { 154 if (_exception) {
diff --git a/opengl/tools/glgen/stubs/gles11/common.cpp b/opengl/tools/glgen/stubs/gles11/common.cpp
index f7bcb9d8e..18ec5e3e7 100644
--- a/opengl/tools/glgen/stubs/gles11/common.cpp
+++ b/opengl/tools/glgen/stubs/gles11/common.cpp
@@ -100,6 +100,116 @@ getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *o
100 return NULL; 100 return NULL;
101} 101}
102 102
103class ByteArrayGetter {
104public:
105 static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
106 return _env->GetByteArrayElements(array, is_copy);
107 }
108};
109class BooleanArrayGetter {
110public:
111 static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
112 return _env->GetBooleanArrayElements(array, is_copy);
113 }
114};
115class CharArrayGetter {
116public:
117 static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
118 return _env->GetCharArrayElements(array, is_copy);
119 }
120};
121class ShortArrayGetter {
122public:
123 static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
124 return _env->GetShortArrayElements(array, is_copy);
125 }
126};
127class IntArrayGetter {
128public:
129 static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
130 return _env->GetIntArrayElements(array, is_copy);
131 }
132};
133class LongArrayGetter {
134public:
135 static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
136 return _env->GetLongArrayElements(array, is_copy);
137 }
138};
139class FloatArrayGetter {
140public:
141 static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
142 return _env->GetFloatArrayElements(array, is_copy);
143 }
144};
145class DoubleArrayGetter {
146public:
147 static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
148 return _env->GetDoubleArrayElements(array, is_copy);
149 }
150};
151
152template<typename JTYPEARRAY, typename ARRAYGETTER>
153static void*
154getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
155 return ARRAYGETTER::Get(_env, array, is_copy);
156}
157
158class ByteArrayReleaser {
159public:
160 static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
161 _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
162 }
163};
164class BooleanArrayReleaser {
165public:
166 static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
167 _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
168 }
169};
170class CharArrayReleaser {
171public:
172 static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
173 _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
174 }
175};
176class ShortArrayReleaser {
177public:
178 static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
179 _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
180 }
181};
182class IntArrayReleaser {
183public:
184 static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
185 _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
186 }
187};
188class LongArrayReleaser {
189public:
190 static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
191 _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
192 }
193};
194class FloatArrayReleaser {
195public:
196 static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
197 _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
198 }
199};
200class DoubleArrayReleaser {
201public:
202 static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
203 _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
204 }
205};
206
207template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
208static void
209releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
210 ARRAYRELEASER::Release(_env, array, data, commit);
211}
212
103static void 213static void
104releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) 214releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
105{ 215{
@@ -203,7 +313,8 @@ static int getNeededCount(GLint pname) {
203 return needed; 313 return needed;
204} 314}
205 315
206template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)> 316template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
317 typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
207static void 318static void
208get 319get
209 (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) { 320 (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -238,8 +349,8 @@ get
238 _exceptionMessage = "length - offset < needed"; 349 _exceptionMessage = "length - offset < needed";
239 goto exit; 350 goto exit;
240 } 351 }
241 params_base = (CTYPE *) 352 params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
242 _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0); 353 _env, params_ref, (jboolean *)0);
243 params = params_base + offset; 354 params = params_base + offset;
244 355
245 GET( 356 GET(
@@ -249,8 +360,8 @@ get
249 360
250exit: 361exit:
251 if (params_base) { 362 if (params_base) {
252 _env->ReleasePrimitiveArrayCritical(params_ref, params_base, 363 releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
253 _exception ? JNI_ABORT: 0); 364 _env, params_ref, params_base, !_exception);
254 } 365 }
255 if (_exception) { 366 if (_exception) {
256 jniThrowException(_env, _exceptionType, _exceptionMessage); 367 jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -258,20 +369,21 @@ exit:
258} 369}
259 370
260 371
261template <typename CTYPE, void GET(GLenum, CTYPE*)> 372template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
373 typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
262static void 374static void
263getarray 375getarray
264 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { 376 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
265 jint _exception = 0; 377 jint _exception = 0;
266 const char * _exceptionType; 378 const char * _exceptionType;
267 const char * _exceptionMessage; 379 const char * _exceptionMessage;
268 jarray _array = (jarray) 0; 380 JTYPEARRAY _array = (JTYPEARRAY) 0;
269 jint _bufferOffset = (jint) 0; 381 jint _bufferOffset = (jint) 0;
270 jint _remaining; 382 jint _remaining;
271 CTYPE *params = (CTYPE *) 0; 383 CTYPE *params = (CTYPE *) 0;
272 int _needed = 0; 384 int _needed = 0;
273 385
274 params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset); 386 params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
275 _remaining /= sizeof(CTYPE); // convert from bytes to item count 387 _remaining /= sizeof(CTYPE); // convert from bytes to item count
276 _needed = getNeededCount(pname); 388 _needed = getNeededCount(pname);
277 // if we didn't find this pname, we just assume the user passed 389 // if we didn't find this pname, we just assume the user passed
@@ -284,7 +396,8 @@ getarray
284 goto exit; 396 goto exit;
285 } 397 }
286 if (params == NULL) { 398 if (params == NULL) {
287 char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0); 399 char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
400 _env, _array, (jboolean *) 0);
288 params = (CTYPE *) (_paramsBase + _bufferOffset); 401 params = (CTYPE *) (_paramsBase + _bufferOffset);
289 } 402 }
290 GET( 403 GET(
@@ -294,7 +407,8 @@ getarray
294 407
295exit: 408exit:
296 if (_array) { 409 if (_array) {
297 releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE); 410 releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
411 _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
298 } 412 }
299 if (_exception) { 413 if (_exception) {
300 jniThrowException(_env, _exceptionType, _exceptionMessage); 414 jniThrowException(_env, _exceptionType, _exceptionMessage);
diff --git a/opengl/tools/glgen/stubs/gles11/glDrawElementsInstanced.cpp b/opengl/tools/glgen/stubs/gles11/glDrawElementsInstanced.cpp
index d84415215..86decfbe3 100644
--- a/opengl/tools/glgen/stubs/gles11/glDrawElementsInstanced.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glDrawElementsInstanced.cpp
@@ -36,4 +36,3 @@ android_glDrawElementsInstanced__IIIII
36 (GLsizei)instanceCount 36 (GLsizei)instanceCount
37 ); 37 );
38} 38}
39
diff --git a/opengl/tools/glgen/stubs/gles11/glGetActiveAttrib.cpp b/opengl/tools/glgen/stubs/gles11/glGetActiveAttrib.cpp
index 7d414d8f3..a8d63d9d3 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetActiveAttrib.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetActiveAttrib.cpp
@@ -32,7 +32,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
32 } 32 }
33 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 33 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
34 length_base = (GLsizei *) 34 length_base = (GLsizei *)
35 _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); 35 _env->GetIntArrayElements(length_ref, (jboolean *)0);
36 length = length_base + lengthOffset; 36 length = length_base + lengthOffset;
37 37
38 if (!size_ref) { 38 if (!size_ref) {
@@ -49,7 +49,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
49 } 49 }
50 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 50 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
51 size_base = (GLint *) 51 size_base = (GLint *)
52 _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); 52 _env->GetIntArrayElements(size_ref, (jboolean *)0);
53 size = size_base + sizeOffset; 53 size = size_base + sizeOffset;
54 54
55 if (!type_ref) { 55 if (!type_ref) {
@@ -66,7 +66,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
66 } 66 }
67 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 67 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
68 type_base = (GLenum *) 68 type_base = (GLenum *)
69 _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); 69 _env->GetIntArrayElements(type_ref, (jboolean *)0);
70 type = type_base + typeOffset; 70 type = type_base + typeOffset;
71 71
72 if (!name_ref) { 72 if (!name_ref) {
@@ -83,7 +83,7 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
83 } 83 }
84 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 84 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
85 name_base = (char *) 85 name_base = (char *)
86 _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0); 86 _env->GetByteArrayElements(name_ref, (jboolean *)0);
87 name = name_base + nameOffset; 87 name = name_base + nameOffset;
88 88
89 glGetActiveAttrib( 89 glGetActiveAttrib(
@@ -98,19 +98,19 @@ android_glGetActiveAttrib__III_3II_3II_3II_3BI
98 98
99exit: 99exit:
100 if (name_base) { 100 if (name_base) {
101 _env->ReleasePrimitiveArrayCritical(name_ref, name_base, 101 _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
102 _exception ? JNI_ABORT: 0); 102 _exception ? JNI_ABORT: 0);
103 } 103 }
104 if (type_base) { 104 if (type_base) {
105 _env->ReleasePrimitiveArrayCritical(type_ref, type_base, 105 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
106 _exception ? JNI_ABORT: 0); 106 _exception ? JNI_ABORT: 0);
107 } 107 }
108 if (size_base) { 108 if (size_base) {
109 _env->ReleasePrimitiveArrayCritical(size_ref, size_base, 109 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
110 _exception ? JNI_ABORT: 0); 110 _exception ? JNI_ABORT: 0);
111 } 111 }
112 if (length_base) { 112 if (length_base) {
113 _env->ReleasePrimitiveArrayCritical(length_ref, length_base, 113 _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
114 _exception ? JNI_ABORT: 0); 114 _exception ? JNI_ABORT: 0);
115 } 115 }
116 if (_exception) { 116 if (_exception) {
@@ -122,11 +122,11 @@ exit:
122static void 122static void
123android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B 123android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
124 (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { 124 (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
125 jarray _lengthArray = (jarray) 0; 125 jintArray _lengthArray = (jintArray) 0;
126 jint _lengthBufferOffset = (jint) 0; 126 jint _lengthBufferOffset = (jint) 0;
127 jarray _sizeArray = (jarray) 0; 127 jintArray _sizeArray = (jintArray) 0;
128 jint _sizeBufferOffset = (jint) 0; 128 jint _sizeBufferOffset = (jint) 0;
129 jarray _typeArray = (jarray) 0; 129 jintArray _typeArray = (jintArray) 0;
130 jint _typeBufferOffset = (jint) 0; 130 jint _typeBufferOffset = (jint) 0;
131 jint _lengthRemaining; 131 jint _lengthRemaining;
132 GLsizei *length = (GLsizei *) 0; 132 GLsizei *length = (GLsizei *) 0;
@@ -135,19 +135,19 @@ android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_ni
135 jint _typeRemaining; 135 jint _typeRemaining;
136 GLenum *type = (GLenum *) 0; 136 GLenum *type = (GLenum *) 0;
137 137
138 length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 138 length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
139 size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 139 size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
140 type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); 140 type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
141 if (length == NULL) { 141 if (length == NULL) {
142 char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0); 142 char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
143 length = (GLsizei *) (_lengthBase + _lengthBufferOffset); 143 length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
144 } 144 }
145 if (size == NULL) { 145 if (size == NULL) {
146 char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); 146 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
147 size = (GLint *) (_sizeBase + _sizeBufferOffset); 147 size = (GLint *) (_sizeBase + _sizeBufferOffset);
148 } 148 }
149 if (type == NULL) { 149 if (type == NULL) {
150 char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); 150 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
151 type = (GLenum *) (_typeBase + _typeBufferOffset); 151 type = (GLenum *) (_typeBase + _typeBufferOffset);
152 } 152 }
153 glGetActiveAttrib( 153 glGetActiveAttrib(
@@ -160,13 +160,13 @@ android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_ni
160 reinterpret_cast<char *>(name) 160 reinterpret_cast<char *>(name)
161 ); 161 );
162 if (_typeArray) { 162 if (_typeArray) {
163 releasePointer(_env, _typeArray, type, JNI_TRUE); 163 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
164 } 164 }
165 if (_sizeArray) { 165 if (_sizeArray) {
166 releasePointer(_env, _sizeArray, size, JNI_TRUE); 166 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
167 } 167 }
168 if (_lengthArray) { 168 if (_lengthArray) {
169 releasePointer(_env, _lengthArray, length, JNI_TRUE); 169 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
170 } 170 }
171} 171}
172 172
@@ -211,7 +211,7 @@ android_glGetActiveAttrib1
211 } 211 }
212 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 212 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
213 size_base = (GLint *) 213 size_base = (GLint *)
214 _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); 214 _env->GetIntArrayElements(size_ref, (jboolean *)0);
215 size = size_base + sizeOffset; 215 size = size_base + sizeOffset;
216 216
217 if (!type_ref) { 217 if (!type_ref) {
@@ -228,7 +228,7 @@ android_glGetActiveAttrib1
228 } 228 }
229 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 229 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
230 type_base = (GLenum *) 230 type_base = (GLenum *)
231 _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); 231 _env->GetIntArrayElements(type_ref, (jboolean *)0);
232 type = type_base + typeOffset; 232 type = type_base + typeOffset;
233 233
234 glGetActiveAttrib( 234 glGetActiveAttrib(
@@ -242,11 +242,11 @@ android_glGetActiveAttrib1
242 ); 242 );
243exit: 243exit:
244 if (type_base) { 244 if (type_base) {
245 _env->ReleasePrimitiveArrayCritical(type_ref, type_base, 245 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
246 _exception ? JNI_ABORT: 0); 246 _exception ? JNI_ABORT: 0);
247 } 247 }
248 if (size_base) { 248 if (size_base) {
249 _env->ReleasePrimitiveArrayCritical(size_ref, size_base, 249 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
250 _exception ? JNI_ABORT: 0); 250 _exception ? JNI_ABORT: 0);
251 } 251 }
252 if (_exception != 1) { 252 if (_exception != 1) {
@@ -269,9 +269,9 @@ exit:
269static jstring 269static jstring
270android_glGetActiveAttrib2 270android_glGetActiveAttrib2
271 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { 271 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
272 jarray _sizeArray = (jarray) 0; 272 jintArray _sizeArray = (jintArray) 0;
273 jint _sizeBufferOffset = (jint) 0; 273 jint _sizeBufferOffset = (jint) 0;
274 jarray _typeArray = (jarray) 0; 274 jintArray _typeArray = (jintArray) 0;
275 jint _typeBufferOffset = (jint) 0; 275 jint _typeBufferOffset = (jint) 0;
276 jint _lengthRemaining; 276 jint _lengthRemaining;
277 GLsizei *length = (GLsizei *) 0; 277 GLsizei *length = (GLsizei *) 0;
@@ -294,14 +294,14 @@ android_glGetActiveAttrib2
294 return NULL; 294 return NULL;
295 } 295 }
296 296
297 size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 297 size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
298 type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); 298 type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
299 if (size == NULL) { 299 if (size == NULL) {
300 char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); 300 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
301 size = (GLint *) (_sizeBase + _sizeBufferOffset); 301 size = (GLint *) (_sizeBase + _sizeBufferOffset);
302 } 302 }
303 if (type == NULL) { 303 if (type == NULL) {
304 char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); 304 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
305 type = (GLenum *) (_typeBase + _typeBufferOffset); 305 type = (GLenum *) (_typeBase + _typeBufferOffset);
306 } 306 }
307 glGetActiveAttrib( 307 glGetActiveAttrib(
@@ -315,10 +315,10 @@ android_glGetActiveAttrib2
315 ); 315 );
316 316
317 if (_typeArray) { 317 if (_typeArray) {
318 releasePointer(_env, _typeArray, type, JNI_TRUE); 318 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
319 } 319 }
320 if (_sizeArray) { 320 if (_sizeArray) {
321 releasePointer(_env, _sizeArray, size, JNI_TRUE); 321 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
322 } 322 }
323 result = _env->NewStringUTF(buf); 323 result = _env->NewStringUTF(buf);
324 if (buf) { 324 if (buf) {
diff --git a/opengl/tools/glgen/stubs/gles11/glGetActiveUniform.cpp b/opengl/tools/glgen/stubs/gles11/glGetActiveUniform.cpp
index a7376ba90..68e83890e 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetActiveUniform.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetActiveUniform.cpp
@@ -32,7 +32,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
32 } 32 }
33 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 33 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
34 length_base = (GLsizei *) 34 length_base = (GLsizei *)
35 _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); 35 _env->GetIntArrayElements(length_ref, (jboolean *)0);
36 length = length_base + lengthOffset; 36 length = length_base + lengthOffset;
37 37
38 if (!size_ref) { 38 if (!size_ref) {
@@ -49,7 +49,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
49 } 49 }
50 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 50 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
51 size_base = (GLint *) 51 size_base = (GLint *)
52 _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); 52 _env->GetIntArrayElements(size_ref, (jboolean *)0);
53 size = size_base + sizeOffset; 53 size = size_base + sizeOffset;
54 54
55 if (!type_ref) { 55 if (!type_ref) {
@@ -66,7 +66,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
66 } 66 }
67 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 67 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
68 type_base = (GLenum *) 68 type_base = (GLenum *)
69 _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); 69 _env->GetIntArrayElements(type_ref, (jboolean *)0);
70 type = type_base + typeOffset; 70 type = type_base + typeOffset;
71 71
72 if (!name_ref) { 72 if (!name_ref) {
@@ -83,7 +83,7 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
83 } 83 }
84 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 84 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
85 name_base = (char *) 85 name_base = (char *)
86 _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0); 86 _env->GetByteArrayElements(name_ref, (jboolean *)0);
87 name = name_base + nameOffset; 87 name = name_base + nameOffset;
88 88
89 glGetActiveUniform( 89 glGetActiveUniform(
@@ -98,19 +98,19 @@ android_glGetActiveUniform__III_3II_3II_3II_3BI
98 98
99exit: 99exit:
100 if (name_base) { 100 if (name_base) {
101 _env->ReleasePrimitiveArrayCritical(name_ref, name_base, 101 _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
102 _exception ? JNI_ABORT: 0); 102 _exception ? JNI_ABORT: 0);
103 } 103 }
104 if (type_base) { 104 if (type_base) {
105 _env->ReleasePrimitiveArrayCritical(type_ref, type_base, 105 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
106 _exception ? JNI_ABORT: 0); 106 _exception ? JNI_ABORT: 0);
107 } 107 }
108 if (size_base) { 108 if (size_base) {
109 _env->ReleasePrimitiveArrayCritical(size_ref, size_base, 109 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
110 _exception ? JNI_ABORT: 0); 110 _exception ? JNI_ABORT: 0);
111 } 111 }
112 if (length_base) { 112 if (length_base) {
113 _env->ReleasePrimitiveArrayCritical(length_ref, length_base, 113 _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
114 _exception ? JNI_ABORT: 0); 114 _exception ? JNI_ABORT: 0);
115 } 115 }
116 if (_exception) { 116 if (_exception) {
@@ -122,11 +122,11 @@ exit:
122static void 122static void
123android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B 123android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
124 (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { 124 (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
125 jarray _lengthArray = (jarray) 0; 125 jintArray _lengthArray = (jintArray) 0;
126 jint _lengthBufferOffset = (jint) 0; 126 jint _lengthBufferOffset = (jint) 0;
127 jarray _sizeArray = (jarray) 0; 127 jintArray _sizeArray = (jintArray) 0;
128 jint _sizeBufferOffset = (jint) 0; 128 jint _sizeBufferOffset = (jint) 0;
129 jarray _typeArray = (jarray) 0; 129 jintArray _typeArray = (jintArray) 0;
130 jint _typeBufferOffset = (jint) 0; 130 jint _typeBufferOffset = (jint) 0;
131 jint _lengthRemaining; 131 jint _lengthRemaining;
132 GLsizei *length = (GLsizei *) 0; 132 GLsizei *length = (GLsizei *) 0;
@@ -135,19 +135,19 @@ android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_n
135 jint _typeRemaining; 135 jint _typeRemaining;
136 GLenum *type = (GLenum *) 0; 136 GLenum *type = (GLenum *) 0;
137 137
138 length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 138 length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
139 size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 139 size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
140 type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); 140 type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
141 if (length == NULL) { 141 if (length == NULL) {
142 char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0); 142 char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
143 length = (GLsizei *) (_lengthBase + _lengthBufferOffset); 143 length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
144 } 144 }
145 if (size == NULL) { 145 if (size == NULL) {
146 char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); 146 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
147 size = (GLint *) (_sizeBase + _sizeBufferOffset); 147 size = (GLint *) (_sizeBase + _sizeBufferOffset);
148 } 148 }
149 if (type == NULL) { 149 if (type == NULL) {
150 char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); 150 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
151 type = (GLenum *) (_typeBase + _typeBufferOffset); 151 type = (GLenum *) (_typeBase + _typeBufferOffset);
152 } 152 }
153 glGetActiveUniform( 153 glGetActiveUniform(
@@ -160,13 +160,13 @@ android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_n
160 reinterpret_cast<char *>(name) 160 reinterpret_cast<char *>(name)
161 ); 161 );
162 if (_typeArray) { 162 if (_typeArray) {
163 releasePointer(_env, _typeArray, type, JNI_TRUE); 163 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
164 } 164 }
165 if (_sizeArray) { 165 if (_sizeArray) {
166 releasePointer(_env, _sizeArray, size, JNI_TRUE); 166 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
167 } 167 }
168 if (_lengthArray) { 168 if (_lengthArray) {
169 releasePointer(_env, _lengthArray, length, JNI_TRUE); 169 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
170 } 170 }
171} 171}
172 172
@@ -214,7 +214,7 @@ android_glGetActiveUniform1
214 } 214 }
215 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 215 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
216 size_base = (GLint *) 216 size_base = (GLint *)
217 _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); 217 _env->GetIntArrayElements(size_ref, (jboolean *)0);
218 size = size_base + sizeOffset; 218 size = size_base + sizeOffset;
219 219
220 if (!type_ref) { 220 if (!type_ref) {
@@ -231,7 +231,7 @@ android_glGetActiveUniform1
231 } 231 }
232 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 232 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
233 type_base = (GLenum *) 233 type_base = (GLenum *)
234 _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); 234 _env->GetIntArrayElements(type_ref, (jboolean *)0);
235 type = type_base + typeOffset; 235 type = type_base + typeOffset;
236 236
237 glGetActiveUniform( 237 glGetActiveUniform(
@@ -246,11 +246,11 @@ android_glGetActiveUniform1
246 246
247exit: 247exit:
248 if (type_base) { 248 if (type_base) {
249 _env->ReleasePrimitiveArrayCritical(type_ref, type_base, 249 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
250 _exception ? JNI_ABORT: 0); 250 _exception ? JNI_ABORT: 0);
251 } 251 }
252 if (size_base) { 252 if (size_base) {
253 _env->ReleasePrimitiveArrayCritical(size_ref, size_base, 253 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
254 _exception ? JNI_ABORT: 0); 254 _exception ? JNI_ABORT: 0);
255 } 255 }
256 if (_exception != 1) { 256 if (_exception != 1) {
@@ -272,9 +272,9 @@ exit:
272static jstring 272static jstring
273android_glGetActiveUniform2 273android_glGetActiveUniform2
274 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { 274 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
275 jarray _sizeArray = (jarray) 0; 275 jintArray _sizeArray = (jintArray) 0;
276 jint _sizeBufferOffset = (jint) 0; 276 jint _sizeBufferOffset = (jint) 0;
277 jarray _typeArray = (jarray) 0; 277 jintArray _typeArray = (jintArray) 0;
278 jint _typeBufferOffset = (jint) 0; 278 jint _typeBufferOffset = (jint) 0;
279 jint _sizeRemaining; 279 jint _sizeRemaining;
280 GLint *size = (GLint *) 0; 280 GLint *size = (GLint *) 0;
@@ -294,15 +294,15 @@ android_glGetActiveUniform2
294 return NULL; 294 return NULL;
295 } 295 }
296 296
297 size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 297 size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
298 type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); 298 type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
299 299
300 if (size == NULL) { 300 if (size == NULL) {
301 char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); 301 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
302 size = (GLint *) (_sizeBase + _sizeBufferOffset); 302 size = (GLint *) (_sizeBase + _sizeBufferOffset);
303 } 303 }
304 if (type == NULL) { 304 if (type == NULL) {
305 char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); 305 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
306 type = (GLenum *) (_typeBase + _typeBufferOffset); 306 type = (GLenum *) (_typeBase + _typeBufferOffset);
307 } 307 }
308 glGetActiveUniform( 308 glGetActiveUniform(
@@ -316,10 +316,10 @@ android_glGetActiveUniform2
316 ); 316 );
317 317
318 if (_typeArray) { 318 if (_typeArray) {
319 releasePointer(_env, _typeArray, type, JNI_TRUE); 319 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
320 } 320 }
321 if (_sizeArray) { 321 if (_sizeArray) {
322 releasePointer(_env, _sizeArray, size, JNI_TRUE); 322 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
323 } 323 }
324 result = _env->NewStringUTF(buf); 324 result = _env->NewStringUTF(buf);
325 if (buf) { 325 if (buf) {
diff --git a/opengl/tools/glgen/stubs/gles11/glGetActiveUniformBlockName.cpp b/opengl/tools/glgen/stubs/gles11/glGetActiveUniformBlockName.cpp
index bb6ae7cea..6104c84e7 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetActiveUniformBlockName.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetActiveUniformBlockName.cpp
@@ -25,7 +25,7 @@ android_glGetActiveUniformBlockName_III_3II_3BI
25 goto exit; 25 goto exit;
26 } 26 }
27 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 27 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
28 _length_base = (GLsizei*)_env->GetPrimitiveArrayCritical( 28 _length_base = (GLsizei*)_env->GetIntArrayElements(
29 length_ref, (jboolean*)0); 29 length_ref, (jboolean*)0);
30 _length = _length_base + lengthOffset; 30 _length = _length_base + lengthOffset;
31 31
@@ -42,7 +42,7 @@ android_glGetActiveUniformBlockName_III_3II_3BI
42 goto exit; 42 goto exit;
43 } 43 }
44 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 44 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
45 _name_base = (GLchar*)_env->GetPrimitiveArrayCritical( 45 _name_base = (GLchar*)_env->GetByteArrayElements(
46 name_ref, (jboolean*)0); 46 name_ref, (jboolean*)0);
47 _name = _name_base + nameOffset; 47 _name = _name_base + nameOffset;
48 48
@@ -56,11 +56,11 @@ android_glGetActiveUniformBlockName_III_3II_3BI
56 56
57exit: 57exit:
58 if (_name_base) { 58 if (_name_base) {
59 _env->ReleasePrimitiveArrayCritical(name_ref, _name_base, 59 _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base,
60 _exception ? JNI_ABORT: 0); 60 _exception ? JNI_ABORT: 0);
61 } 61 }
62 if (_length_base) { 62 if (_length_base) {
63 _env->ReleasePrimitiveArrayCritical(length_ref, _length_base, 63 _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base,
64 _exception ? JNI_ABORT: 0); 64 _exception ? JNI_ABORT: 0);
65 } 65 }
66 if (_exception) { 66 if (_exception) {
@@ -124,4 +124,3 @@ android_glGetActiveUniformBlockName_II
124 free(name); 124 free(name);
125 return result; 125 return result;
126} 126}
127
diff --git a/opengl/tools/glgen/stubs/gles11/glGetBooleanv.cpp b/opengl/tools/glgen/stubs/gles11/glGetBooleanv.cpp
index 00c52af15..7874bd875 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetBooleanv.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetBooleanv.cpp
@@ -2,12 +2,14 @@
2static void 2static void
3android_glGetBooleanv__I_3ZI 3android_glGetBooleanv__I_3ZI
4 (JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) { 4 (JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
5 get<jbooleanArray, GLboolean, glGetBooleanv>(_env, _this, pname, params_ref, offset); 5 get<jbooleanArray, BooleanArrayGetter, jboolean*, BooleanArrayReleaser, GLboolean, glGetBooleanv>(
6 _env, _this, pname, params_ref, offset);
6} 7}
7 8
8/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */ 9/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
9static void 10static void
10android_glGetBooleanv__ILjava_nio_IntBuffer_2 11android_glGetBooleanv__ILjava_nio_IntBuffer_2
11 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { 12 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
12 getarray<GLboolean, glGetBooleanv>(_env, _this, pname, params_buf); 13 getarray<GLboolean, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetBooleanv>(
14 _env, _this, pname, params_buf);
13} 15}
diff --git a/opengl/tools/glgen/stubs/gles11/glGetFloatv.cpp b/opengl/tools/glgen/stubs/gles11/glGetFloatv.cpp
index 71c399de2..2f41fd1cf 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetFloatv.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetFloatv.cpp
@@ -2,12 +2,14 @@
2static void 2static void
3android_glGetFloatv__I_3FI 3android_glGetFloatv__I_3FI
4 (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) { 4 (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
5 get<jfloatArray, GLfloat, glGetFloatv>(_env, _this, pname, params_ref, offset); 5 get<jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, GLfloat, glGetFloatv>(
6 _env, _this, pname, params_ref, offset);
6} 7}
7 8
8/* void glGetFloatv ( GLenum pname, GLfloat *params ) */ 9/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
9static void 10static void
10android_glGetFloatv__ILjava_nio_FloatBuffer_2 11android_glGetFloatv__ILjava_nio_FloatBuffer_2
11 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { 12 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
12 getarray<GLfloat, glGetFloatv>(_env, _this, pname, params_buf); 13 getarray<GLfloat, jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, glGetFloatv>(
14 _env, _this, pname, params_buf);
13} 15}
diff --git a/opengl/tools/glgen/stubs/gles11/glGetIntegerv.cpp b/opengl/tools/glgen/stubs/gles11/glGetIntegerv.cpp
index 9000ece83..c960f31af 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetIntegerv.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetIntegerv.cpp
@@ -2,13 +2,14 @@
2static void 2static void
3android_glGetIntegerv__I_3II 3android_glGetIntegerv__I_3II
4 (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) { 4 (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
5 get<jintArray, GLint, glGetIntegerv>(_env, _this, pname, params_ref, offset); 5 get<jintArray, IntArrayGetter, jint*, IntArrayReleaser, GLint, glGetIntegerv>(
6 _env, _this, pname, params_ref, offset);
6} 7}
7 8
8/* void glGetIntegerv ( GLenum pname, GLint *params ) */ 9/* void glGetIntegerv ( GLenum pname, GLint *params ) */
9static void 10static void
10android_glGetIntegerv__ILjava_nio_IntBuffer_2 11android_glGetIntegerv__ILjava_nio_IntBuffer_2
11 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) { 12 (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
12 getarray<GLint, glGetIntegerv>(_env, _this, pname, params_buf); 13 getarray<GLint, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetIntegerv>(
14 _env, _this, pname, params_buf);
13} 15}
14
diff --git a/opengl/tools/glgen/stubs/gles11/glGetShaderSource.cpp b/opengl/tools/glgen/stubs/gles11/glGetShaderSource.cpp
index c995d9cef..d9808ef07 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetShaderSource.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetShaderSource.cpp
@@ -26,7 +26,7 @@ android_glGetShaderSource__II_3II_3BI
26 } 26 }
27 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 27 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
28 length_base = (GLsizei *) 28 length_base = (GLsizei *)
29 _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); 29 _env->GetIntArrayElements(length_ref, (jboolean *)0);
30 length = length_base + lengthOffset; 30 length = length_base + lengthOffset;
31 31
32 if (!source_ref) { 32 if (!source_ref) {
@@ -43,7 +43,7 @@ android_glGetShaderSource__II_3II_3BI
43 } 43 }
44 _sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset; 44 _sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset;
45 source_base = (char *) 45 source_base = (char *)
46 _env->GetPrimitiveArrayCritical(source_ref, (jboolean *)0); 46 _env->GetByteArrayElements(source_ref, (jboolean *)0);
47 source = source_base + sourceOffset; 47 source = source_base + sourceOffset;
48 48
49 glGetShaderSource( 49 glGetShaderSource(
@@ -55,11 +55,11 @@ android_glGetShaderSource__II_3II_3BI
55 55
56exit: 56exit:
57 if (source_base) { 57 if (source_base) {
58 _env->ReleasePrimitiveArrayCritical(source_ref, source_base, 58 _env->ReleaseByteArrayElements(source_ref, (jbyte*)source_base,
59 _exception ? JNI_ABORT: 0); 59 _exception ? JNI_ABORT: 0);
60 } 60 }
61 if (length_base) { 61 if (length_base) {
62 _env->ReleasePrimitiveArrayCritical(length_ref, length_base, 62 _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
63 _exception ? JNI_ABORT: 0); 63 _exception ? JNI_ABORT: 0);
64 } 64 }
65 if (_exception) { 65 if (_exception) {
@@ -71,14 +71,14 @@ exit:
71static void 71static void
72android_glGetShaderSource__IILjava_nio_IntBuffer_2B 72android_glGetShaderSource__IILjava_nio_IntBuffer_2B
73 (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) { 73 (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) {
74 jarray _array = (jarray) 0; 74 jintArray _array = (jintArray) 0;
75 jint _bufferOffset = (jint) 0; 75 jint _bufferOffset = (jint) 0;
76 jint _remaining; 76 jint _remaining;
77 GLsizei *length = (GLsizei *) 0; 77 GLsizei *length = (GLsizei *) 0;
78 78
79 length = (GLsizei *)getPointer(_env, length_buf, &_array, &_remaining, &_bufferOffset); 79 length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
80 if (length == NULL) { 80 if (length == NULL) {
81 char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0); 81 char * _lengthBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
82 length = (GLsizei *) (_lengthBase + _bufferOffset); 82 length = (GLsizei *) (_lengthBase + _bufferOffset);
83 } 83 }
84 glGetShaderSource( 84 glGetShaderSource(
@@ -88,7 +88,7 @@ android_glGetShaderSource__IILjava_nio_IntBuffer_2B
88 reinterpret_cast<char *>(source) 88 reinterpret_cast<char *>(source)
89 ); 89 );
90 if (_array) { 90 if (_array) {
91 releasePointer(_env, _array, length, JNI_TRUE); 91 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _array, (jint*)length, JNI_TRUE);
92 } 92 }
93} 93}
94 94
diff --git a/opengl/tools/glgen/stubs/gles11/glGetTransformFeedbackVarying.cpp b/opengl/tools/glgen/stubs/gles11/glGetTransformFeedbackVarying.cpp
index a977693f3..cb656c806 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetTransformFeedbackVarying.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetTransformFeedbackVarying.cpp
@@ -32,7 +32,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
32 } 32 }
33 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 33 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
34 length_base = (GLsizei *) 34 length_base = (GLsizei *)
35 _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0); 35 _env->GetIntArrayElements(length_ref, (jboolean *)0);
36 length = length_base + lengthOffset; 36 length = length_base + lengthOffset;
37 37
38 if (!size_ref) { 38 if (!size_ref) {
@@ -49,7 +49,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
49 } 49 }
50 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 50 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
51 size_base = (GLint *) 51 size_base = (GLint *)
52 _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); 52 _env->GetIntArrayElements(size_ref, (jboolean *)0);
53 size = size_base + sizeOffset; 53 size = size_base + sizeOffset;
54 54
55 if (!type_ref) { 55 if (!type_ref) {
@@ -66,7 +66,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
66 } 66 }
67 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 67 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
68 type_base = (GLenum *) 68 type_base = (GLenum *)
69 _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); 69 _env->GetIntArrayElements(type_ref, (jboolean *)0);
70 type = type_base + typeOffset; 70 type = type_base + typeOffset;
71 71
72 if (!name_ref) { 72 if (!name_ref) {
@@ -83,7 +83,7 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
83 } 83 }
84 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 84 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
85 name_base = (char *) 85 name_base = (char *)
86 _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0); 86 _env->GetByteArrayElements(name_ref, (jboolean *)0);
87 name = name_base + nameOffset; 87 name = name_base + nameOffset;
88 88
89 glGetTransformFeedbackVarying( 89 glGetTransformFeedbackVarying(
@@ -98,19 +98,19 @@ android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
98 98
99exit: 99exit:
100 if (name_base) { 100 if (name_base) {
101 _env->ReleasePrimitiveArrayCritical(name_ref, name_base, 101 _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
102 _exception ? JNI_ABORT: 0); 102 _exception ? JNI_ABORT: 0);
103 } 103 }
104 if (type_base) { 104 if (type_base) {
105 _env->ReleasePrimitiveArrayCritical(type_ref, type_base, 105 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
106 _exception ? JNI_ABORT: 0); 106 _exception ? JNI_ABORT: 0);
107 } 107 }
108 if (size_base) { 108 if (size_base) {
109 _env->ReleasePrimitiveArrayCritical(size_ref, size_base, 109 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
110 _exception ? JNI_ABORT: 0); 110 _exception ? JNI_ABORT: 0);
111 } 111 }
112 if (length_base) { 112 if (length_base) {
113 _env->ReleasePrimitiveArrayCritical(length_ref, length_base, 113 _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
114 _exception ? JNI_ABORT: 0); 114 _exception ? JNI_ABORT: 0);
115 } 115 }
116 if (_exception) { 116 if (_exception) {
@@ -122,11 +122,11 @@ exit:
122static void 122static void
123android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B 123android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
124 (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { 124 (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
125 jarray _lengthArray = (jarray) 0; 125 jintArray _lengthArray = (jintArray) 0;
126 jint _lengthBufferOffset = (jint) 0; 126 jint _lengthBufferOffset = (jint) 0;
127 jarray _sizeArray = (jarray) 0; 127 jintArray _sizeArray = (jintArray) 0;
128 jint _sizeBufferOffset = (jint) 0; 128 jint _sizeBufferOffset = (jint) 0;
129 jarray _typeArray = (jarray) 0; 129 jintArray _typeArray = (jintArray) 0;
130 jint _typeBufferOffset = (jint) 0; 130 jint _typeBufferOffset = (jint) 0;
131 jint _lengthRemaining; 131 jint _lengthRemaining;
132 GLsizei *length = (GLsizei *) 0; 132 GLsizei *length = (GLsizei *) 0;
@@ -135,19 +135,19 @@ android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuff
135 jint _typeRemaining; 135 jint _typeRemaining;
136 GLenum *type = (GLenum *) 0; 136 GLenum *type = (GLenum *) 0;
137 137
138 length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 138 length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
139 size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 139 size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
140 type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); 140 type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
141 if (length == NULL) { 141 if (length == NULL) {
142 char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0); 142 char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
143 length = (GLsizei *) (_lengthBase + _lengthBufferOffset); 143 length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
144 } 144 }
145 if (size == NULL) { 145 if (size == NULL) {
146 char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); 146 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
147 size = (GLint *) (_sizeBase + _sizeBufferOffset); 147 size = (GLint *) (_sizeBase + _sizeBufferOffset);
148 } 148 }
149 if (type == NULL) { 149 if (type == NULL) {
150 char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); 150 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
151 type = (GLenum *) (_typeBase + _typeBufferOffset); 151 type = (GLenum *) (_typeBase + _typeBufferOffset);
152 } 152 }
153 glGetTransformFeedbackVarying( 153 glGetTransformFeedbackVarying(
@@ -164,13 +164,13 @@ android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuff
164 (char *)static_cast<uintptr_t>(name) 164 (char *)static_cast<uintptr_t>(name)
165 ); 165 );
166 if (_typeArray) { 166 if (_typeArray) {
167 releasePointer(_env, _typeArray, type, JNI_TRUE); 167 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
168 } 168 }
169 if (_sizeArray) { 169 if (_sizeArray) {
170 releasePointer(_env, _sizeArray, size, JNI_TRUE); 170 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
171 } 171 }
172 if (_lengthArray) { 172 if (_lengthArray) {
173 releasePointer(_env, _lengthArray, length, JNI_TRUE); 173 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
174 } 174 }
175} 175}
176 176
@@ -215,7 +215,7 @@ android_glGetTransformFeedbackVarying1
215 } 215 }
216 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 216 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
217 size_base = (GLint *) 217 size_base = (GLint *)
218 _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0); 218 _env->GetIntArrayElements(size_ref, (jboolean *)0);
219 size = size_base + sizeOffset; 219 size = size_base + sizeOffset;
220 220
221 if (!type_ref) { 221 if (!type_ref) {
@@ -232,7 +232,7 @@ android_glGetTransformFeedbackVarying1
232 } 232 }
233 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 233 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
234 type_base = (GLenum *) 234 type_base = (GLenum *)
235 _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0); 235 _env->GetIntArrayElements(type_ref, (jboolean *)0);
236 type = type_base + typeOffset; 236 type = type_base + typeOffset;
237 237
238 glGetTransformFeedbackVarying( 238 glGetTransformFeedbackVarying(
@@ -246,11 +246,11 @@ android_glGetTransformFeedbackVarying1
246 ); 246 );
247exit: 247exit:
248 if (type_base) { 248 if (type_base) {
249 _env->ReleasePrimitiveArrayCritical(type_ref, type_base, 249 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
250 _exception ? JNI_ABORT: 0); 250 _exception ? JNI_ABORT: 0);
251 } 251 }
252 if (size_base) { 252 if (size_base) {
253 _env->ReleasePrimitiveArrayCritical(size_ref, size_base, 253 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
254 _exception ? JNI_ABORT: 0); 254 _exception ? JNI_ABORT: 0);
255 } 255 }
256 if (_exception != 1) { 256 if (_exception != 1) {
@@ -273,9 +273,9 @@ exit:
273static jstring 273static jstring
274android_glGetTransformFeedbackVarying2 274android_glGetTransformFeedbackVarying2
275 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { 275 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
276 jarray _sizeArray = (jarray) 0; 276 jintArray _sizeArray = (jintArray) 0;
277 jint _sizeBufferOffset = (jint) 0; 277 jint _sizeBufferOffset = (jint) 0;
278 jarray _typeArray = (jarray) 0; 278 jintArray _typeArray = (jintArray) 0;
279 jint _typeBufferOffset = (jint) 0; 279 jint _typeBufferOffset = (jint) 0;
280 jint _lengthRemaining; 280 jint _lengthRemaining;
281 GLsizei *length = (GLsizei *) 0; 281 GLsizei *length = (GLsizei *) 0;
@@ -298,14 +298,14 @@ android_glGetTransformFeedbackVarying2
298 return NULL; 298 return NULL;
299 } 299 }
300 300
301 size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 301 size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
302 type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset); 302 type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
303 if (size == NULL) { 303 if (size == NULL) {
304 char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0); 304 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
305 size = (GLint *) (_sizeBase + _sizeBufferOffset); 305 size = (GLint *) (_sizeBase + _sizeBufferOffset);
306 } 306 }
307 if (type == NULL) { 307 if (type == NULL) {
308 char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0); 308 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
309 type = (GLenum *) (_typeBase + _typeBufferOffset); 309 type = (GLenum *) (_typeBase + _typeBufferOffset);
310 } 310 }
311 glGetTransformFeedbackVarying( 311 glGetTransformFeedbackVarying(
@@ -319,10 +319,10 @@ android_glGetTransformFeedbackVarying2
319 ); 319 );
320 320
321 if (_typeArray) { 321 if (_typeArray) {
322 releasePointer(_env, _typeArray, type, JNI_TRUE); 322 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
323 } 323 }
324 if (_sizeArray) { 324 if (_sizeArray) {
325 releasePointer(_env, _sizeArray, size, JNI_TRUE); 325 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
326 } 326 }
327 result = _env->NewStringUTF(buf); 327 result = _env->NewStringUTF(buf);
328 if (buf) { 328 if (buf) {
diff --git a/opengl/tools/glgen/stubs/gles11/glGetUniformIndices.cpp b/opengl/tools/glgen/stubs/gles11/glGetUniformIndices.cpp
index fb137ab4f..13ef01e29 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetUniformIndices.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetUniformIndices.cpp
@@ -49,7 +49,7 @@ android_glGetUniformIndices_array
49 _exceptionMessage = "not enough space in uniformIndices"; 49 _exceptionMessage = "not enough space in uniformIndices";
50 goto exit; 50 goto exit;
51 } 51 }
52 _indices_base = (GLuint*)_env->GetPrimitiveArrayCritical( 52 _indices_base = (GLuint*)_env->GetIntArrayElements(
53 uniformIndices_ref, 0); 53 uniformIndices_ref, 0);
54 _indices = _indices_base + uniformIndicesOffset; 54 _indices = _indices_base + uniformIndicesOffset;
55 55
@@ -57,8 +57,8 @@ android_glGetUniformIndices_array
57 57
58exit: 58exit:
59 if (_indices_base) { 59 if (_indices_base) {
60 _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, _indices_base, 60 _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)_indices_base,
61 _exception ? JNI_ABORT : 0); 61 _exception ? JNI_ABORT : 0);
62 } 62 }
63 for (_i = _count - 1; _i >= 0; _i--) { 63 for (_i = _count - 1; _i >= 0; _i--) {
64 if (_names[_i]) { 64 if (_names[_i]) {
@@ -85,7 +85,7 @@ android_glGetUniformIndices_buffer
85 jint _count = 0; 85 jint _count = 0;
86 jint _i; 86 jint _i;
87 const char** _names = NULL; 87 const char** _names = NULL;
88 jarray _uniformIndicesArray = (jarray)0; 88 jintArray _uniformIndicesArray = (jintArray)0;
89 jint _uniformIndicesRemaining; 89 jint _uniformIndicesRemaining;
90 jint _uniformIndicesOffset = 0; 90 jint _uniformIndicesOffset = 0;
91 GLuint* _indices = NULL; 91 GLuint* _indices = NULL;
@@ -118,11 +118,11 @@ android_glGetUniformIndices_buffer
118 } 118 }
119 119
120 _indices = (GLuint*)getPointer(_env, uniformIndices_buf, 120 _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
121 &_uniformIndicesArray, &_uniformIndicesRemaining, 121 (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining,
122 &_uniformIndicesOffset); 122 &_uniformIndicesOffset);
123 if (!_indices) { 123 if (!_indices) {
124 _indicesBase = (char*)_env->GetPrimitiveArrayCritical( 124 _indicesBase = (char*)_env->GetIntArrayElements(
125 _uniformIndicesArray, 0); 125 _uniformIndicesArray, 0);
126 _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset); 126 _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
127 } 127 }
128 if (_uniformIndicesRemaining < _count) { 128 if (_uniformIndicesRemaining < _count) {
@@ -136,7 +136,8 @@ android_glGetUniformIndices_buffer
136 136
137exit: 137exit:
138 if (_uniformIndicesArray) { 138 if (_uniformIndicesArray) {
139 releasePointer(_env, _uniformIndicesArray, _indicesBase, JNI_TRUE); 139 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(
140 _env, _uniformIndicesArray, (jint*)_indicesBase, JNI_TRUE);
140 } 141 }
141 for (_i = _count - 1; _i >= 0; _i--) { 142 for (_i = _count - 1; _i >= 0; _i--) {
142 if (_names[_i]) { 143 if (_names[_i]) {
@@ -151,4 +152,3 @@ exit:
151 jniThrowException(_env, _exceptionType, _exceptionMessage); 152 jniThrowException(_env, _exceptionType, _exceptionMessage);
152 } 153 }
153} 154}
154