OSDN Git Service

Fix vulnerability where large GPS XTRA data can be injected. -Can potentially crash...
[android-x86/frameworks-base.git] / core / jni / android_opengl_GLES30.cpp
1 /*
2 **
3 ** Copyright 2013, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17
18 // This source file is automatically generated
19
20 #include <GLES3/gl3.h>
21 #include <GLES3/gl3ext.h>
22
23 #include <jni.h>
24 #include <JNIHelp.h>
25 #include <android_runtime/AndroidRuntime.h>
26 #include <utils/misc.h>
27 #include <assert.h>
28
29 static int initialized = 0;
30
31 static jclass nioAccessClass;
32 static jclass bufferClass;
33 static jmethodID getBasePointerID;
34 static jmethodID getBaseArrayID;
35 static jmethodID getBaseArrayOffsetID;
36 static jfieldID positionID;
37 static jfieldID limitID;
38 static jfieldID elementSizeShiftID;
39
40
41 /* special calls implemented in Android's GLES wrapper used to more
42  * efficiently bound-check passed arrays */
43 extern "C" {
44 #ifdef GL_VERSION_ES_CM_1_1
45 GL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
46         const GLvoid *ptr, GLsizei count);
47 GL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
48         const GLvoid *pointer, GLsizei count);
49 GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
50         GLsizei stride, const GLvoid *pointer, GLsizei count);
51 GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
52         GLsizei stride, const GLvoid *pointer, GLsizei count);
53 GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
54         GLsizei stride, const GLvoid *pointer, GLsizei count);
55 GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
56         GLsizei stride, const GLvoid *pointer, GLsizei count);
57 GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
58         GLsizei stride, const GLvoid *pointer, GLsizei count);
59 #endif
60 #ifdef GL_ES_VERSION_2_0
61 static void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
62         GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
63     glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
64 }
65 #endif
66 #ifdef GL_ES_VERSION_3_0
67 static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
68         GLsizei stride, const GLvoid *pointer, GLsizei count) {
69     glVertexAttribIPointer(indx, size, type, stride, pointer);
70 }
71 #endif
72 }
73
74 /* Cache method IDs each time the class is loaded. */
75
76 static void
77 nativeClassInit(JNIEnv *_env, jclass glImplClass)
78 {
79     jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
80     nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
81
82     jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
83     bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
84
85     getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
86             "getBasePointer", "(Ljava/nio/Buffer;)J");
87     getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
88             "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
89     getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
90             "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
91
92     positionID = _env->GetFieldID(bufferClass, "position", "I");
93     limitID = _env->GetFieldID(bufferClass, "limit", "I");
94     elementSizeShiftID =
95         _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
96 }
97
98 static void *
99 getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
100 {
101     jint position;
102     jint limit;
103     jint elementSizeShift;
104     jlong pointer;
105
106     position = _env->GetIntField(buffer, positionID);
107     limit = _env->GetIntField(buffer, limitID);
108     elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
109     *remaining = (limit - position) << elementSizeShift;
110     pointer = _env->CallStaticLongMethod(nioAccessClass,
111             getBasePointerID, buffer);
112     if (pointer != 0L) {
113         *array = NULL;
114         return reinterpret_cast<void*>(pointer);
115     }
116
117     *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
118             getBaseArrayID, buffer);
119     *offset = _env->CallStaticIntMethod(nioAccessClass,
120             getBaseArrayOffsetID, buffer);
121
122     return NULL;
123 }
124
125 static void
126 releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
127 {
128     _env->ReleasePrimitiveArrayCritical(array, data,
129                        commit ? 0 : JNI_ABORT);
130 }
131
132 static void *
133 getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
134     char* buf = (char*) _env->GetDirectBufferAddress(buffer);
135     if (buf) {
136         jint position = _env->GetIntField(buffer, positionID);
137         jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
138         buf += position << elementSizeShift;
139     } else {
140         jniThrowException(_env, "java/lang/IllegalArgumentException",
141                           "Must use a native order direct Buffer");
142     }
143     return (void*) buf;
144 }
145
146 // --------------------------------------------------------------------------
147
148 /*
149  * returns the number of values glGet returns for a given pname.
150  *
151  * The code below is written such that pnames requiring only one values
152  * are the default (and are not explicitely tested for). This makes the
153  * checking code much shorter/readable/efficient.
154  *
155  * This means that unknown pnames (e.g.: extensions) will default to 1. If
156  * that unknown pname needs more than 1 value, then the validation check
157  * is incomplete and the app may crash if it passed the wrong number params.
158  */
159 static int getNeededCount(GLint pname) {
160     int needed = 1;
161 #ifdef GL_ES_VERSION_2_0
162     // GLES 2.x pnames
163     switch (pname) {
164         case GL_ALIASED_LINE_WIDTH_RANGE:
165         case GL_ALIASED_POINT_SIZE_RANGE:
166             needed = 2;
167             break;
168
169         case GL_BLEND_COLOR:
170         case GL_COLOR_CLEAR_VALUE:
171         case GL_COLOR_WRITEMASK:
172         case GL_SCISSOR_BOX:
173         case GL_VIEWPORT:
174             needed = 4;
175             break;
176
177         case GL_COMPRESSED_TEXTURE_FORMATS:
178             glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
179             break;
180
181         case GL_SHADER_BINARY_FORMATS:
182             glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
183             break;
184     }
185 #endif
186
187 #ifdef GL_VERSION_ES_CM_1_1
188     // GLES 1.x pnames
189     switch (pname) {
190         case GL_ALIASED_LINE_WIDTH_RANGE:
191         case GL_ALIASED_POINT_SIZE_RANGE:
192         case GL_DEPTH_RANGE:
193         case GL_SMOOTH_LINE_WIDTH_RANGE:
194         case GL_SMOOTH_POINT_SIZE_RANGE:
195             needed = 2;
196             break;
197
198         case GL_CURRENT_NORMAL:
199         case GL_POINT_DISTANCE_ATTENUATION:
200             needed = 3;
201             break;
202
203         case GL_COLOR_CLEAR_VALUE:
204         case GL_COLOR_WRITEMASK:
205         case GL_CURRENT_COLOR:
206         case GL_CURRENT_TEXTURE_COORDS:
207         case GL_FOG_COLOR:
208         case GL_LIGHT_MODEL_AMBIENT:
209         case GL_SCISSOR_BOX:
210         case GL_VIEWPORT:
211             needed = 4;
212             break;
213
214         case GL_MODELVIEW_MATRIX:
215         case GL_PROJECTION_MATRIX:
216         case GL_TEXTURE_MATRIX:
217             needed = 16;
218             break;
219
220         case GL_COMPRESSED_TEXTURE_FORMATS:
221             glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
222             break;
223     }
224 #endif
225     return needed;
226 }
227
228 template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
229 static void
230 get
231   (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
232     jint _exception = 0;
233     const char * _exceptionType;
234     const char * _exceptionMessage;
235     CTYPE *params_base = (CTYPE *) 0;
236     jint _remaining;
237     CTYPE *params = (CTYPE *) 0;
238     int _needed = 0;
239
240     if (!params_ref) {
241         _exception = 1;
242         _exceptionType = "java/lang/IllegalArgumentException";
243         _exceptionMessage = "params == null";
244         goto exit;
245     }
246     if (offset < 0) {
247         _exception = 1;
248         _exceptionType = "java/lang/IllegalArgumentException";
249         _exceptionMessage = "offset < 0";
250         goto exit;
251     }
252     _remaining = _env->GetArrayLength(params_ref) - offset;
253     _needed = getNeededCount(pname);
254     // if we didn't find this pname, we just assume the user passed
255     // an array of the right size -- this might happen with extensions
256     // or if we forget an enum here.
257     if (_remaining < _needed) {
258         _exception = 1;
259         _exceptionType = "java/lang/IllegalArgumentException";
260         _exceptionMessage = "length - offset < needed";
261         goto exit;
262     }
263     params_base = (CTYPE *)
264         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
265     params = params_base + offset;
266
267     GET(
268         (GLenum)pname,
269         (CTYPE *)params
270     );
271
272 exit:
273     if (params_base) {
274         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
275             _exception ? JNI_ABORT: 0);
276     }
277     if (_exception) {
278         jniThrowException(_env, _exceptionType, _exceptionMessage);
279     }
280 }
281
282
283 template <typename CTYPE, void GET(GLenum, CTYPE*)>
284 static void
285 getarray
286   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
287     jint _exception = 0;
288     const char * _exceptionType;
289     const char * _exceptionMessage;
290     jarray _array = (jarray) 0;
291     jint _bufferOffset = (jint) 0;
292     jint _remaining;
293     CTYPE *params = (CTYPE *) 0;
294     int _needed = 0;
295
296     params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
297     _remaining /= sizeof(CTYPE);    // convert from bytes to item count
298     _needed = getNeededCount(pname);
299     // if we didn't find this pname, we just assume the user passed
300     // an array of the right size -- this might happen with extensions
301     // or if we forget an enum here.
302     if (_needed>0 && _remaining < _needed) {
303         _exception = 1;
304         _exceptionType = "java/lang/IllegalArgumentException";
305         _exceptionMessage = "remaining() < needed";
306         goto exit;
307     }
308     if (params == NULL) {
309         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
310         params = (CTYPE *) (_paramsBase + _bufferOffset);
311     }
312     GET(
313         (GLenum)pname,
314         (CTYPE *)params
315     );
316
317 exit:
318     if (_array) {
319         releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
320     }
321     if (_exception) {
322         jniThrowException(_env, _exceptionType, _exceptionMessage);
323     }
324 }
325
326 // --------------------------------------------------------------------------
327 /* void glReadBuffer ( GLenum mode ) */
328 static void
329 android_glReadBuffer__I
330   (JNIEnv *_env, jobject _this, jint mode) {
331     glReadBuffer(
332         (GLenum)mode
333     );
334 }
335
336 /* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ) */
337 static void
338 android_glDrawRangeElements__IIIIILjava_nio_Buffer_2
339   (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jobject indices_buf) {
340     jarray _array = (jarray) 0;
341     jint _bufferOffset = (jint) 0;
342     jint _remaining;
343     GLvoid *indices = (GLvoid *) 0;
344
345     indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
346     if (indices == NULL) {
347         char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
348         indices = (GLvoid *) (_indicesBase + _bufferOffset);
349     }
350     glDrawRangeElements(
351         (GLenum)mode,
352         (GLuint)start,
353         (GLuint)end,
354         (GLsizei)count,
355         (GLenum)type,
356         (GLvoid *)indices
357     );
358     if (_array) {
359         releasePointer(_env, _array, indices, JNI_FALSE);
360     }
361 }
362
363 /* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLsizei offset ) */
364 static void
365 android_glDrawRangeElements__IIIIII
366   (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jint offset) {
367     glDrawRangeElements(
368         (GLenum)mode,
369         (GLuint)start,
370         (GLuint)end,
371         (GLsizei)count,
372         (GLenum)type,
373         reinterpret_cast<GLvoid *>(offset)
374     );
375 }
376
377 /* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
378 static void
379 android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2
380   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint format, jint type, jobject pixels_buf) {
381     jarray _array = (jarray) 0;
382     jint _bufferOffset = (jint) 0;
383     jint _remaining;
384     GLvoid *pixels = (GLvoid *) 0;
385
386     pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
387     if (pixels == NULL) {
388         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
389         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
390     }
391     glTexImage3D(
392         (GLenum)target,
393         (GLint)level,
394         (GLint)internalformat,
395         (GLsizei)width,
396         (GLsizei)height,
397         (GLsizei)depth,
398         (GLint)border,
399         (GLenum)format,
400         (GLenum)type,
401         (GLvoid *)pixels
402     );
403     if (_array) {
404         releasePointer(_env, _array, pixels, JNI_FALSE);
405     }
406 }
407
408 /* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei offset ) */
409 static void
410 android_glTexImage3D__IIIIIIIIII
411   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint format, jint type, jint offset) {
412     glTexImage3D(
413         (GLenum)target,
414         (GLint)level,
415         (GLint)internalformat,
416         (GLsizei)width,
417         (GLsizei)height,
418         (GLsizei)depth,
419         (GLint)border,
420         (GLenum)format,
421         (GLenum)type,
422         reinterpret_cast<GLvoid *>(offset)
423     );
424 }
425
426 /* void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels ) */
427 static void
428 android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
429   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jobject pixels_buf) {
430     jarray _array = (jarray) 0;
431     jint _bufferOffset = (jint) 0;
432     jint _remaining;
433     GLvoid *pixels = (GLvoid *) 0;
434
435     pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
436     if (pixels == NULL) {
437         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
438         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
439     }
440     glTexSubImage3D(
441         (GLenum)target,
442         (GLint)level,
443         (GLint)xoffset,
444         (GLint)yoffset,
445         (GLint)zoffset,
446         (GLsizei)width,
447         (GLsizei)height,
448         (GLsizei)depth,
449         (GLenum)format,
450         (GLenum)type,
451         (GLvoid *)pixels
452     );
453     if (_array) {
454         releasePointer(_env, _array, pixels, JNI_FALSE);
455     }
456 }
457
458 /* void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei offset ) */
459 static void
460 android_glTexSubImage3D__IIIIIIIIIII
461   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jint offset) {
462     glTexSubImage3D(
463         (GLenum)target,
464         (GLint)level,
465         (GLint)xoffset,
466         (GLint)yoffset,
467         (GLint)zoffset,
468         (GLsizei)width,
469         (GLsizei)height,
470         (GLsizei)depth,
471         (GLenum)format,
472         (GLenum)type,
473         reinterpret_cast<GLvoid *>(offset)
474     );
475 }
476
477 /* void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
478 static void
479 android_glCopyTexSubImage3D__IIIIIIIII
480   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint x, jint y, jint width, jint height) {
481     glCopyTexSubImage3D(
482         (GLenum)target,
483         (GLint)level,
484         (GLint)xoffset,
485         (GLint)yoffset,
486         (GLint)zoffset,
487         (GLint)x,
488         (GLint)y,
489         (GLsizei)width,
490         (GLsizei)height
491     );
492 }
493
494 /* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ) */
495 static void
496 android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2
497   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jobject data_buf) {
498     jarray _array = (jarray) 0;
499     jint _bufferOffset = (jint) 0;
500     jint _remaining;
501     GLvoid *data = (GLvoid *) 0;
502
503     data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
504     if (data == NULL) {
505         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
506         data = (GLvoid *) (_dataBase + _bufferOffset);
507     }
508     glCompressedTexImage3D(
509         (GLenum)target,
510         (GLint)level,
511         (GLenum)internalformat,
512         (GLsizei)width,
513         (GLsizei)height,
514         (GLsizei)depth,
515         (GLint)border,
516         (GLsizei)imageSize,
517         (GLvoid *)data
518     );
519     if (_array) {
520         releasePointer(_env, _array, data, JNI_FALSE);
521     }
522 }
523
524 /* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei offset ) */
525 static void
526 android_glCompressedTexImage3D__IIIIIIIII
527   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jint offset) {
528     glCompressedTexImage3D(
529         (GLenum)target,
530         (GLint)level,
531         (GLenum)internalformat,
532         (GLsizei)width,
533         (GLsizei)height,
534         (GLsizei)depth,
535         (GLint)border,
536         (GLsizei)imageSize,
537         reinterpret_cast<GLvoid *>(offset)
538     );
539 }
540
541 /* void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ) */
542 static void
543 android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
544   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint imageSize, jobject data_buf) {
545     jarray _array = (jarray) 0;
546     jint _bufferOffset = (jint) 0;
547     jint _remaining;
548     GLvoid *data = (GLvoid *) 0;
549
550     data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
551     if (data == NULL) {
552         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
553         data = (GLvoid *) (_dataBase + _bufferOffset);
554     }
555     glCompressedTexSubImage3D(
556         (GLenum)target,
557         (GLint)level,
558         (GLint)xoffset,
559         (GLint)yoffset,
560         (GLint)zoffset,
561         (GLsizei)width,
562         (GLsizei)height,
563         (GLsizei)depth,
564         (GLenum)format,
565         (GLsizei)imageSize,
566         (GLvoid *)data
567     );
568     if (_array) {
569         releasePointer(_env, _array, data, JNI_FALSE);
570     }
571 }
572
573 /* void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLsizei offset ) */
574 static void
575 android_glCompressedTexSubImage3D__IIIIIIIIIII
576   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint imageSize, jint offset) {
577     glCompressedTexSubImage3D(
578         (GLenum)target,
579         (GLint)level,
580         (GLint)xoffset,
581         (GLint)yoffset,
582         (GLint)zoffset,
583         (GLsizei)width,
584         (GLsizei)height,
585         (GLsizei)depth,
586         (GLenum)format,
587         (GLsizei)imageSize,
588         reinterpret_cast<GLvoid *>(offset)
589     );
590 }
591
592 /* void glGenQueries ( GLsizei n, GLuint *ids ) */
593 static void
594 android_glGenQueries__I_3II
595   (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
596     jint _exception = 0;
597     const char * _exceptionType = NULL;
598     const char * _exceptionMessage = NULL;
599     GLuint *ids_base = (GLuint *) 0;
600     jint _remaining;
601     GLuint *ids = (GLuint *) 0;
602
603     if (!ids_ref) {
604         _exception = 1;
605         _exceptionType = "java/lang/IllegalArgumentException";
606         _exceptionMessage = "ids == null";
607         goto exit;
608     }
609     if (offset < 0) {
610         _exception = 1;
611         _exceptionType = "java/lang/IllegalArgumentException";
612         _exceptionMessage = "offset < 0";
613         goto exit;
614     }
615     _remaining = _env->GetArrayLength(ids_ref) - offset;
616     ids_base = (GLuint *)
617         _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
618     ids = ids_base + offset;
619
620     glGenQueries(
621         (GLsizei)n,
622         (GLuint *)ids
623     );
624
625 exit:
626     if (ids_base) {
627         _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
628             _exception ? JNI_ABORT: 0);
629     }
630     if (_exception) {
631         jniThrowException(_env, _exceptionType, _exceptionMessage);
632     }
633 }
634
635 /* void glGenQueries ( GLsizei n, GLuint *ids ) */
636 static void
637 android_glGenQueries__ILjava_nio_IntBuffer_2
638   (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
639     jarray _array = (jarray) 0;
640     jint _bufferOffset = (jint) 0;
641     jint _remaining;
642     GLuint *ids = (GLuint *) 0;
643
644     ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
645     if (ids == NULL) {
646         char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
647         ids = (GLuint *) (_idsBase + _bufferOffset);
648     }
649     glGenQueries(
650         (GLsizei)n,
651         (GLuint *)ids
652     );
653     if (_array) {
654         releasePointer(_env, _array, ids, JNI_TRUE);
655     }
656 }
657
658 /* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
659 static void
660 android_glDeleteQueries__I_3II
661   (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
662     jint _exception = 0;
663     const char * _exceptionType = NULL;
664     const char * _exceptionMessage = NULL;
665     GLuint *ids_base = (GLuint *) 0;
666     jint _remaining;
667     GLuint *ids = (GLuint *) 0;
668
669     if (!ids_ref) {
670         _exception = 1;
671         _exceptionType = "java/lang/IllegalArgumentException";
672         _exceptionMessage = "ids == null";
673         goto exit;
674     }
675     if (offset < 0) {
676         _exception = 1;
677         _exceptionType = "java/lang/IllegalArgumentException";
678         _exceptionMessage = "offset < 0";
679         goto exit;
680     }
681     _remaining = _env->GetArrayLength(ids_ref) - offset;
682     ids_base = (GLuint *)
683         _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
684     ids = ids_base + offset;
685
686     glDeleteQueries(
687         (GLsizei)n,
688         (GLuint *)ids
689     );
690
691 exit:
692     if (ids_base) {
693         _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
694             JNI_ABORT);
695     }
696     if (_exception) {
697         jniThrowException(_env, _exceptionType, _exceptionMessage);
698     }
699 }
700
701 /* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
702 static void
703 android_glDeleteQueries__ILjava_nio_IntBuffer_2
704   (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
705     jarray _array = (jarray) 0;
706     jint _bufferOffset = (jint) 0;
707     jint _remaining;
708     GLuint *ids = (GLuint *) 0;
709
710     ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
711     if (ids == NULL) {
712         char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
713         ids = (GLuint *) (_idsBase + _bufferOffset);
714     }
715     glDeleteQueries(
716         (GLsizei)n,
717         (GLuint *)ids
718     );
719     if (_array) {
720         releasePointer(_env, _array, ids, JNI_FALSE);
721     }
722 }
723
724 /* GLboolean glIsQuery ( GLuint id ) */
725 static jboolean
726 android_glIsQuery__I
727   (JNIEnv *_env, jobject _this, jint id) {
728     GLboolean _returnValue;
729     _returnValue = glIsQuery(
730         (GLuint)id
731     );
732     return (jboolean)_returnValue;
733 }
734
735 /* void glBeginQuery ( GLenum target, GLuint id ) */
736 static void
737 android_glBeginQuery__II
738   (JNIEnv *_env, jobject _this, jint target, jint id) {
739     glBeginQuery(
740         (GLenum)target,
741         (GLuint)id
742     );
743 }
744
745 /* void glEndQuery ( GLenum target ) */
746 static void
747 android_glEndQuery__I
748   (JNIEnv *_env, jobject _this, jint target) {
749     glEndQuery(
750         (GLenum)target
751     );
752 }
753
754 /* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
755 static void
756 android_glGetQueryiv__II_3II
757   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
758     jint _exception = 0;
759     const char * _exceptionType = NULL;
760     const char * _exceptionMessage = NULL;
761     GLint *params_base = (GLint *) 0;
762     jint _remaining;
763     GLint *params = (GLint *) 0;
764
765     if (!params_ref) {
766         _exception = 1;
767         _exceptionType = "java/lang/IllegalArgumentException";
768         _exceptionMessage = "params == null";
769         goto exit;
770     }
771     if (offset < 0) {
772         _exception = 1;
773         _exceptionType = "java/lang/IllegalArgumentException";
774         _exceptionMessage = "offset < 0";
775         goto exit;
776     }
777     _remaining = _env->GetArrayLength(params_ref) - offset;
778     params_base = (GLint *)
779         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
780     params = params_base + offset;
781
782     glGetQueryiv(
783         (GLenum)target,
784         (GLenum)pname,
785         (GLint *)params
786     );
787
788 exit:
789     if (params_base) {
790         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
791             _exception ? JNI_ABORT: 0);
792     }
793     if (_exception) {
794         jniThrowException(_env, _exceptionType, _exceptionMessage);
795     }
796 }
797
798 /* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
799 static void
800 android_glGetQueryiv__IILjava_nio_IntBuffer_2
801   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
802     jarray _array = (jarray) 0;
803     jint _bufferOffset = (jint) 0;
804     jint _remaining;
805     GLint *params = (GLint *) 0;
806
807     params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
808     if (params == NULL) {
809         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
810         params = (GLint *) (_paramsBase + _bufferOffset);
811     }
812     glGetQueryiv(
813         (GLenum)target,
814         (GLenum)pname,
815         (GLint *)params
816     );
817     if (_array) {
818         releasePointer(_env, _array, params, JNI_TRUE);
819     }
820 }
821
822 /* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
823 static void
824 android_glGetQueryObjectuiv__II_3II
825   (JNIEnv *_env, jobject _this, jint id, jint pname, jintArray params_ref, jint offset) {
826     jint _exception = 0;
827     const char * _exceptionType = NULL;
828     const char * _exceptionMessage = NULL;
829     GLuint *params_base = (GLuint *) 0;
830     jint _remaining;
831     GLuint *params = (GLuint *) 0;
832
833     if (!params_ref) {
834         _exception = 1;
835         _exceptionType = "java/lang/IllegalArgumentException";
836         _exceptionMessage = "params == null";
837         goto exit;
838     }
839     if (offset < 0) {
840         _exception = 1;
841         _exceptionType = "java/lang/IllegalArgumentException";
842         _exceptionMessage = "offset < 0";
843         goto exit;
844     }
845     _remaining = _env->GetArrayLength(params_ref) - offset;
846     params_base = (GLuint *)
847         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
848     params = params_base + offset;
849
850     glGetQueryObjectuiv(
851         (GLuint)id,
852         (GLenum)pname,
853         (GLuint *)params
854     );
855
856 exit:
857     if (params_base) {
858         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
859             _exception ? JNI_ABORT: 0);
860     }
861     if (_exception) {
862         jniThrowException(_env, _exceptionType, _exceptionMessage);
863     }
864 }
865
866 /* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
867 static void
868 android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2
869   (JNIEnv *_env, jobject _this, jint id, jint pname, jobject params_buf) {
870     jarray _array = (jarray) 0;
871     jint _bufferOffset = (jint) 0;
872     jint _remaining;
873     GLuint *params = (GLuint *) 0;
874
875     params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
876     if (params == NULL) {
877         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
878         params = (GLuint *) (_paramsBase + _bufferOffset);
879     }
880     glGetQueryObjectuiv(
881         (GLuint)id,
882         (GLenum)pname,
883         (GLuint *)params
884     );
885     if (_array) {
886         releasePointer(_env, _array, params, JNI_TRUE);
887     }
888 }
889
890 /* GLboolean glUnmapBuffer ( GLenum target ) */
891 static jboolean
892 android_glUnmapBuffer__I
893   (JNIEnv *_env, jobject _this, jint target) {
894     GLboolean _returnValue;
895     _returnValue = glUnmapBuffer(
896         (GLenum)target
897     );
898     return (jboolean)_returnValue;
899 }
900
901 /* void glGetBufferPointerv ( GLenum target, GLenum pname, GLvoid** params ) */
902 static jobject
903 android_glGetBufferPointerv__II
904   (JNIEnv *_env, jobject _this, jint target, jint pname) {
905     GLint64 _mapLength;
906     GLvoid* _p;
907     glGetBufferParameteri64v((GLenum)target, GL_BUFFER_MAP_LENGTH, &_mapLength);
908     glGetBufferPointerv((GLenum)target, (GLenum)pname, &_p);
909     return _env->NewDirectByteBuffer(_p, _mapLength);
910 }
911
912 /* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
913 static void
914 android_glDrawBuffers__I_3II
915   (JNIEnv *_env, jobject _this, jint n, jintArray bufs_ref, jint offset) {
916     jint _exception = 0;
917     const char * _exceptionType = NULL;
918     const char * _exceptionMessage = NULL;
919     GLenum *bufs_base = (GLenum *) 0;
920     jint _remaining;
921     GLenum *bufs = (GLenum *) 0;
922
923     if (!bufs_ref) {
924         _exception = 1;
925         _exceptionType = "java/lang/IllegalArgumentException";
926         _exceptionMessage = "bufs == null";
927         goto exit;
928     }
929     if (offset < 0) {
930         _exception = 1;
931         _exceptionType = "java/lang/IllegalArgumentException";
932         _exceptionMessage = "offset < 0";
933         goto exit;
934     }
935     _remaining = _env->GetArrayLength(bufs_ref) - offset;
936     bufs_base = (GLenum *)
937         _env->GetPrimitiveArrayCritical(bufs_ref, (jboolean *)0);
938     bufs = bufs_base + offset;
939
940     glDrawBuffers(
941         (GLsizei)n,
942         (GLenum *)bufs
943     );
944
945 exit:
946     if (bufs_base) {
947         _env->ReleasePrimitiveArrayCritical(bufs_ref, bufs_base,
948             JNI_ABORT);
949     }
950     if (_exception) {
951         jniThrowException(_env, _exceptionType, _exceptionMessage);
952     }
953 }
954
955 /* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
956 static void
957 android_glDrawBuffers__ILjava_nio_IntBuffer_2
958   (JNIEnv *_env, jobject _this, jint n, jobject bufs_buf) {
959     jarray _array = (jarray) 0;
960     jint _bufferOffset = (jint) 0;
961     jint _remaining;
962     GLenum *bufs = (GLenum *) 0;
963
964     bufs = (GLenum *)getPointer(_env, bufs_buf, &_array, &_remaining, &_bufferOffset);
965     if (bufs == NULL) {
966         char * _bufsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
967         bufs = (GLenum *) (_bufsBase + _bufferOffset);
968     }
969     glDrawBuffers(
970         (GLsizei)n,
971         (GLenum *)bufs
972     );
973     if (_array) {
974         releasePointer(_env, _array, bufs, JNI_FALSE);
975     }
976 }
977
978 /* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
979 static void
980 android_glUniformMatrix2x3fv__IIZ_3FI
981   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
982     jint _exception = 0;
983     const char * _exceptionType = NULL;
984     const char * _exceptionMessage = NULL;
985     GLfloat *value_base = (GLfloat *) 0;
986     jint _remaining;
987     GLfloat *value = (GLfloat *) 0;
988
989     if (!value_ref) {
990         _exception = 1;
991         _exceptionType = "java/lang/IllegalArgumentException";
992         _exceptionMessage = "value == null";
993         goto exit;
994     }
995     if (offset < 0) {
996         _exception = 1;
997         _exceptionType = "java/lang/IllegalArgumentException";
998         _exceptionMessage = "offset < 0";
999         goto exit;
1000     }
1001     _remaining = _env->GetArrayLength(value_ref) - offset;
1002     value_base = (GLfloat *)
1003         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
1004     value = value_base + offset;
1005
1006     glUniformMatrix2x3fv(
1007         (GLint)location,
1008         (GLsizei)count,
1009         (GLboolean)transpose,
1010         (GLfloat *)value
1011     );
1012
1013 exit:
1014     if (value_base) {
1015         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
1016             JNI_ABORT);
1017     }
1018     if (_exception) {
1019         jniThrowException(_env, _exceptionType, _exceptionMessage);
1020     }
1021 }
1022
1023 /* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1024 static void
1025 android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2
1026   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
1027     jarray _array = (jarray) 0;
1028     jint _bufferOffset = (jint) 0;
1029     jint _remaining;
1030     GLfloat *value = (GLfloat *) 0;
1031
1032     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
1033     if (value == NULL) {
1034         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1035         value = (GLfloat *) (_valueBase + _bufferOffset);
1036     }
1037     glUniformMatrix2x3fv(
1038         (GLint)location,
1039         (GLsizei)count,
1040         (GLboolean)transpose,
1041         (GLfloat *)value
1042     );
1043     if (_array) {
1044         releasePointer(_env, _array, value, JNI_FALSE);
1045     }
1046 }
1047
1048 /* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1049 static void
1050 android_glUniformMatrix3x2fv__IIZ_3FI
1051   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1052     jint _exception = 0;
1053     const char * _exceptionType = NULL;
1054     const char * _exceptionMessage = NULL;
1055     GLfloat *value_base = (GLfloat *) 0;
1056     jint _remaining;
1057     GLfloat *value = (GLfloat *) 0;
1058
1059     if (!value_ref) {
1060         _exception = 1;
1061         _exceptionType = "java/lang/IllegalArgumentException";
1062         _exceptionMessage = "value == null";
1063         goto exit;
1064     }
1065     if (offset < 0) {
1066         _exception = 1;
1067         _exceptionType = "java/lang/IllegalArgumentException";
1068         _exceptionMessage = "offset < 0";
1069         goto exit;
1070     }
1071     _remaining = _env->GetArrayLength(value_ref) - offset;
1072     value_base = (GLfloat *)
1073         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
1074     value = value_base + offset;
1075
1076     glUniformMatrix3x2fv(
1077         (GLint)location,
1078         (GLsizei)count,
1079         (GLboolean)transpose,
1080         (GLfloat *)value
1081     );
1082
1083 exit:
1084     if (value_base) {
1085         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
1086             JNI_ABORT);
1087     }
1088     if (_exception) {
1089         jniThrowException(_env, _exceptionType, _exceptionMessage);
1090     }
1091 }
1092
1093 /* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1094 static void
1095 android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2
1096   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
1097     jarray _array = (jarray) 0;
1098     jint _bufferOffset = (jint) 0;
1099     jint _remaining;
1100     GLfloat *value = (GLfloat *) 0;
1101
1102     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
1103     if (value == NULL) {
1104         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1105         value = (GLfloat *) (_valueBase + _bufferOffset);
1106     }
1107     glUniformMatrix3x2fv(
1108         (GLint)location,
1109         (GLsizei)count,
1110         (GLboolean)transpose,
1111         (GLfloat *)value
1112     );
1113     if (_array) {
1114         releasePointer(_env, _array, value, JNI_FALSE);
1115     }
1116 }
1117
1118 /* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1119 static void
1120 android_glUniformMatrix2x4fv__IIZ_3FI
1121   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1122     jint _exception = 0;
1123     const char * _exceptionType = NULL;
1124     const char * _exceptionMessage = NULL;
1125     GLfloat *value_base = (GLfloat *) 0;
1126     jint _remaining;
1127     GLfloat *value = (GLfloat *) 0;
1128
1129     if (!value_ref) {
1130         _exception = 1;
1131         _exceptionType = "java/lang/IllegalArgumentException";
1132         _exceptionMessage = "value == null";
1133         goto exit;
1134     }
1135     if (offset < 0) {
1136         _exception = 1;
1137         _exceptionType = "java/lang/IllegalArgumentException";
1138         _exceptionMessage = "offset < 0";
1139         goto exit;
1140     }
1141     _remaining = _env->GetArrayLength(value_ref) - offset;
1142     value_base = (GLfloat *)
1143         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
1144     value = value_base + offset;
1145
1146     glUniformMatrix2x4fv(
1147         (GLint)location,
1148         (GLsizei)count,
1149         (GLboolean)transpose,
1150         (GLfloat *)value
1151     );
1152
1153 exit:
1154     if (value_base) {
1155         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
1156             JNI_ABORT);
1157     }
1158     if (_exception) {
1159         jniThrowException(_env, _exceptionType, _exceptionMessage);
1160     }
1161 }
1162
1163 /* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1164 static void
1165 android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2
1166   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
1167     jarray _array = (jarray) 0;
1168     jint _bufferOffset = (jint) 0;
1169     jint _remaining;
1170     GLfloat *value = (GLfloat *) 0;
1171
1172     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
1173     if (value == NULL) {
1174         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1175         value = (GLfloat *) (_valueBase + _bufferOffset);
1176     }
1177     glUniformMatrix2x4fv(
1178         (GLint)location,
1179         (GLsizei)count,
1180         (GLboolean)transpose,
1181         (GLfloat *)value
1182     );
1183     if (_array) {
1184         releasePointer(_env, _array, value, JNI_FALSE);
1185     }
1186 }
1187
1188 /* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1189 static void
1190 android_glUniformMatrix4x2fv__IIZ_3FI
1191   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1192     jint _exception = 0;
1193     const char * _exceptionType = NULL;
1194     const char * _exceptionMessage = NULL;
1195     GLfloat *value_base = (GLfloat *) 0;
1196     jint _remaining;
1197     GLfloat *value = (GLfloat *) 0;
1198
1199     if (!value_ref) {
1200         _exception = 1;
1201         _exceptionType = "java/lang/IllegalArgumentException";
1202         _exceptionMessage = "value == null";
1203         goto exit;
1204     }
1205     if (offset < 0) {
1206         _exception = 1;
1207         _exceptionType = "java/lang/IllegalArgumentException";
1208         _exceptionMessage = "offset < 0";
1209         goto exit;
1210     }
1211     _remaining = _env->GetArrayLength(value_ref) - offset;
1212     value_base = (GLfloat *)
1213         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
1214     value = value_base + offset;
1215
1216     glUniformMatrix4x2fv(
1217         (GLint)location,
1218         (GLsizei)count,
1219         (GLboolean)transpose,
1220         (GLfloat *)value
1221     );
1222
1223 exit:
1224     if (value_base) {
1225         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
1226             JNI_ABORT);
1227     }
1228     if (_exception) {
1229         jniThrowException(_env, _exceptionType, _exceptionMessage);
1230     }
1231 }
1232
1233 /* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1234 static void
1235 android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2
1236   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
1237     jarray _array = (jarray) 0;
1238     jint _bufferOffset = (jint) 0;
1239     jint _remaining;
1240     GLfloat *value = (GLfloat *) 0;
1241
1242     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
1243     if (value == NULL) {
1244         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1245         value = (GLfloat *) (_valueBase + _bufferOffset);
1246     }
1247     glUniformMatrix4x2fv(
1248         (GLint)location,
1249         (GLsizei)count,
1250         (GLboolean)transpose,
1251         (GLfloat *)value
1252     );
1253     if (_array) {
1254         releasePointer(_env, _array, value, JNI_FALSE);
1255     }
1256 }
1257
1258 /* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1259 static void
1260 android_glUniformMatrix3x4fv__IIZ_3FI
1261   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1262     jint _exception = 0;
1263     const char * _exceptionType = NULL;
1264     const char * _exceptionMessage = NULL;
1265     GLfloat *value_base = (GLfloat *) 0;
1266     jint _remaining;
1267     GLfloat *value = (GLfloat *) 0;
1268
1269     if (!value_ref) {
1270         _exception = 1;
1271         _exceptionType = "java/lang/IllegalArgumentException";
1272         _exceptionMessage = "value == null";
1273         goto exit;
1274     }
1275     if (offset < 0) {
1276         _exception = 1;
1277         _exceptionType = "java/lang/IllegalArgumentException";
1278         _exceptionMessage = "offset < 0";
1279         goto exit;
1280     }
1281     _remaining = _env->GetArrayLength(value_ref) - offset;
1282     value_base = (GLfloat *)
1283         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
1284     value = value_base + offset;
1285
1286     glUniformMatrix3x4fv(
1287         (GLint)location,
1288         (GLsizei)count,
1289         (GLboolean)transpose,
1290         (GLfloat *)value
1291     );
1292
1293 exit:
1294     if (value_base) {
1295         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
1296             JNI_ABORT);
1297     }
1298     if (_exception) {
1299         jniThrowException(_env, _exceptionType, _exceptionMessage);
1300     }
1301 }
1302
1303 /* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1304 static void
1305 android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2
1306   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
1307     jarray _array = (jarray) 0;
1308     jint _bufferOffset = (jint) 0;
1309     jint _remaining;
1310     GLfloat *value = (GLfloat *) 0;
1311
1312     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
1313     if (value == NULL) {
1314         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1315         value = (GLfloat *) (_valueBase + _bufferOffset);
1316     }
1317     glUniformMatrix3x4fv(
1318         (GLint)location,
1319         (GLsizei)count,
1320         (GLboolean)transpose,
1321         (GLfloat *)value
1322     );
1323     if (_array) {
1324         releasePointer(_env, _array, value, JNI_FALSE);
1325     }
1326 }
1327
1328 /* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1329 static void
1330 android_glUniformMatrix4x3fv__IIZ_3FI
1331   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1332     jint _exception = 0;
1333     const char * _exceptionType = NULL;
1334     const char * _exceptionMessage = NULL;
1335     GLfloat *value_base = (GLfloat *) 0;
1336     jint _remaining;
1337     GLfloat *value = (GLfloat *) 0;
1338
1339     if (!value_ref) {
1340         _exception = 1;
1341         _exceptionType = "java/lang/IllegalArgumentException";
1342         _exceptionMessage = "value == null";
1343         goto exit;
1344     }
1345     if (offset < 0) {
1346         _exception = 1;
1347         _exceptionType = "java/lang/IllegalArgumentException";
1348         _exceptionMessage = "offset < 0";
1349         goto exit;
1350     }
1351     _remaining = _env->GetArrayLength(value_ref) - offset;
1352     value_base = (GLfloat *)
1353         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
1354     value = value_base + offset;
1355
1356     glUniformMatrix4x3fv(
1357         (GLint)location,
1358         (GLsizei)count,
1359         (GLboolean)transpose,
1360         (GLfloat *)value
1361     );
1362
1363 exit:
1364     if (value_base) {
1365         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
1366             JNI_ABORT);
1367     }
1368     if (_exception) {
1369         jniThrowException(_env, _exceptionType, _exceptionMessage);
1370     }
1371 }
1372
1373 /* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1374 static void
1375 android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2
1376   (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
1377     jarray _array = (jarray) 0;
1378     jint _bufferOffset = (jint) 0;
1379     jint _remaining;
1380     GLfloat *value = (GLfloat *) 0;
1381
1382     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
1383     if (value == NULL) {
1384         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1385         value = (GLfloat *) (_valueBase + _bufferOffset);
1386     }
1387     glUniformMatrix4x3fv(
1388         (GLint)location,
1389         (GLsizei)count,
1390         (GLboolean)transpose,
1391         (GLfloat *)value
1392     );
1393     if (_array) {
1394         releasePointer(_env, _array, value, JNI_FALSE);
1395     }
1396 }
1397
1398 /* void glBlitFramebuffer ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter ) */
1399 static void
1400 android_glBlitFramebuffer__IIIIIIIIII
1401   (JNIEnv *_env, jobject _this, jint srcX0, jint srcY0, jint srcX1, jint srcY1, jint dstX0, jint dstY0, jint dstX1, jint dstY1, jint mask, jint filter) {
1402     glBlitFramebuffer(
1403         (GLint)srcX0,
1404         (GLint)srcY0,
1405         (GLint)srcX1,
1406         (GLint)srcY1,
1407         (GLint)dstX0,
1408         (GLint)dstY0,
1409         (GLint)dstX1,
1410         (GLint)dstY1,
1411         (GLbitfield)mask,
1412         (GLenum)filter
1413     );
1414 }
1415
1416 /* void glRenderbufferStorageMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height ) */
1417 static void
1418 android_glRenderbufferStorageMultisample__IIIII
1419   (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height) {
1420     glRenderbufferStorageMultisample(
1421         (GLenum)target,
1422         (GLsizei)samples,
1423         (GLenum)internalformat,
1424         (GLsizei)width,
1425         (GLsizei)height
1426     );
1427 }
1428
1429 /* void glFramebufferTextureLayer ( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ) */
1430 static void
1431 android_glFramebufferTextureLayer__IIIII
1432   (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level, jint layer) {
1433     glFramebufferTextureLayer(
1434         (GLenum)target,
1435         (GLenum)attachment,
1436         (GLuint)texture,
1437         (GLint)level,
1438         (GLint)layer
1439     );
1440 }
1441
1442 /* GLvoid * glMapBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) */
1443 static jobject
1444 android_glMapBufferRange__IIII
1445   (JNIEnv *_env, jobject _this, jint target, jint offset, jint length, jint access) {
1446     GLvoid* _p = glMapBufferRange((GLenum)target,
1447             (GLintptr)offset, (GLsizeiptr)length, (GLbitfield)access);
1448     jobject _buf = (jobject)0;
1449     if (_p) {
1450         _buf = _env->NewDirectByteBuffer(_p, length);
1451     }
1452     return _buf;
1453 }
1454
1455 /* void glFlushMappedBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length ) */
1456 static void
1457 android_glFlushMappedBufferRange__III
1458   (JNIEnv *_env, jobject _this, jint target, jint offset, jint length) {
1459     glFlushMappedBufferRange(
1460         (GLenum)target,
1461         (GLintptr)offset,
1462         (GLsizeiptr)length
1463     );
1464 }
1465
1466 /* void glBindVertexArray ( GLuint array ) */
1467 static void
1468 android_glBindVertexArray__I
1469   (JNIEnv *_env, jobject _this, jint array) {
1470     glBindVertexArray(
1471         (GLuint)array
1472     );
1473 }
1474
1475 /* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1476 static void
1477 android_glDeleteVertexArrays__I_3II
1478   (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1479     jint _exception = 0;
1480     const char * _exceptionType = NULL;
1481     const char * _exceptionMessage = NULL;
1482     GLuint *arrays_base = (GLuint *) 0;
1483     jint _remaining;
1484     GLuint *arrays = (GLuint *) 0;
1485
1486     if (!arrays_ref) {
1487         _exception = 1;
1488         _exceptionType = "java/lang/IllegalArgumentException";
1489         _exceptionMessage = "arrays == null";
1490         goto exit;
1491     }
1492     if (offset < 0) {
1493         _exception = 1;
1494         _exceptionType = "java/lang/IllegalArgumentException";
1495         _exceptionMessage = "offset < 0";
1496         goto exit;
1497     }
1498     _remaining = _env->GetArrayLength(arrays_ref) - offset;
1499     arrays_base = (GLuint *)
1500         _env->GetPrimitiveArrayCritical(arrays_ref, (jboolean *)0);
1501     arrays = arrays_base + offset;
1502
1503     glDeleteVertexArrays(
1504         (GLsizei)n,
1505         (GLuint *)arrays
1506     );
1507
1508 exit:
1509     if (arrays_base) {
1510         _env->ReleasePrimitiveArrayCritical(arrays_ref, arrays_base,
1511             JNI_ABORT);
1512     }
1513     if (_exception) {
1514         jniThrowException(_env, _exceptionType, _exceptionMessage);
1515     }
1516 }
1517
1518 /* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1519 static void
1520 android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2
1521   (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
1522     jarray _array = (jarray) 0;
1523     jint _bufferOffset = (jint) 0;
1524     jint _remaining;
1525     GLuint *arrays = (GLuint *) 0;
1526
1527     arrays = (GLuint *)getPointer(_env, arrays_buf, &_array, &_remaining, &_bufferOffset);
1528     if (arrays == NULL) {
1529         char * _arraysBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1530         arrays = (GLuint *) (_arraysBase + _bufferOffset);
1531     }
1532     glDeleteVertexArrays(
1533         (GLsizei)n,
1534         (GLuint *)arrays
1535     );
1536     if (_array) {
1537         releasePointer(_env, _array, arrays, JNI_FALSE);
1538     }
1539 }
1540
1541 /* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1542 static void
1543 android_glGenVertexArrays__I_3II
1544   (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1545     jint _exception = 0;
1546     const char * _exceptionType = NULL;
1547     const char * _exceptionMessage = NULL;
1548     GLuint *arrays_base = (GLuint *) 0;
1549     jint _remaining;
1550     GLuint *arrays = (GLuint *) 0;
1551
1552     if (!arrays_ref) {
1553         _exception = 1;
1554         _exceptionType = "java/lang/IllegalArgumentException";
1555         _exceptionMessage = "arrays == null";
1556         goto exit;
1557     }
1558     if (offset < 0) {
1559         _exception = 1;
1560         _exceptionType = "java/lang/IllegalArgumentException";
1561         _exceptionMessage = "offset < 0";
1562         goto exit;
1563     }
1564     _remaining = _env->GetArrayLength(arrays_ref) - offset;
1565     arrays_base = (GLuint *)
1566         _env->GetPrimitiveArrayCritical(arrays_ref, (jboolean *)0);
1567     arrays = arrays_base + offset;
1568
1569     glGenVertexArrays(
1570         (GLsizei)n,
1571         (GLuint *)arrays
1572     );
1573
1574 exit:
1575     if (arrays_base) {
1576         _env->ReleasePrimitiveArrayCritical(arrays_ref, arrays_base,
1577             _exception ? JNI_ABORT: 0);
1578     }
1579     if (_exception) {
1580         jniThrowException(_env, _exceptionType, _exceptionMessage);
1581     }
1582 }
1583
1584 /* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1585 static void
1586 android_glGenVertexArrays__ILjava_nio_IntBuffer_2
1587   (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
1588     jarray _array = (jarray) 0;
1589     jint _bufferOffset = (jint) 0;
1590     jint _remaining;
1591     GLuint *arrays = (GLuint *) 0;
1592
1593     arrays = (GLuint *)getPointer(_env, arrays_buf, &_array, &_remaining, &_bufferOffset);
1594     if (arrays == NULL) {
1595         char * _arraysBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1596         arrays = (GLuint *) (_arraysBase + _bufferOffset);
1597     }
1598     glGenVertexArrays(
1599         (GLsizei)n,
1600         (GLuint *)arrays
1601     );
1602     if (_array) {
1603         releasePointer(_env, _array, arrays, JNI_TRUE);
1604     }
1605 }
1606
1607 /* GLboolean glIsVertexArray ( GLuint array ) */
1608 static jboolean
1609 android_glIsVertexArray__I
1610   (JNIEnv *_env, jobject _this, jint array) {
1611     GLboolean _returnValue;
1612     _returnValue = glIsVertexArray(
1613         (GLuint)array
1614     );
1615     return (jboolean)_returnValue;
1616 }
1617
1618 /* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1619 static void
1620 android_glGetIntegeri_v__II_3II
1621   (JNIEnv *_env, jobject _this, jint target, jint index, jintArray data_ref, jint offset) {
1622     jint _exception = 0;
1623     const char * _exceptionType = NULL;
1624     const char * _exceptionMessage = NULL;
1625     GLint *data_base = (GLint *) 0;
1626     jint _remaining;
1627     GLint *data = (GLint *) 0;
1628
1629     if (!data_ref) {
1630         _exception = 1;
1631         _exceptionType = "java/lang/IllegalArgumentException";
1632         _exceptionMessage = "data == null";
1633         goto exit;
1634     }
1635     if (offset < 0) {
1636         _exception = 1;
1637         _exceptionType = "java/lang/IllegalArgumentException";
1638         _exceptionMessage = "offset < 0";
1639         goto exit;
1640     }
1641     _remaining = _env->GetArrayLength(data_ref) - offset;
1642     data_base = (GLint *)
1643         _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
1644     data = data_base + offset;
1645
1646     glGetIntegeri_v(
1647         (GLenum)target,
1648         (GLuint)index,
1649         (GLint *)data
1650     );
1651
1652 exit:
1653     if (data_base) {
1654         _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
1655             _exception ? JNI_ABORT: 0);
1656     }
1657     if (_exception) {
1658         jniThrowException(_env, _exceptionType, _exceptionMessage);
1659     }
1660 }
1661
1662 /* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1663 static void
1664 android_glGetIntegeri_v__IILjava_nio_IntBuffer_2
1665   (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
1666     jarray _array = (jarray) 0;
1667     jint _bufferOffset = (jint) 0;
1668     jint _remaining;
1669     GLint *data = (GLint *) 0;
1670
1671     data = (GLint *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
1672     if (data == NULL) {
1673         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
1674         data = (GLint *) (_dataBase + _bufferOffset);
1675     }
1676     glGetIntegeri_v(
1677         (GLenum)target,
1678         (GLuint)index,
1679         (GLint *)data
1680     );
1681     if (_array) {
1682         releasePointer(_env, _array, data, JNI_TRUE);
1683     }
1684 }
1685
1686 /* void glBeginTransformFeedback ( GLenum primitiveMode ) */
1687 static void
1688 android_glBeginTransformFeedback__I
1689   (JNIEnv *_env, jobject _this, jint primitiveMode) {
1690     glBeginTransformFeedback(
1691         (GLenum)primitiveMode
1692     );
1693 }
1694
1695 /* void glEndTransformFeedback ( void ) */
1696 static void
1697 android_glEndTransformFeedback__
1698   (JNIEnv *_env, jobject _this) {
1699     glEndTransformFeedback();
1700 }
1701
1702 /* void glBindBufferRange ( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
1703 static void
1704 android_glBindBufferRange__IIIII
1705   (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer, jint offset, jint size) {
1706     glBindBufferRange(
1707         (GLenum)target,
1708         (GLuint)index,
1709         (GLuint)buffer,
1710         (GLintptr)offset,
1711         (GLsizeiptr)size
1712     );
1713 }
1714
1715 /* void glBindBufferBase ( GLenum target, GLuint index, GLuint buffer ) */
1716 static void
1717 android_glBindBufferBase__III
1718   (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer) {
1719     glBindBufferBase(
1720         (GLenum)target,
1721         (GLuint)index,
1722         (GLuint)buffer
1723     );
1724 }
1725
1726 /* void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode ) */
1727 static
1728 void
1729 android_glTransformFeedbackVaryings
1730     (JNIEnv *_env, jobject _this, jint program, jobjectArray varyings_ref, jint bufferMode) {
1731     jint _exception = 0;
1732     const char* _exceptionType = NULL;
1733     const char* _exceptionMessage = NULL;
1734     jint _count = 0, _i;
1735     const char** _varyings = NULL;
1736     const char* _varying = NULL;
1737
1738     if (!varyings_ref) {
1739         _exception = 1;
1740         _exceptionType = "java/lang/IllegalArgumentException";
1741         _exceptionMessage = "varyings == null";
1742         goto exit;
1743     }
1744
1745     _count = _env->GetArrayLength(varyings_ref);
1746     _varyings = (const char**)calloc(_count, sizeof(const char*));
1747     for (_i = 0; _i < _count; _i++) {
1748         jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
1749         if (!_varying) {
1750             _exception = 1;
1751             _exceptionType = "java/lang/IllegalArgumentException";
1752             _exceptionMessage = "null varyings element";
1753             goto exit;
1754         }
1755         _varyings[_i] = _env->GetStringUTFChars(_varying, 0);
1756     }
1757
1758     glTransformFeedbackVaryings(program, _count, _varyings, bufferMode);
1759
1760 exit:
1761     for (_i = _count - 1; _i >= 0; _i--) {
1762         if (_varyings[_i]) {
1763             jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
1764             if (_varying) {
1765                 _env->ReleaseStringUTFChars(_varying, _varyings[_i]);
1766             }
1767         }
1768     }
1769     free(_varyings);
1770     if (_exception) {
1771         jniThrowException(_env, _exceptionType, _exceptionMessage);
1772     }
1773 }
1774
1775 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
1776 static void
1777 android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
1778   (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jintArray length_ref, jint lengthOffset, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset, jbyteArray name_ref, jint nameOffset) {
1779     jint _exception = 0;
1780     const char * _exceptionType;
1781     const char * _exceptionMessage;
1782     GLsizei *length_base = (GLsizei *) 0;
1783     jint _lengthRemaining;
1784     GLsizei *length = (GLsizei *) 0;
1785     GLint *size_base = (GLint *) 0;
1786     jint _sizeRemaining;
1787     GLint *size = (GLint *) 0;
1788     GLenum *type_base = (GLenum *) 0;
1789     jint _typeRemaining;
1790     GLenum *type = (GLenum *) 0;
1791     char *name_base = (char *) 0;
1792     jint _nameRemaining;
1793     char *name = (char *) 0;
1794
1795     if (!length_ref) {
1796         _exception = 1;
1797         _exceptionType = "java/lang/IllegalArgumentException";
1798         _exceptionMessage = "length == null";
1799         goto exit;
1800     }
1801     if (lengthOffset < 0) {
1802         _exception = 1;
1803         _exceptionType = "java/lang/IllegalArgumentException";
1804         _exceptionMessage = "lengthOffset < 0";
1805         goto exit;
1806     }
1807     _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
1808     length_base = (GLsizei *)
1809         _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
1810     length = length_base + lengthOffset;
1811
1812     if (!size_ref) {
1813         _exception = 1;
1814         _exceptionType = "java/lang/IllegalArgumentException";
1815         _exceptionMessage = "size == null";
1816         goto exit;
1817     }
1818     if (sizeOffset < 0) {
1819         _exception = 1;
1820         _exceptionType = "java/lang/IllegalArgumentException";
1821         _exceptionMessage = "sizeOffset < 0";
1822         goto exit;
1823     }
1824     _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
1825     size_base = (GLint *)
1826         _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
1827     size = size_base + sizeOffset;
1828
1829     if (!type_ref) {
1830         _exception = 1;
1831         _exceptionType = "java/lang/IllegalArgumentException";
1832         _exceptionMessage = "type == null";
1833         goto exit;
1834     }
1835     if (typeOffset < 0) {
1836         _exception = 1;
1837         _exceptionType = "java/lang/IllegalArgumentException";
1838         _exceptionMessage = "typeOffset < 0";
1839         goto exit;
1840     }
1841     _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
1842     type_base = (GLenum *)
1843         _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
1844     type = type_base + typeOffset;
1845
1846     if (!name_ref) {
1847         _exception = 1;
1848         _exceptionType = "java/lang/IllegalArgumentException";
1849         _exceptionMessage = "name == null";
1850         goto exit;
1851     }
1852     if (nameOffset < 0) {
1853         _exception = 1;
1854         _exceptionType = "java/lang/IllegalArgumentException";
1855         _exceptionMessage = "nameOffset < 0";
1856         goto exit;
1857     }
1858     _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
1859     name_base = (char *)
1860         _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
1861     name = name_base + nameOffset;
1862
1863     glGetTransformFeedbackVarying(
1864         (GLuint)program,
1865         (GLuint)index,
1866         (GLsizei)bufsize,
1867         (GLsizei *)length,
1868         (GLint *)size,
1869         (GLenum *)type,
1870         (char *)name
1871     );
1872
1873 exit:
1874     if (name_base) {
1875         _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
1876             _exception ? JNI_ABORT: 0);
1877     }
1878     if (type_base) {
1879         _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
1880             _exception ? JNI_ABORT: 0);
1881     }
1882     if (size_base) {
1883         _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
1884             _exception ? JNI_ABORT: 0);
1885     }
1886     if (length_base) {
1887         _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
1888             _exception ? JNI_ABORT: 0);
1889     }
1890     if (_exception) {
1891         jniThrowException(_env, _exceptionType, _exceptionMessage);
1892     }
1893 }
1894
1895 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
1896 static void
1897 android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
1898   (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
1899     jarray _lengthArray = (jarray) 0;
1900     jint _lengthBufferOffset = (jint) 0;
1901     jarray _sizeArray = (jarray) 0;
1902     jint _sizeBufferOffset = (jint) 0;
1903     jarray _typeArray = (jarray) 0;
1904     jint _typeBufferOffset = (jint) 0;
1905     jint _lengthRemaining;
1906     GLsizei *length = (GLsizei *) 0;
1907     jint _sizeRemaining;
1908     GLint *size = (GLint *) 0;
1909     jint _typeRemaining;
1910     GLenum *type = (GLenum *) 0;
1911
1912     length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
1913     size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
1914     type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
1915     if (length == NULL) {
1916         char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
1917         length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
1918     }
1919     if (size == NULL) {
1920         char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
1921         size = (GLint *) (_sizeBase + _sizeBufferOffset);
1922     }
1923     if (type == NULL) {
1924         char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
1925         type = (GLenum *) (_typeBase + _typeBufferOffset);
1926     }
1927     glGetTransformFeedbackVarying(
1928         (GLuint)program,
1929         (GLuint)index,
1930         (GLsizei)bufsize,
1931         (GLsizei *)length,
1932         (GLint *)size,
1933         (GLenum *)type,
1934         (char *)name
1935     );
1936     if (_typeArray) {
1937         releasePointer(_env, _typeArray, type, JNI_TRUE);
1938     }
1939     if (_sizeArray) {
1940         releasePointer(_env, _sizeArray, size, JNI_TRUE);
1941     }
1942     if (_lengthArray) {
1943         releasePointer(_env, _lengthArray, length, JNI_TRUE);
1944     }
1945 }
1946
1947 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
1948 static jstring
1949 android_glGetTransformFeedbackVarying1
1950   (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
1951     jint _exception = 0;
1952     const char * _exceptionType;
1953     const char * _exceptionMessage;
1954     GLint *size_base = (GLint *) 0;
1955     jint _sizeRemaining;
1956     GLint *size = (GLint *) 0;
1957     GLenum *type_base = (GLenum *) 0;
1958     jint _typeRemaining;
1959     GLenum *type = (GLenum *) 0;
1960
1961     jstring result = 0;
1962
1963     GLint len = 0;
1964     glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
1965     if (!len) {
1966         return _env->NewStringUTF("");
1967     }
1968     char* buf = (char*) malloc(len);
1969
1970     if (buf == NULL) {
1971         jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
1972         return NULL;
1973     }
1974     if (!size_ref) {
1975         _exception = 1;
1976         _exceptionType = "java/lang/IllegalArgumentException";
1977         _exceptionMessage = "size == null";
1978         goto exit;
1979     }
1980     if (sizeOffset < 0) {
1981         _exception = 1;
1982         _exceptionType = "java/lang/IllegalArgumentException";
1983         _exceptionMessage = "sizeOffset < 0";
1984         goto exit;
1985     }
1986     _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
1987     size_base = (GLint *)
1988         _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
1989     size = size_base + sizeOffset;
1990
1991     if (!type_ref) {
1992         _exception = 1;
1993         _exceptionType = "java/lang/IllegalArgumentException";
1994         _exceptionMessage = "type == null";
1995         goto exit;
1996     }
1997     if (typeOffset < 0) {
1998         _exception = 1;
1999         _exceptionType = "java/lang/IllegalArgumentException";
2000         _exceptionMessage = "typeOffset < 0";
2001         goto exit;
2002     }
2003     _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
2004     type_base = (GLenum *)
2005         _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
2006     type = type_base + typeOffset;
2007
2008     glGetTransformFeedbackVarying(
2009         (GLuint)program,
2010         (GLuint)index,
2011         (GLsizei)len,
2012         NULL,
2013         (GLint *)size,
2014         (GLenum *)type,
2015         (char *)buf
2016     );
2017 exit:
2018     if (type_base) {
2019         _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
2020             _exception ? JNI_ABORT: 0);
2021     }
2022     if (size_base) {
2023         _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
2024             _exception ? JNI_ABORT: 0);
2025     }
2026     if (_exception != 1) {
2027         result = _env->NewStringUTF(buf);
2028     }
2029     if (buf) {
2030         free(buf);
2031     }
2032     if (_exception) {
2033         jniThrowException(_env, _exceptionType, _exceptionMessage);
2034     }
2035     if (result == 0) {
2036         result = _env->NewStringUTF("");
2037     }
2038
2039     return result;
2040 }
2041
2042 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2043 static jstring
2044 android_glGetTransformFeedbackVarying2
2045   (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
2046     jarray _sizeArray = (jarray) 0;
2047     jint _sizeBufferOffset = (jint) 0;
2048     jarray _typeArray = (jarray) 0;
2049     jint _typeBufferOffset = (jint) 0;
2050     jint _lengthRemaining;
2051     GLsizei *length = (GLsizei *) 0;
2052     jint _sizeRemaining;
2053     GLint *size = (GLint *) 0;
2054     jint _typeRemaining;
2055     GLenum *type = (GLenum *) 0;
2056
2057     jstring result = 0;
2058
2059     GLint len = 0;
2060     glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2061     if (!len) {
2062         return _env->NewStringUTF("");
2063     }
2064     char* buf = (char*) malloc(len);
2065
2066     if (buf == NULL) {
2067         jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2068         return NULL;
2069     }
2070
2071     size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
2072     type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
2073     if (size == NULL) {
2074         char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
2075         size = (GLint *) (_sizeBase + _sizeBufferOffset);
2076     }
2077     if (type == NULL) {
2078         char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
2079         type = (GLenum *) (_typeBase + _typeBufferOffset);
2080     }
2081     glGetTransformFeedbackVarying(
2082         (GLuint)program,
2083         (GLuint)index,
2084         (GLsizei)len,
2085         NULL,
2086         (GLint *)size,
2087         (GLenum *)type,
2088         (char *)buf
2089     );
2090
2091     if (_typeArray) {
2092         releasePointer(_env, _typeArray, type, JNI_TRUE);
2093     }
2094     if (_sizeArray) {
2095         releasePointer(_env, _sizeArray, size, JNI_TRUE);
2096     }
2097     result = _env->NewStringUTF(buf);
2098     if (buf) {
2099         free(buf);
2100     }
2101     return result;
2102 }
2103 /* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
2104 static void
2105 android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I
2106   (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
2107     jarray _array = (jarray) 0;
2108     jint _bufferOffset = (jint) 0;
2109     jint _remaining;
2110     GLvoid *pointer = (GLvoid *) 0;
2111
2112     if (pointer_buf) {
2113         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
2114         if ( ! pointer ) {
2115             return;
2116         }
2117     }
2118     glVertexAttribIPointerBounds(
2119         (GLuint)index,
2120         (GLint)size,
2121         (GLenum)type,
2122         (GLsizei)stride,
2123         (GLvoid *)pointer,
2124         (GLsizei)remaining
2125     );
2126 }
2127
2128 /* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, GLsizei offset ) */
2129 static void
2130 android_glVertexAttribIPointer__IIIII
2131   (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jint offset) {
2132     glVertexAttribIPointer(
2133         (GLuint)index,
2134         (GLint)size,
2135         (GLenum)type,
2136         (GLsizei)stride,
2137         reinterpret_cast<GLvoid *>(offset)
2138     );
2139 }
2140
2141 /* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2142 static void
2143 android_glGetVertexAttribIiv__II_3II
2144   (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2145     jint _exception = 0;
2146     const char * _exceptionType = NULL;
2147     const char * _exceptionMessage = NULL;
2148     GLint *params_base = (GLint *) 0;
2149     jint _remaining;
2150     GLint *params = (GLint *) 0;
2151
2152     if (!params_ref) {
2153         _exception = 1;
2154         _exceptionType = "java/lang/IllegalArgumentException";
2155         _exceptionMessage = "params == null";
2156         goto exit;
2157     }
2158     if (offset < 0) {
2159         _exception = 1;
2160         _exceptionType = "java/lang/IllegalArgumentException";
2161         _exceptionMessage = "offset < 0";
2162         goto exit;
2163     }
2164     _remaining = _env->GetArrayLength(params_ref) - offset;
2165     params_base = (GLint *)
2166         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2167     params = params_base + offset;
2168
2169     glGetVertexAttribIiv(
2170         (GLuint)index,
2171         (GLenum)pname,
2172         (GLint *)params
2173     );
2174
2175 exit:
2176     if (params_base) {
2177         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2178             _exception ? JNI_ABORT: 0);
2179     }
2180     if (_exception) {
2181         jniThrowException(_env, _exceptionType, _exceptionMessage);
2182     }
2183 }
2184
2185 /* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2186 static void
2187 android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2
2188   (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
2189     jarray _array = (jarray) 0;
2190     jint _bufferOffset = (jint) 0;
2191     jint _remaining;
2192     GLint *params = (GLint *) 0;
2193
2194     params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
2195     if (params == NULL) {
2196         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2197         params = (GLint *) (_paramsBase + _bufferOffset);
2198     }
2199     glGetVertexAttribIiv(
2200         (GLuint)index,
2201         (GLenum)pname,
2202         (GLint *)params
2203     );
2204     if (_array) {
2205         releasePointer(_env, _array, params, JNI_TRUE);
2206     }
2207 }
2208
2209 /* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2210 static void
2211 android_glGetVertexAttribIuiv__II_3II
2212   (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2213     jint _exception = 0;
2214     const char * _exceptionType = NULL;
2215     const char * _exceptionMessage = NULL;
2216     GLuint *params_base = (GLuint *) 0;
2217     jint _remaining;
2218     GLuint *params = (GLuint *) 0;
2219
2220     if (!params_ref) {
2221         _exception = 1;
2222         _exceptionType = "java/lang/IllegalArgumentException";
2223         _exceptionMessage = "params == null";
2224         goto exit;
2225     }
2226     if (offset < 0) {
2227         _exception = 1;
2228         _exceptionType = "java/lang/IllegalArgumentException";
2229         _exceptionMessage = "offset < 0";
2230         goto exit;
2231     }
2232     _remaining = _env->GetArrayLength(params_ref) - offset;
2233     params_base = (GLuint *)
2234         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2235     params = params_base + offset;
2236
2237     glGetVertexAttribIuiv(
2238         (GLuint)index,
2239         (GLenum)pname,
2240         (GLuint *)params
2241     );
2242
2243 exit:
2244     if (params_base) {
2245         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2246             _exception ? JNI_ABORT: 0);
2247     }
2248     if (_exception) {
2249         jniThrowException(_env, _exceptionType, _exceptionMessage);
2250     }
2251 }
2252
2253 /* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2254 static void
2255 android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2
2256   (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
2257     jarray _array = (jarray) 0;
2258     jint _bufferOffset = (jint) 0;
2259     jint _remaining;
2260     GLuint *params = (GLuint *) 0;
2261
2262     params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
2263     if (params == NULL) {
2264         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2265         params = (GLuint *) (_paramsBase + _bufferOffset);
2266     }
2267     glGetVertexAttribIuiv(
2268         (GLuint)index,
2269         (GLenum)pname,
2270         (GLuint *)params
2271     );
2272     if (_array) {
2273         releasePointer(_env, _array, params, JNI_TRUE);
2274     }
2275 }
2276
2277 /* void glVertexAttribI4i ( GLuint index, GLint x, GLint y, GLint z, GLint w ) */
2278 static void
2279 android_glVertexAttribI4i__IIIII
2280   (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2281     glVertexAttribI4i(
2282         (GLuint)index,
2283         (GLint)x,
2284         (GLint)y,
2285         (GLint)z,
2286         (GLint)w
2287     );
2288 }
2289
2290 /* void glVertexAttribI4ui ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w ) */
2291 static void
2292 android_glVertexAttribI4ui__IIIII
2293   (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2294     glVertexAttribI4ui(
2295         (GLuint)index,
2296         (GLuint)x,
2297         (GLuint)y,
2298         (GLuint)z,
2299         (GLuint)w
2300     );
2301 }
2302
2303 /* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2304 static void
2305 android_glVertexAttribI4iv__I_3II
2306   (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2307     jint _exception = 0;
2308     const char * _exceptionType = NULL;
2309     const char * _exceptionMessage = NULL;
2310     GLint *v_base = (GLint *) 0;
2311     jint _remaining;
2312     GLint *v = (GLint *) 0;
2313
2314     if (!v_ref) {
2315         _exception = 1;
2316         _exceptionType = "java/lang/IllegalArgumentException";
2317         _exceptionMessage = "v == null";
2318         goto exit;
2319     }
2320     if (offset < 0) {
2321         _exception = 1;
2322         _exceptionType = "java/lang/IllegalArgumentException";
2323         _exceptionMessage = "offset < 0";
2324         goto exit;
2325     }
2326     _remaining = _env->GetArrayLength(v_ref) - offset;
2327     v_base = (GLint *)
2328         _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
2329     v = v_base + offset;
2330
2331     glVertexAttribI4iv(
2332         (GLuint)index,
2333         (GLint *)v
2334     );
2335
2336 exit:
2337     if (v_base) {
2338         _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
2339             JNI_ABORT);
2340     }
2341     if (_exception) {
2342         jniThrowException(_env, _exceptionType, _exceptionMessage);
2343     }
2344 }
2345
2346 /* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2347 static void
2348 android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2
2349   (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
2350     jarray _array = (jarray) 0;
2351     jint _bufferOffset = (jint) 0;
2352     jint _remaining;
2353     GLint *v = (GLint *) 0;
2354
2355     v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
2356     if (v == NULL) {
2357         char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2358         v = (GLint *) (_vBase + _bufferOffset);
2359     }
2360     glVertexAttribI4iv(
2361         (GLuint)index,
2362         (GLint *)v
2363     );
2364     if (_array) {
2365         releasePointer(_env, _array, v, JNI_FALSE);
2366     }
2367 }
2368
2369 /* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2370 static void
2371 android_glVertexAttribI4uiv__I_3II
2372   (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2373     jint _exception = 0;
2374     const char * _exceptionType = NULL;
2375     const char * _exceptionMessage = NULL;
2376     GLuint *v_base = (GLuint *) 0;
2377     jint _remaining;
2378     GLuint *v = (GLuint *) 0;
2379
2380     if (!v_ref) {
2381         _exception = 1;
2382         _exceptionType = "java/lang/IllegalArgumentException";
2383         _exceptionMessage = "v == null";
2384         goto exit;
2385     }
2386     if (offset < 0) {
2387         _exception = 1;
2388         _exceptionType = "java/lang/IllegalArgumentException";
2389         _exceptionMessage = "offset < 0";
2390         goto exit;
2391     }
2392     _remaining = _env->GetArrayLength(v_ref) - offset;
2393     v_base = (GLuint *)
2394         _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
2395     v = v_base + offset;
2396
2397     glVertexAttribI4uiv(
2398         (GLuint)index,
2399         (GLuint *)v
2400     );
2401
2402 exit:
2403     if (v_base) {
2404         _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
2405             JNI_ABORT);
2406     }
2407     if (_exception) {
2408         jniThrowException(_env, _exceptionType, _exceptionMessage);
2409     }
2410 }
2411
2412 /* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2413 static void
2414 android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2
2415   (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
2416     jarray _array = (jarray) 0;
2417     jint _bufferOffset = (jint) 0;
2418     jint _remaining;
2419     GLuint *v = (GLuint *) 0;
2420
2421     v = (GLuint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
2422     if (v == NULL) {
2423         char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2424         v = (GLuint *) (_vBase + _bufferOffset);
2425     }
2426     glVertexAttribI4uiv(
2427         (GLuint)index,
2428         (GLuint *)v
2429     );
2430     if (_array) {
2431         releasePointer(_env, _array, v, JNI_FALSE);
2432     }
2433 }
2434
2435 /* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2436 static void
2437 android_glGetUniformuiv__II_3II
2438   (JNIEnv *_env, jobject _this, jint program, jint location, jintArray params_ref, jint offset) {
2439     jint _exception = 0;
2440     const char * _exceptionType = NULL;
2441     const char * _exceptionMessage = NULL;
2442     GLuint *params_base = (GLuint *) 0;
2443     jint _remaining;
2444     GLuint *params = (GLuint *) 0;
2445
2446     if (!params_ref) {
2447         _exception = 1;
2448         _exceptionType = "java/lang/IllegalArgumentException";
2449         _exceptionMessage = "params == null";
2450         goto exit;
2451     }
2452     if (offset < 0) {
2453         _exception = 1;
2454         _exceptionType = "java/lang/IllegalArgumentException";
2455         _exceptionMessage = "offset < 0";
2456         goto exit;
2457     }
2458     _remaining = _env->GetArrayLength(params_ref) - offset;
2459     params_base = (GLuint *)
2460         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2461     params = params_base + offset;
2462
2463     glGetUniformuiv(
2464         (GLuint)program,
2465         (GLint)location,
2466         (GLuint *)params
2467     );
2468
2469 exit:
2470     if (params_base) {
2471         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2472             _exception ? JNI_ABORT: 0);
2473     }
2474     if (_exception) {
2475         jniThrowException(_env, _exceptionType, _exceptionMessage);
2476     }
2477 }
2478
2479 /* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2480 static void
2481 android_glGetUniformuiv__IILjava_nio_IntBuffer_2
2482   (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
2483     jarray _array = (jarray) 0;
2484     jint _bufferOffset = (jint) 0;
2485     jint _remaining;
2486     GLuint *params = (GLuint *) 0;
2487
2488     params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
2489     if (params == NULL) {
2490         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2491         params = (GLuint *) (_paramsBase + _bufferOffset);
2492     }
2493     glGetUniformuiv(
2494         (GLuint)program,
2495         (GLint)location,
2496         (GLuint *)params
2497     );
2498     if (_array) {
2499         releasePointer(_env, _array, params, JNI_TRUE);
2500     }
2501 }
2502
2503 /* GLint glGetFragDataLocation ( GLuint program, const GLchar *name ) */
2504 static jint
2505 android_glGetFragDataLocation__ILjava_lang_String_2
2506   (JNIEnv *_env, jobject _this, jint program, jstring name) {
2507     jint _exception = 0;
2508     const char * _exceptionType = NULL;
2509     const char * _exceptionMessage = NULL;
2510     GLint _returnValue = 0;
2511     const char* _nativename = 0;
2512
2513     if (!name) {
2514         _exception = 1;
2515         _exceptionType = "java/lang/IllegalArgumentException";
2516         _exceptionMessage = "name == null";
2517         goto exit;
2518     }
2519     _nativename = _env->GetStringUTFChars(name, 0);
2520
2521     _returnValue = glGetFragDataLocation(
2522         (GLuint)program,
2523         (GLchar *)_nativename
2524     );
2525
2526 exit:
2527     if (_nativename) {
2528         _env->ReleaseStringUTFChars(name, _nativename);
2529     }
2530
2531     if (_exception) {
2532         jniThrowException(_env, _exceptionType, _exceptionMessage);
2533     }
2534     return (jint)_returnValue;
2535 }
2536
2537 /* void glUniform1ui ( GLint location, GLuint v0 ) */
2538 static void
2539 android_glUniform1ui__II
2540   (JNIEnv *_env, jobject _this, jint location, jint v0) {
2541     glUniform1ui(
2542         (GLint)location,
2543         (GLuint)v0
2544     );
2545 }
2546
2547 /* void glUniform2ui ( GLint location, GLuint v0, GLuint v1 ) */
2548 static void
2549 android_glUniform2ui__III
2550   (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1) {
2551     glUniform2ui(
2552         (GLint)location,
2553         (GLuint)v0,
2554         (GLuint)v1
2555     );
2556 }
2557
2558 /* void glUniform3ui ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
2559 static void
2560 android_glUniform3ui__IIII
2561   (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2) {
2562     glUniform3ui(
2563         (GLint)location,
2564         (GLuint)v0,
2565         (GLuint)v1,
2566         (GLuint)v2
2567     );
2568 }
2569
2570 /* void glUniform4ui ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
2571 static void
2572 android_glUniform4ui__IIIII
2573   (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2, jint v3) {
2574     glUniform4ui(
2575         (GLint)location,
2576         (GLuint)v0,
2577         (GLuint)v1,
2578         (GLuint)v2,
2579         (GLuint)v3
2580     );
2581 }
2582
2583 /* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
2584 static void
2585 android_glUniform1uiv__II_3II
2586   (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2587     jint _exception = 0;
2588     const char * _exceptionType = NULL;
2589     const char * _exceptionMessage = NULL;
2590     GLuint *value_base = (GLuint *) 0;
2591     jint _remaining;
2592     GLuint *value = (GLuint *) 0;
2593
2594     if (!value_ref) {
2595         _exception = 1;
2596         _exceptionType = "java/lang/IllegalArgumentException";
2597         _exceptionMessage = "value == null";
2598         goto exit;
2599     }
2600     if (offset < 0) {
2601         _exception = 1;
2602         _exceptionType = "java/lang/IllegalArgumentException";
2603         _exceptionMessage = "offset < 0";
2604         goto exit;
2605     }
2606     _remaining = _env->GetArrayLength(value_ref) - offset;
2607     value_base = (GLuint *)
2608         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
2609     value = value_base + offset;
2610
2611     glUniform1uiv(
2612         (GLint)location,
2613         (GLsizei)count,
2614         (GLuint *)value
2615     );
2616
2617 exit:
2618     if (value_base) {
2619         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
2620             JNI_ABORT);
2621     }
2622     if (_exception) {
2623         jniThrowException(_env, _exceptionType, _exceptionMessage);
2624     }
2625 }
2626
2627 /* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
2628 static void
2629 android_glUniform1uiv__IILjava_nio_IntBuffer_2
2630   (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
2631     jarray _array = (jarray) 0;
2632     jint _bufferOffset = (jint) 0;
2633     jint _remaining;
2634     GLuint *value = (GLuint *) 0;
2635
2636     value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
2637     if (value == NULL) {
2638         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2639         value = (GLuint *) (_valueBase + _bufferOffset);
2640     }
2641     glUniform1uiv(
2642         (GLint)location,
2643         (GLsizei)count,
2644         (GLuint *)value
2645     );
2646     if (_array) {
2647         releasePointer(_env, _array, value, JNI_FALSE);
2648     }
2649 }
2650
2651 /* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
2652 static void
2653 android_glUniform2uiv__II_3II
2654   (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2655     jint _exception = 0;
2656     const char * _exceptionType = NULL;
2657     const char * _exceptionMessage = NULL;
2658     GLuint *value_base = (GLuint *) 0;
2659     jint _remaining;
2660     GLuint *value = (GLuint *) 0;
2661
2662     if (!value_ref) {
2663         _exception = 1;
2664         _exceptionType = "java/lang/IllegalArgumentException";
2665         _exceptionMessage = "value == null";
2666         goto exit;
2667     }
2668     if (offset < 0) {
2669         _exception = 1;
2670         _exceptionType = "java/lang/IllegalArgumentException";
2671         _exceptionMessage = "offset < 0";
2672         goto exit;
2673     }
2674     _remaining = _env->GetArrayLength(value_ref) - offset;
2675     value_base = (GLuint *)
2676         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
2677     value = value_base + offset;
2678
2679     glUniform2uiv(
2680         (GLint)location,
2681         (GLsizei)count,
2682         (GLuint *)value
2683     );
2684
2685 exit:
2686     if (value_base) {
2687         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
2688             JNI_ABORT);
2689     }
2690     if (_exception) {
2691         jniThrowException(_env, _exceptionType, _exceptionMessage);
2692     }
2693 }
2694
2695 /* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
2696 static void
2697 android_glUniform2uiv__IILjava_nio_IntBuffer_2
2698   (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
2699     jarray _array = (jarray) 0;
2700     jint _bufferOffset = (jint) 0;
2701     jint _remaining;
2702     GLuint *value = (GLuint *) 0;
2703
2704     value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
2705     if (value == NULL) {
2706         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2707         value = (GLuint *) (_valueBase + _bufferOffset);
2708     }
2709     glUniform2uiv(
2710         (GLint)location,
2711         (GLsizei)count,
2712         (GLuint *)value
2713     );
2714     if (_array) {
2715         releasePointer(_env, _array, value, JNI_FALSE);
2716     }
2717 }
2718
2719 /* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
2720 static void
2721 android_glUniform3uiv__II_3II
2722   (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2723     jint _exception = 0;
2724     const char * _exceptionType = NULL;
2725     const char * _exceptionMessage = NULL;
2726     GLuint *value_base = (GLuint *) 0;
2727     jint _remaining;
2728     GLuint *value = (GLuint *) 0;
2729
2730     if (!value_ref) {
2731         _exception = 1;
2732         _exceptionType = "java/lang/IllegalArgumentException";
2733         _exceptionMessage = "value == null";
2734         goto exit;
2735     }
2736     if (offset < 0) {
2737         _exception = 1;
2738         _exceptionType = "java/lang/IllegalArgumentException";
2739         _exceptionMessage = "offset < 0";
2740         goto exit;
2741     }
2742     _remaining = _env->GetArrayLength(value_ref) - offset;
2743     value_base = (GLuint *)
2744         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
2745     value = value_base + offset;
2746
2747     glUniform3uiv(
2748         (GLint)location,
2749         (GLsizei)count,
2750         (GLuint *)value
2751     );
2752
2753 exit:
2754     if (value_base) {
2755         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
2756             JNI_ABORT);
2757     }
2758     if (_exception) {
2759         jniThrowException(_env, _exceptionType, _exceptionMessage);
2760     }
2761 }
2762
2763 /* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
2764 static void
2765 android_glUniform3uiv__IILjava_nio_IntBuffer_2
2766   (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
2767     jarray _array = (jarray) 0;
2768     jint _bufferOffset = (jint) 0;
2769     jint _remaining;
2770     GLuint *value = (GLuint *) 0;
2771
2772     value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
2773     if (value == NULL) {
2774         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2775         value = (GLuint *) (_valueBase + _bufferOffset);
2776     }
2777     glUniform3uiv(
2778         (GLint)location,
2779         (GLsizei)count,
2780         (GLuint *)value
2781     );
2782     if (_array) {
2783         releasePointer(_env, _array, value, JNI_FALSE);
2784     }
2785 }
2786
2787 /* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
2788 static void
2789 android_glUniform4uiv__II_3II
2790   (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2791     jint _exception = 0;
2792     const char * _exceptionType = NULL;
2793     const char * _exceptionMessage = NULL;
2794     GLuint *value_base = (GLuint *) 0;
2795     jint _remaining;
2796     GLuint *value = (GLuint *) 0;
2797
2798     if (!value_ref) {
2799         _exception = 1;
2800         _exceptionType = "java/lang/IllegalArgumentException";
2801         _exceptionMessage = "value == null";
2802         goto exit;
2803     }
2804     if (offset < 0) {
2805         _exception = 1;
2806         _exceptionType = "java/lang/IllegalArgumentException";
2807         _exceptionMessage = "offset < 0";
2808         goto exit;
2809     }
2810     _remaining = _env->GetArrayLength(value_ref) - offset;
2811     value_base = (GLuint *)
2812         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
2813     value = value_base + offset;
2814
2815     glUniform4uiv(
2816         (GLint)location,
2817         (GLsizei)count,
2818         (GLuint *)value
2819     );
2820
2821 exit:
2822     if (value_base) {
2823         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
2824             JNI_ABORT);
2825     }
2826     if (_exception) {
2827         jniThrowException(_env, _exceptionType, _exceptionMessage);
2828     }
2829 }
2830
2831 /* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
2832 static void
2833 android_glUniform4uiv__IILjava_nio_IntBuffer_2
2834   (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
2835     jarray _array = (jarray) 0;
2836     jint _bufferOffset = (jint) 0;
2837     jint _remaining;
2838     GLuint *value = (GLuint *) 0;
2839
2840     value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
2841     if (value == NULL) {
2842         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2843         value = (GLuint *) (_valueBase + _bufferOffset);
2844     }
2845     glUniform4uiv(
2846         (GLint)location,
2847         (GLsizei)count,
2848         (GLuint *)value
2849     );
2850     if (_array) {
2851         releasePointer(_env, _array, value, JNI_FALSE);
2852     }
2853 }
2854
2855 /* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
2856 static void
2857 android_glClearBufferiv__II_3II
2858   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
2859     jint _exception = 0;
2860     const char * _exceptionType = NULL;
2861     const char * _exceptionMessage = NULL;
2862     GLint *value_base = (GLint *) 0;
2863     jint _remaining;
2864     GLint *value = (GLint *) 0;
2865
2866     if (!value_ref) {
2867         _exception = 1;
2868         _exceptionType = "java/lang/IllegalArgumentException";
2869         _exceptionMessage = "value == null";
2870         goto exit;
2871     }
2872     if (offset < 0) {
2873         _exception = 1;
2874         _exceptionType = "java/lang/IllegalArgumentException";
2875         _exceptionMessage = "offset < 0";
2876         goto exit;
2877     }
2878     _remaining = _env->GetArrayLength(value_ref) - offset;
2879     value_base = (GLint *)
2880         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
2881     value = value_base + offset;
2882
2883     glClearBufferiv(
2884         (GLenum)buffer,
2885         (GLint)drawbuffer,
2886         (GLint *)value
2887     );
2888
2889 exit:
2890     if (value_base) {
2891         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
2892             JNI_ABORT);
2893     }
2894     if (_exception) {
2895         jniThrowException(_env, _exceptionType, _exceptionMessage);
2896     }
2897 }
2898
2899 /* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
2900 static void
2901 android_glClearBufferiv__IILjava_nio_IntBuffer_2
2902   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
2903     jarray _array = (jarray) 0;
2904     jint _bufferOffset = (jint) 0;
2905     jint _remaining;
2906     GLint *value = (GLint *) 0;
2907
2908     value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
2909     if (value == NULL) {
2910         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2911         value = (GLint *) (_valueBase + _bufferOffset);
2912     }
2913     glClearBufferiv(
2914         (GLenum)buffer,
2915         (GLint)drawbuffer,
2916         (GLint *)value
2917     );
2918     if (_array) {
2919         releasePointer(_env, _array, value, JNI_FALSE);
2920     }
2921 }
2922
2923 /* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
2924 static void
2925 android_glClearBufferuiv__II_3II
2926   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
2927     jint _exception = 0;
2928     const char * _exceptionType = NULL;
2929     const char * _exceptionMessage = NULL;
2930     GLuint *value_base = (GLuint *) 0;
2931     jint _remaining;
2932     GLuint *value = (GLuint *) 0;
2933
2934     if (!value_ref) {
2935         _exception = 1;
2936         _exceptionType = "java/lang/IllegalArgumentException";
2937         _exceptionMessage = "value == null";
2938         goto exit;
2939     }
2940     if (offset < 0) {
2941         _exception = 1;
2942         _exceptionType = "java/lang/IllegalArgumentException";
2943         _exceptionMessage = "offset < 0";
2944         goto exit;
2945     }
2946     _remaining = _env->GetArrayLength(value_ref) - offset;
2947     value_base = (GLuint *)
2948         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
2949     value = value_base + offset;
2950
2951     glClearBufferuiv(
2952         (GLenum)buffer,
2953         (GLint)drawbuffer,
2954         (GLuint *)value
2955     );
2956
2957 exit:
2958     if (value_base) {
2959         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
2960             JNI_ABORT);
2961     }
2962     if (_exception) {
2963         jniThrowException(_env, _exceptionType, _exceptionMessage);
2964     }
2965 }
2966
2967 /* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
2968 static void
2969 android_glClearBufferuiv__IILjava_nio_IntBuffer_2
2970   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
2971     jarray _array = (jarray) 0;
2972     jint _bufferOffset = (jint) 0;
2973     jint _remaining;
2974     GLuint *value = (GLuint *) 0;
2975
2976     value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
2977     if (value == NULL) {
2978         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
2979         value = (GLuint *) (_valueBase + _bufferOffset);
2980     }
2981     glClearBufferuiv(
2982         (GLenum)buffer,
2983         (GLint)drawbuffer,
2984         (GLuint *)value
2985     );
2986     if (_array) {
2987         releasePointer(_env, _array, value, JNI_FALSE);
2988     }
2989 }
2990
2991 /* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
2992 static void
2993 android_glClearBufferfv__II_3FI
2994   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloatArray value_ref, jint offset) {
2995     jint _exception = 0;
2996     const char * _exceptionType = NULL;
2997     const char * _exceptionMessage = NULL;
2998     GLfloat *value_base = (GLfloat *) 0;
2999     jint _remaining;
3000     GLfloat *value = (GLfloat *) 0;
3001
3002     if (!value_ref) {
3003         _exception = 1;
3004         _exceptionType = "java/lang/IllegalArgumentException";
3005         _exceptionMessage = "value == null";
3006         goto exit;
3007     }
3008     if (offset < 0) {
3009         _exception = 1;
3010         _exceptionType = "java/lang/IllegalArgumentException";
3011         _exceptionMessage = "offset < 0";
3012         goto exit;
3013     }
3014     _remaining = _env->GetArrayLength(value_ref) - offset;
3015     value_base = (GLfloat *)
3016         _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
3017     value = value_base + offset;
3018
3019     glClearBufferfv(
3020         (GLenum)buffer,
3021         (GLint)drawbuffer,
3022         (GLfloat *)value
3023     );
3024
3025 exit:
3026     if (value_base) {
3027         _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
3028             JNI_ABORT);
3029     }
3030     if (_exception) {
3031         jniThrowException(_env, _exceptionType, _exceptionMessage);
3032     }
3033 }
3034
3035 /* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3036 static void
3037 android_glClearBufferfv__IILjava_nio_FloatBuffer_2
3038   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
3039     jarray _array = (jarray) 0;
3040     jint _bufferOffset = (jint) 0;
3041     jint _remaining;
3042     GLfloat *value = (GLfloat *) 0;
3043
3044     value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
3045     if (value == NULL) {
3046         char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3047         value = (GLfloat *) (_valueBase + _bufferOffset);
3048     }
3049     glClearBufferfv(
3050         (GLenum)buffer,
3051         (GLint)drawbuffer,
3052         (GLfloat *)value
3053     );
3054     if (_array) {
3055         releasePointer(_env, _array, value, JNI_FALSE);
3056     }
3057 }
3058
3059 /* void glClearBufferfi ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil ) */
3060 static void
3061 android_glClearBufferfi__IIFI
3062   (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloat depth, jint stencil) {
3063     glClearBufferfi(
3064         (GLenum)buffer,
3065         (GLint)drawbuffer,
3066         (GLfloat)depth,
3067         (GLint)stencil
3068     );
3069 }
3070
3071 /* const GLubyte * glGetStringi ( GLenum name, GLuint index ) */
3072 static jstring
3073 android_glGetStringi__II
3074   (JNIEnv *_env, jobject _this, jint name, jint index) {
3075     const GLubyte* _chars = glGetStringi((GLenum)name, (GLuint)index);
3076     return _env->NewStringUTF((const char*)_chars);
3077 }
3078
3079 /* void glCopyBufferSubData ( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ) */
3080 static void
3081 android_glCopyBufferSubData__IIIII
3082   (JNIEnv *_env, jobject _this, jint readTarget, jint writeTarget, jint readOffset, jint writeOffset, jint size) {
3083     glCopyBufferSubData(
3084         (GLenum)readTarget,
3085         (GLenum)writeTarget,
3086         (GLintptr)readOffset,
3087         (GLintptr)writeOffset,
3088         (GLsizeiptr)size
3089     );
3090 }
3091
3092 /* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3093 static
3094 void
3095 android_glGetUniformIndices_array
3096     (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jintArray uniformIndices_ref, jint uniformIndicesOffset) {
3097     jint _exception = 0;
3098     const char* _exceptionType = NULL;
3099     const char* _exceptionMessage = NULL;
3100     jint _count = 0;
3101     jint _i;
3102     const char** _names = NULL;
3103     GLuint* _indices_base = NULL;
3104     GLuint* _indices = NULL;
3105
3106     if (!uniformNames_ref) {
3107         _exception = 1;
3108         _exceptionType = "java/lang/IllegalArgumentException";
3109         _exceptionMessage = "uniformNames == null";
3110         goto exit;
3111     }
3112     _count = _env->GetArrayLength(uniformNames_ref);
3113     _names = (const char**)calloc(_count, sizeof(const char*));
3114     for (_i = 0; _i < _count; _i++) {
3115         jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3116         if (!_name) {
3117             _exception = 1;
3118             _exceptionType = "java/lang/IllegalArgumentException";
3119             _exceptionMessage = "null uniformNames element";
3120             goto exit;
3121         }
3122         _names[_i] = _env->GetStringUTFChars(_name, 0);
3123     }
3124
3125     if (!uniformIndices_ref) {
3126         _exception = 1;
3127         _exceptionType = "java/lang/IllegalArgumentException";
3128         _exceptionMessage = "uniformIndices == null";
3129         goto exit;
3130     }
3131     if (uniformIndicesOffset < 0) {
3132         _exception = 1;
3133         _exceptionType = "java/lang/IllegalArgumentException";
3134         _exceptionMessage = "uniformIndicesOffset < 0";
3135         goto exit;
3136     }
3137     if (_env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset < _count) {
3138         _exception = 1;
3139         _exceptionType = "java/lang/IllegalArgumentException";
3140         _exceptionMessage = "not enough space in uniformIndices";
3141         goto exit;
3142     }
3143     _indices_base = (GLuint*)_env->GetPrimitiveArrayCritical(
3144             uniformIndices_ref, 0);
3145     _indices = _indices_base + uniformIndicesOffset;
3146
3147     glGetUniformIndices(program, _count, _names, _indices);
3148
3149 exit:
3150     if (_indices_base) {
3151         _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, _indices_base,
3152                 _exception ? JNI_ABORT : 0);
3153     }
3154     for (_i = _count - 1; _i >= 0; _i--) {
3155         if (_names[_i]) {
3156             jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3157             if (_name) {
3158                 _env->ReleaseStringUTFChars(_name, _names[_i]);
3159             }
3160         }
3161     }
3162     free(_names);
3163     if (_exception) {
3164         jniThrowException(_env, _exceptionType, _exceptionMessage);
3165     }
3166 }
3167
3168 /* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3169 static
3170 void
3171 android_glGetUniformIndices_buffer
3172     (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jobject uniformIndices_buf) {
3173     jint _exception = 0;
3174     const char* _exceptionType = NULL;
3175     const char* _exceptionMessage = NULL;
3176     jint _count = 0;
3177     jint _i;
3178     const char** _names = NULL;
3179     jarray _uniformIndicesArray = (jarray)0;
3180     jint _uniformIndicesRemaining;
3181     jint _uniformIndicesOffset = 0;
3182     GLuint* _indices = NULL;
3183     char* _indicesBase = NULL;
3184
3185     if (!uniformNames_ref) {
3186         _exception = 1;
3187         _exceptionType = "java/lang/IllegalArgumentException";
3188         _exceptionMessage = "uniformNames == null";
3189         goto exit;
3190     }
3191     if (!uniformIndices_buf) {
3192         _exception = 1;
3193         _exceptionType = "java/lang/IllegalArgumentException";
3194         _exceptionMessage = "uniformIndices == null";
3195         goto exit;
3196     }
3197
3198     _count = _env->GetArrayLength(uniformNames_ref);
3199     _names = (const char**)calloc(_count, sizeof(const char*));
3200     for (_i = 0; _i < _count; _i++) {
3201         jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3202         if (!_name) {
3203             _exception = 1;
3204             _exceptionType = "java/lang/IllegalArgumentException";
3205             _exceptionMessage = "null uniformNames element";
3206             goto exit;
3207         }
3208         _names[_i] = _env->GetStringUTFChars(_name, 0);
3209     }
3210
3211     _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
3212             &_uniformIndicesArray, &_uniformIndicesRemaining,
3213             &_uniformIndicesOffset);
3214     if (!_indices) {
3215         _indicesBase = (char*)_env->GetPrimitiveArrayCritical(
3216                 _uniformIndicesArray, 0);
3217         _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
3218     }
3219     if (_uniformIndicesRemaining < _count) {
3220         _exception = 1;
3221         _exceptionType = "java/lang/IllegalArgumentException";
3222         _exceptionMessage = "not enough space in uniformIndices";
3223         goto exit;
3224     }
3225
3226     glGetUniformIndices(program, _count, _names, _indices);
3227
3228 exit:
3229     if (_uniformIndicesArray) {
3230         releasePointer(_env, _uniformIndicesArray, _indicesBase, JNI_TRUE);
3231     }
3232     for (_i = _count - 1; _i >= 0; _i--) {
3233         if (_names[_i]) {
3234             jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3235             if (_name) {
3236                 _env->ReleaseStringUTFChars(_name, _names[_i]);
3237             }
3238         }
3239     }
3240     free(_names);
3241     if (_exception) {
3242         jniThrowException(_env, _exceptionType, _exceptionMessage);
3243     }
3244 }
3245
3246 /* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3247 static void
3248 android_glGetActiveUniformsiv__II_3III_3II
3249   (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jintArray uniformIndices_ref, jint uniformIndicesOffset, jint pname, jintArray params_ref, jint paramsOffset) {
3250     jint _exception = 0;
3251     const char * _exceptionType = NULL;
3252     const char * _exceptionMessage = NULL;
3253     GLuint *uniformIndices_base = (GLuint *) 0;
3254     jint _uniformIndicesRemaining;
3255     GLuint *uniformIndices = (GLuint *) 0;
3256     GLint *params_base = (GLint *) 0;
3257     jint _paramsRemaining;
3258     GLint *params = (GLint *) 0;
3259
3260     if (!uniformIndices_ref) {
3261         _exception = 1;
3262         _exceptionType = "java/lang/IllegalArgumentException";
3263         _exceptionMessage = "uniformIndices == null";
3264         goto exit;
3265     }
3266     if (uniformIndicesOffset < 0) {
3267         _exception = 1;
3268         _exceptionType = "java/lang/IllegalArgumentException";
3269         _exceptionMessage = "uniformIndicesOffset < 0";
3270         goto exit;
3271     }
3272     _uniformIndicesRemaining = _env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset;
3273     uniformIndices_base = (GLuint *)
3274         _env->GetPrimitiveArrayCritical(uniformIndices_ref, (jboolean *)0);
3275     uniformIndices = uniformIndices_base + uniformIndicesOffset;
3276
3277     if (!params_ref) {
3278         _exception = 1;
3279         _exceptionType = "java/lang/IllegalArgumentException";
3280         _exceptionMessage = "params == null";
3281         goto exit;
3282     }
3283     if (paramsOffset < 0) {
3284         _exception = 1;
3285         _exceptionType = "java/lang/IllegalArgumentException";
3286         _exceptionMessage = "paramsOffset < 0";
3287         goto exit;
3288     }
3289     _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
3290     params_base = (GLint *)
3291         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3292     params = params_base + paramsOffset;
3293
3294     glGetActiveUniformsiv(
3295         (GLuint)program,
3296         (GLsizei)uniformCount,
3297         (GLuint *)uniformIndices,
3298         (GLenum)pname,
3299         (GLint *)params
3300     );
3301
3302 exit:
3303     if (params_base) {
3304         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3305             _exception ? JNI_ABORT: 0);
3306     }
3307     if (uniformIndices_base) {
3308         _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, uniformIndices_base,
3309             JNI_ABORT);
3310     }
3311     if (_exception) {
3312         jniThrowException(_env, _exceptionType, _exceptionMessage);
3313     }
3314 }
3315
3316 /* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3317 static void
3318 android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2
3319   (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jobject uniformIndices_buf, jint pname, jobject params_buf) {
3320     jarray _uniformIndicesArray = (jarray) 0;
3321     jint _uniformIndicesBufferOffset = (jint) 0;
3322     jarray _paramsArray = (jarray) 0;
3323     jint _paramsBufferOffset = (jint) 0;
3324     jint _uniformIndicesRemaining;
3325     GLuint *uniformIndices = (GLuint *) 0;
3326     jint _paramsRemaining;
3327     GLint *params = (GLint *) 0;
3328
3329     uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, &_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
3330     params = (GLint *)getPointer(_env, params_buf, &_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
3331     if (uniformIndices == NULL) {
3332         char * _uniformIndicesBase = (char *)_env->GetPrimitiveArrayCritical(_uniformIndicesArray, (jboolean *) 0);
3333         uniformIndices = (GLuint *) (_uniformIndicesBase + _uniformIndicesBufferOffset);
3334     }
3335     if (params == NULL) {
3336         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_paramsArray, (jboolean *) 0);
3337         params = (GLint *) (_paramsBase + _paramsBufferOffset);
3338     }
3339     glGetActiveUniformsiv(
3340         (GLuint)program,
3341         (GLsizei)uniformCount,
3342         (GLuint *)uniformIndices,
3343         (GLenum)pname,
3344         (GLint *)params
3345     );
3346     if (_paramsArray) {
3347         releasePointer(_env, _paramsArray, params, JNI_TRUE);
3348     }
3349     if (_uniformIndicesArray) {
3350         releasePointer(_env, _uniformIndicesArray, uniformIndices, JNI_FALSE);
3351     }
3352 }
3353
3354 /* GLuint glGetUniformBlockIndex ( GLuint program, const GLchar *uniformBlockName ) */
3355 static jint
3356 android_glGetUniformBlockIndex__ILjava_lang_String_2
3357   (JNIEnv *_env, jobject _this, jint program, jstring uniformBlockName) {
3358     jint _exception = 0;
3359     const char * _exceptionType = NULL;
3360     const char * _exceptionMessage = NULL;
3361     GLuint _returnValue = 0;
3362     const char* _nativeuniformBlockName = 0;
3363
3364     if (!uniformBlockName) {
3365         _exception = 1;
3366         _exceptionType = "java/lang/IllegalArgumentException";
3367         _exceptionMessage = "uniformBlockName == null";
3368         goto exit;
3369     }
3370     _nativeuniformBlockName = _env->GetStringUTFChars(uniformBlockName, 0);
3371
3372     _returnValue = glGetUniformBlockIndex(
3373         (GLuint)program,
3374         (GLchar *)_nativeuniformBlockName
3375     );
3376
3377 exit:
3378     if (_nativeuniformBlockName) {
3379         _env->ReleaseStringUTFChars(uniformBlockName, _nativeuniformBlockName);
3380     }
3381
3382     if (_exception) {
3383         jniThrowException(_env, _exceptionType, _exceptionMessage);
3384     }
3385     return (jint)_returnValue;
3386 }
3387
3388 /* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3389 static void
3390 android_glGetActiveUniformBlockiv__III_3II
3391   (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jintArray params_ref, jint offset) {
3392     jint _exception = 0;
3393     const char * _exceptionType = NULL;
3394     const char * _exceptionMessage = NULL;
3395     GLint *params_base = (GLint *) 0;
3396     jint _remaining;
3397     GLint *params = (GLint *) 0;
3398
3399     if (!params_ref) {
3400         _exception = 1;
3401         _exceptionType = "java/lang/IllegalArgumentException";
3402         _exceptionMessage = "params == null";
3403         goto exit;
3404     }
3405     if (offset < 0) {
3406         _exception = 1;
3407         _exceptionType = "java/lang/IllegalArgumentException";
3408         _exceptionMessage = "offset < 0";
3409         goto exit;
3410     }
3411     _remaining = _env->GetArrayLength(params_ref) - offset;
3412     params_base = (GLint *)
3413         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3414     params = params_base + offset;
3415
3416     glGetActiveUniformBlockiv(
3417         (GLuint)program,
3418         (GLuint)uniformBlockIndex,
3419         (GLenum)pname,
3420         (GLint *)params
3421     );
3422
3423 exit:
3424     if (params_base) {
3425         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3426             _exception ? JNI_ABORT: 0);
3427     }
3428     if (_exception) {
3429         jniThrowException(_env, _exceptionType, _exceptionMessage);
3430     }
3431 }
3432
3433 /* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3434 static void
3435 android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2
3436   (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jobject params_buf) {
3437     jarray _array = (jarray) 0;
3438     jint _bufferOffset = (jint) 0;
3439     jint _remaining;
3440     GLint *params = (GLint *) 0;
3441
3442     params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
3443     if (params == NULL) {
3444         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3445         params = (GLint *) (_paramsBase + _bufferOffset);
3446     }
3447     glGetActiveUniformBlockiv(
3448         (GLuint)program,
3449         (GLuint)uniformBlockIndex,
3450         (GLenum)pname,
3451         (GLint *)params
3452     );
3453     if (_array) {
3454         releasePointer(_env, _array, params, JNI_TRUE);
3455     }
3456 }
3457
3458 /* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3459 static void
3460 android_glGetActiveUniformBlockName_III_3II_3BI
3461     (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, jbyteArray name_ref, jint nameOffset) {
3462     jint _exception = 0;
3463     const char* _exceptionType;
3464     const char* _exceptionMessage;
3465     GLsizei* _length_base = (GLsizei*)0;
3466     jint _lengthRemaining;
3467     GLsizei* _length = (GLsizei*)0;
3468     GLchar* _name_base = (GLchar*)0;
3469     jint _nameRemaining;
3470     GLchar* _name = (GLchar*)0;
3471
3472     if (!length_ref) {
3473         _exception = 1;
3474         _exceptionType = "java/lang/IllegalArgumentException";
3475         _exceptionMessage = "length == null";
3476         goto exit;
3477     }
3478     if (lengthOffset < 0) {
3479         _exception = 1;
3480         _exceptionType = "java/lang/IllegalArgumentException";
3481         _exceptionMessage = "lengthOffset < 0";
3482         goto exit;
3483     }
3484     _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
3485     _length_base = (GLsizei*)_env->GetPrimitiveArrayCritical(
3486             length_ref, (jboolean*)0);
3487     _length = _length_base + lengthOffset;
3488
3489     if (!name_ref) {
3490         _exception = 1;
3491         _exceptionType = "java/lang/IllegalArgumentException";
3492         _exceptionMessage = "uniformBlockName == null";
3493         goto exit;
3494     }
3495     if (nameOffset < 0) {
3496         _exception = 1;
3497         _exceptionType = "java/lang/IllegalArgumentException";
3498         _exceptionMessage = "uniformBlockNameOffset < 0";
3499         goto exit;
3500     }
3501     _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
3502     _name_base = (GLchar*)_env->GetPrimitiveArrayCritical(
3503             name_ref, (jboolean*)0);
3504     _name = _name_base + nameOffset;
3505
3506     glGetActiveUniformBlockName(
3507         (GLuint)program,
3508         (GLuint)uniformBlockIndex,
3509         (GLsizei)bufSize,
3510         (GLsizei*)_length,
3511         (GLchar*)_name
3512     );
3513
3514 exit:
3515     if (_name_base) {
3516         _env->ReleasePrimitiveArrayCritical(name_ref, _name_base,
3517             _exception ? JNI_ABORT: 0);
3518     }
3519     if (_length_base) {
3520         _env->ReleasePrimitiveArrayCritical(length_ref, _length_base,
3521             _exception ? JNI_ABORT: 0);
3522     }
3523     if (_exception) {
3524         jniThrowException(_env, _exceptionType, _exceptionMessage);
3525     }
3526 }
3527
3528 /* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3529 static void
3530 android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2
3531     (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) {
3532     jint _exception = 0;
3533     const char* _exceptionType;
3534     const char* _exceptionMessage;
3535     jarray _lengthArray = (jarray)0;
3536     jint _lengthBufferOffset = (jint)0;
3537     GLsizei* _length = (GLsizei*)0;
3538     jint _lengthRemaining;
3539     jarray _nameArray = (jarray)0;
3540     jint _nameBufferOffset = (jint)0;
3541     GLchar* _name = (GLchar*)0;
3542     jint _nameRemaining;
3543
3544     _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
3545     if (_length == NULL) {
3546         GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0);
3547         _length = (GLsizei*)(_lengthBase + _lengthBufferOffset);
3548     }
3549
3550     _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset);
3551     if (_name == NULL) {
3552         GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0);
3553         _name = (GLchar*)(_nameBase + _nameBufferOffset);
3554     }
3555
3556     glGetActiveUniformBlockName(
3557         (GLuint)program,
3558         (GLuint)uniformBlockIndex,
3559         (GLsizei)_nameRemaining,
3560         _length, _name
3561     );
3562     if (_nameArray) {
3563         releasePointer(_env, _nameArray, _name, JNI_TRUE);
3564     }
3565     if (_lengthArray) {
3566         releasePointer(_env, _lengthArray, _length, JNI_TRUE);
3567     }
3568 }
3569
3570 /* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3571 static jstring
3572 android_glGetActiveUniformBlockName_II
3573     (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) {
3574     GLint len = 0;
3575     glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex,
3576             GL_UNIFORM_BLOCK_NAME_LENGTH, &len);
3577     GLchar* name = (GLchar*)malloc(len);
3578     glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex,
3579         len, NULL, name);
3580     jstring result = _env->NewStringUTF(name);
3581     free(name);
3582     return result;
3583 }
3584
3585 /* void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) */
3586 static void
3587 android_glUniformBlockBinding__III
3588   (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint uniformBlockBinding) {
3589     glUniformBlockBinding(
3590         (GLuint)program,
3591         (GLuint)uniformBlockIndex,
3592         (GLuint)uniformBlockBinding
3593     );
3594 }
3595
3596 /* void glDrawArraysInstanced ( GLenum mode, GLint first, GLsizei count, GLsizei instanceCount ) */
3597 static void
3598 android_glDrawArraysInstanced__IIII
3599   (JNIEnv *_env, jobject _this, jint mode, jint first, jint count, jint instanceCount) {
3600     glDrawArraysInstanced(
3601         (GLenum)mode,
3602         (GLint)first,
3603         (GLsizei)count,
3604         (GLsizei)instanceCount
3605     );
3606 }
3607
3608 /* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
3609 static void
3610 android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I
3611   (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint instanceCount) {
3612     jarray _array = (jarray) 0;
3613     jint _bufferOffset = (jint) 0;
3614     jint _remaining;
3615     GLvoid *indices = (GLvoid *) 0;
3616
3617     indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
3618     if (indices == NULL) {
3619         char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3620         indices = (GLvoid *) (_indicesBase + _bufferOffset);
3621     }
3622     glDrawElementsInstanced(
3623         (GLenum)mode,
3624         (GLsizei)count,
3625         (GLenum)type,
3626         (GLvoid *)indices,
3627         (GLsizei)instanceCount
3628     );
3629     if (_array) {
3630         releasePointer(_env, _array, indices, JNI_FALSE);
3631     }
3632 }
3633
3634 /* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
3635 static void
3636 android_glDrawElementsInstanced__IIIII
3637   (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint indicesOffset, jint instanceCount) {
3638     glDrawElementsInstanced(
3639         (GLenum)mode,
3640         (GLsizei)count,
3641         (GLenum)type,
3642         (GLvoid *)indicesOffset,
3643         (GLsizei)instanceCount
3644     );
3645 }
3646
3647 /* GLsync glFenceSync ( GLenum condition, GLbitfield flags ) */
3648 static jlong
3649 android_glFenceSync__II
3650   (JNIEnv *_env, jobject _this, jint condition, jint flags) {
3651     GLsync _returnValue;
3652     _returnValue = glFenceSync(
3653         (GLenum)condition,
3654         (GLbitfield)flags
3655     );
3656     return (jlong)_returnValue;
3657 }
3658
3659 /* GLboolean glIsSync ( GLsync sync ) */
3660 static jboolean
3661 android_glIsSync__J
3662   (JNIEnv *_env, jobject _this, jlong sync) {
3663     GLboolean _returnValue;
3664     _returnValue = glIsSync(
3665         (GLsync)sync
3666     );
3667     return (jboolean)_returnValue;
3668 }
3669
3670 /* void glDeleteSync ( GLsync sync ) */
3671 static void
3672 android_glDeleteSync__J
3673   (JNIEnv *_env, jobject _this, jlong sync) {
3674     glDeleteSync(
3675         (GLsync)sync
3676     );
3677 }
3678
3679 /* GLenum glClientWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
3680 static jint
3681 android_glClientWaitSync__JIJ
3682   (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
3683     GLenum _returnValue;
3684     _returnValue = glClientWaitSync(
3685         (GLsync)sync,
3686         (GLbitfield)flags,
3687         (GLuint64)timeout
3688     );
3689     return (jint)_returnValue;
3690 }
3691
3692 /* void glWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
3693 static void
3694 android_glWaitSync__JIJ
3695   (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
3696     glWaitSync(
3697         (GLsync)sync,
3698         (GLbitfield)flags,
3699         (GLuint64)timeout
3700     );
3701 }
3702
3703 /* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
3704 static void
3705 android_glGetInteger64v__I_3JI
3706   (JNIEnv *_env, jobject _this, jint pname, jlongArray params_ref, jint offset) {
3707     jint _exception = 0;
3708     const char * _exceptionType = NULL;
3709     const char * _exceptionMessage = NULL;
3710     GLint64 *params_base = (GLint64 *) 0;
3711     jint _remaining;
3712     GLint64 *params = (GLint64 *) 0;
3713
3714     if (!params_ref) {
3715         _exception = 1;
3716         _exceptionType = "java/lang/IllegalArgumentException";
3717         _exceptionMessage = "params == null";
3718         goto exit;
3719     }
3720     if (offset < 0) {
3721         _exception = 1;
3722         _exceptionType = "java/lang/IllegalArgumentException";
3723         _exceptionMessage = "offset < 0";
3724         goto exit;
3725     }
3726     _remaining = _env->GetArrayLength(params_ref) - offset;
3727     params_base = (GLint64 *)
3728         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3729     params = params_base + offset;
3730
3731     glGetInteger64v(
3732         (GLenum)pname,
3733         (GLint64 *)params
3734     );
3735
3736 exit:
3737     if (params_base) {
3738         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3739             _exception ? JNI_ABORT: 0);
3740     }
3741     if (_exception) {
3742         jniThrowException(_env, _exceptionType, _exceptionMessage);
3743     }
3744 }
3745
3746 /* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
3747 static void
3748 android_glGetInteger64v__ILjava_nio_LongBuffer_2
3749   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
3750     jarray _array = (jarray) 0;
3751     jint _bufferOffset = (jint) 0;
3752     jint _remaining;
3753     GLint64 *params = (GLint64 *) 0;
3754
3755     params = (GLint64 *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
3756     if (params == NULL) {
3757         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3758         params = (GLint64 *) (_paramsBase + _bufferOffset);
3759     }
3760     glGetInteger64v(
3761         (GLenum)pname,
3762         (GLint64 *)params
3763     );
3764     if (_array) {
3765         releasePointer(_env, _array, params, JNI_TRUE);
3766     }
3767 }
3768
3769 /* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
3770 static void
3771 android_glGetSynciv__JII_3II_3II
3772   (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray values_ref, jint valuesOffset) {
3773     jint _exception = 0;
3774     const char * _exceptionType = NULL;
3775     const char * _exceptionMessage = NULL;
3776     GLsizei *length_base = (GLsizei *) 0;
3777     jint _lengthRemaining;
3778     GLsizei *length = (GLsizei *) 0;
3779     GLint *values_base = (GLint *) 0;
3780     jint _valuesRemaining;
3781     GLint *values = (GLint *) 0;
3782
3783     if (!length_ref) {
3784         _exception = 1;
3785         _exceptionType = "java/lang/IllegalArgumentException";
3786         _exceptionMessage = "length == null";
3787         goto exit;
3788     }
3789     if (lengthOffset < 0) {
3790         _exception = 1;
3791         _exceptionType = "java/lang/IllegalArgumentException";
3792         _exceptionMessage = "lengthOffset < 0";
3793         goto exit;
3794     }
3795     _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
3796     length_base = (GLsizei *)
3797         _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
3798     length = length_base + lengthOffset;
3799
3800     if (!values_ref) {
3801         _exception = 1;
3802         _exceptionType = "java/lang/IllegalArgumentException";
3803         _exceptionMessage = "values == null";
3804         goto exit;
3805     }
3806     if (valuesOffset < 0) {
3807         _exception = 1;
3808         _exceptionType = "java/lang/IllegalArgumentException";
3809         _exceptionMessage = "valuesOffset < 0";
3810         goto exit;
3811     }
3812     _valuesRemaining = _env->GetArrayLength(values_ref) - valuesOffset;
3813     values_base = (GLint *)
3814         _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
3815     values = values_base + valuesOffset;
3816
3817     glGetSynciv(
3818         (GLsync)sync,
3819         (GLenum)pname,
3820         (GLsizei)bufSize,
3821         (GLsizei *)length,
3822         (GLint *)values
3823     );
3824
3825 exit:
3826     if (values_base) {
3827         _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
3828             _exception ? JNI_ABORT: 0);
3829     }
3830     if (length_base) {
3831         _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
3832             _exception ? JNI_ABORT: 0);
3833     }
3834     if (_exception) {
3835         jniThrowException(_env, _exceptionType, _exceptionMessage);
3836     }
3837 }
3838
3839 /* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
3840 static void
3841 android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
3842   (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jobject length_buf, jobject values_buf) {
3843     jarray _lengthArray = (jarray) 0;
3844     jint _lengthBufferOffset = (jint) 0;
3845     jarray _valuesArray = (jarray) 0;
3846     jint _valuesBufferOffset = (jint) 0;
3847     jint _lengthRemaining;
3848     GLsizei *length = (GLsizei *) 0;
3849     jint _valuesRemaining;
3850     GLint *values = (GLint *) 0;
3851
3852     length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
3853     values = (GLint *)getPointer(_env, values_buf, &_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
3854     if (length == NULL) {
3855         char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
3856         length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
3857     }
3858     if (values == NULL) {
3859         char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_valuesArray, (jboolean *) 0);
3860         values = (GLint *) (_valuesBase + _valuesBufferOffset);
3861     }
3862     glGetSynciv(
3863         (GLsync)sync,
3864         (GLenum)pname,
3865         (GLsizei)bufSize,
3866         (GLsizei *)length,
3867         (GLint *)values
3868     );
3869     if (_valuesArray) {
3870         releasePointer(_env, _valuesArray, values, JNI_TRUE);
3871     }
3872     if (_lengthArray) {
3873         releasePointer(_env, _lengthArray, length, JNI_TRUE);
3874     }
3875 }
3876
3877 /* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
3878 static void
3879 android_glGetInteger64i_v__II_3JI
3880   (JNIEnv *_env, jobject _this, jint target, jint index, jlongArray data_ref, jint offset) {
3881     jint _exception = 0;
3882     const char * _exceptionType = NULL;
3883     const char * _exceptionMessage = NULL;
3884     GLint64 *data_base = (GLint64 *) 0;
3885     jint _remaining;
3886     GLint64 *data = (GLint64 *) 0;
3887
3888     if (!data_ref) {
3889         _exception = 1;
3890         _exceptionType = "java/lang/IllegalArgumentException";
3891         _exceptionMessage = "data == null";
3892         goto exit;
3893     }
3894     if (offset < 0) {
3895         _exception = 1;
3896         _exceptionType = "java/lang/IllegalArgumentException";
3897         _exceptionMessage = "offset < 0";
3898         goto exit;
3899     }
3900     _remaining = _env->GetArrayLength(data_ref) - offset;
3901     data_base = (GLint64 *)
3902         _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
3903     data = data_base + offset;
3904
3905     glGetInteger64i_v(
3906         (GLenum)target,
3907         (GLuint)index,
3908         (GLint64 *)data
3909     );
3910
3911 exit:
3912     if (data_base) {
3913         _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
3914             _exception ? JNI_ABORT: 0);
3915     }
3916     if (_exception) {
3917         jniThrowException(_env, _exceptionType, _exceptionMessage);
3918     }
3919 }
3920
3921 /* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
3922 static void
3923 android_glGetInteger64i_v__IILjava_nio_LongBuffer_2
3924   (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
3925     jarray _array = (jarray) 0;
3926     jint _bufferOffset = (jint) 0;
3927     jint _remaining;
3928     GLint64 *data = (GLint64 *) 0;
3929
3930     data = (GLint64 *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
3931     if (data == NULL) {
3932         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3933         data = (GLint64 *) (_dataBase + _bufferOffset);
3934     }
3935     glGetInteger64i_v(
3936         (GLenum)target,
3937         (GLuint)index,
3938         (GLint64 *)data
3939     );
3940     if (_array) {
3941         releasePointer(_env, _array, data, JNI_TRUE);
3942     }
3943 }
3944
3945 /* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
3946 static void
3947 android_glGetBufferParameteri64v__II_3JI
3948   (JNIEnv *_env, jobject _this, jint target, jint pname, jlongArray params_ref, jint offset) {
3949     jint _exception = 0;
3950     const char * _exceptionType = NULL;
3951     const char * _exceptionMessage = NULL;
3952     GLint64 *params_base = (GLint64 *) 0;
3953     jint _remaining;
3954     GLint64 *params = (GLint64 *) 0;
3955
3956     if (!params_ref) {
3957         _exception = 1;
3958         _exceptionType = "java/lang/IllegalArgumentException";
3959         _exceptionMessage = "params == null";
3960         goto exit;
3961     }
3962     if (offset < 0) {
3963         _exception = 1;
3964         _exceptionType = "java/lang/IllegalArgumentException";
3965         _exceptionMessage = "offset < 0";
3966         goto exit;
3967     }
3968     _remaining = _env->GetArrayLength(params_ref) - offset;
3969     params_base = (GLint64 *)
3970         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3971     params = params_base + offset;
3972
3973     glGetBufferParameteri64v(
3974         (GLenum)target,
3975         (GLenum)pname,
3976         (GLint64 *)params
3977     );
3978
3979 exit:
3980     if (params_base) {
3981         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3982             _exception ? JNI_ABORT: 0);
3983     }
3984     if (_exception) {
3985         jniThrowException(_env, _exceptionType, _exceptionMessage);
3986     }
3987 }
3988
3989 /* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
3990 static void
3991 android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2
3992   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
3993     jarray _array = (jarray) 0;
3994     jint _bufferOffset = (jint) 0;
3995     jint _remaining;
3996     GLint64 *params = (GLint64 *) 0;
3997
3998     params = (GLint64 *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
3999     if (params == NULL) {
4000         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4001         params = (GLint64 *) (_paramsBase + _bufferOffset);
4002     }
4003     glGetBufferParameteri64v(
4004         (GLenum)target,
4005         (GLenum)pname,
4006         (GLint64 *)params
4007     );
4008     if (_array) {
4009         releasePointer(_env, _array, params, JNI_TRUE);
4010     }
4011 }
4012
4013 /* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4014 static void
4015 android_glGenSamplers__I_3II
4016   (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4017     jint _exception = 0;
4018     const char * _exceptionType = NULL;
4019     const char * _exceptionMessage = NULL;
4020     GLuint *samplers_base = (GLuint *) 0;
4021     jint _remaining;
4022     GLuint *samplers = (GLuint *) 0;
4023
4024     if (!samplers_ref) {
4025         _exception = 1;
4026         _exceptionType = "java/lang/IllegalArgumentException";
4027         _exceptionMessage = "samplers == null";
4028         goto exit;
4029     }
4030     if (offset < 0) {
4031         _exception = 1;
4032         _exceptionType = "java/lang/IllegalArgumentException";
4033         _exceptionMessage = "offset < 0";
4034         goto exit;
4035     }
4036     _remaining = _env->GetArrayLength(samplers_ref) - offset;
4037     samplers_base = (GLuint *)
4038         _env->GetPrimitiveArrayCritical(samplers_ref, (jboolean *)0);
4039     samplers = samplers_base + offset;
4040
4041     glGenSamplers(
4042         (GLsizei)count,
4043         (GLuint *)samplers
4044     );
4045
4046 exit:
4047     if (samplers_base) {
4048         _env->ReleasePrimitiveArrayCritical(samplers_ref, samplers_base,
4049             _exception ? JNI_ABORT: 0);
4050     }
4051     if (_exception) {
4052         jniThrowException(_env, _exceptionType, _exceptionMessage);
4053     }
4054 }
4055
4056 /* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4057 static void
4058 android_glGenSamplers__ILjava_nio_IntBuffer_2
4059   (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
4060     jarray _array = (jarray) 0;
4061     jint _bufferOffset = (jint) 0;
4062     jint _remaining;
4063     GLuint *samplers = (GLuint *) 0;
4064
4065     samplers = (GLuint *)getPointer(_env, samplers_buf, &_array, &_remaining, &_bufferOffset);
4066     if (samplers == NULL) {
4067         char * _samplersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4068         samplers = (GLuint *) (_samplersBase + _bufferOffset);
4069     }
4070     glGenSamplers(
4071         (GLsizei)count,
4072         (GLuint *)samplers
4073     );
4074     if (_array) {
4075         releasePointer(_env, _array, samplers, JNI_TRUE);
4076     }
4077 }
4078
4079 /* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4080 static void
4081 android_glDeleteSamplers__I_3II
4082   (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4083     jint _exception = 0;
4084     const char * _exceptionType = NULL;
4085     const char * _exceptionMessage = NULL;
4086     GLuint *samplers_base = (GLuint *) 0;
4087     jint _remaining;
4088     GLuint *samplers = (GLuint *) 0;
4089
4090     if (!samplers_ref) {
4091         _exception = 1;
4092         _exceptionType = "java/lang/IllegalArgumentException";
4093         _exceptionMessage = "samplers == null";
4094         goto exit;
4095     }
4096     if (offset < 0) {
4097         _exception = 1;
4098         _exceptionType = "java/lang/IllegalArgumentException";
4099         _exceptionMessage = "offset < 0";
4100         goto exit;
4101     }
4102     _remaining = _env->GetArrayLength(samplers_ref) - offset;
4103     samplers_base = (GLuint *)
4104         _env->GetPrimitiveArrayCritical(samplers_ref, (jboolean *)0);
4105     samplers = samplers_base + offset;
4106
4107     glDeleteSamplers(
4108         (GLsizei)count,
4109         (GLuint *)samplers
4110     );
4111
4112 exit:
4113     if (samplers_base) {
4114         _env->ReleasePrimitiveArrayCritical(samplers_ref, samplers_base,
4115             JNI_ABORT);
4116     }
4117     if (_exception) {
4118         jniThrowException(_env, _exceptionType, _exceptionMessage);
4119     }
4120 }
4121
4122 /* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4123 static void
4124 android_glDeleteSamplers__ILjava_nio_IntBuffer_2
4125   (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
4126     jarray _array = (jarray) 0;
4127     jint _bufferOffset = (jint) 0;
4128     jint _remaining;
4129     GLuint *samplers = (GLuint *) 0;
4130
4131     samplers = (GLuint *)getPointer(_env, samplers_buf, &_array, &_remaining, &_bufferOffset);
4132     if (samplers == NULL) {
4133         char * _samplersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4134         samplers = (GLuint *) (_samplersBase + _bufferOffset);
4135     }
4136     glDeleteSamplers(
4137         (GLsizei)count,
4138         (GLuint *)samplers
4139     );
4140     if (_array) {
4141         releasePointer(_env, _array, samplers, JNI_FALSE);
4142     }
4143 }
4144
4145 /* GLboolean glIsSampler ( GLuint sampler ) */
4146 static jboolean
4147 android_glIsSampler__I
4148   (JNIEnv *_env, jobject _this, jint sampler) {
4149     GLboolean _returnValue;
4150     _returnValue = glIsSampler(
4151         (GLuint)sampler
4152     );
4153     return (jboolean)_returnValue;
4154 }
4155
4156 /* void glBindSampler ( GLuint unit, GLuint sampler ) */
4157 static void
4158 android_glBindSampler__II
4159   (JNIEnv *_env, jobject _this, jint unit, jint sampler) {
4160     glBindSampler(
4161         (GLuint)unit,
4162         (GLuint)sampler
4163     );
4164 }
4165
4166 /* void glSamplerParameteri ( GLuint sampler, GLenum pname, GLint param ) */
4167 static void
4168 android_glSamplerParameteri__III
4169   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jint param) {
4170     glSamplerParameteri(
4171         (GLuint)sampler,
4172         (GLenum)pname,
4173         (GLint)param
4174     );
4175 }
4176
4177 /* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4178 static void
4179 android_glSamplerParameteriv__II_3II
4180   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
4181     jint _exception = 0;
4182     const char * _exceptionType = NULL;
4183     const char * _exceptionMessage = NULL;
4184     GLint *param_base = (GLint *) 0;
4185     jint _remaining;
4186     GLint *param = (GLint *) 0;
4187
4188     if (!param_ref) {
4189         _exception = 1;
4190         _exceptionType = "java/lang/IllegalArgumentException";
4191         _exceptionMessage = "param == null";
4192         goto exit;
4193     }
4194     if (offset < 0) {
4195         _exception = 1;
4196         _exceptionType = "java/lang/IllegalArgumentException";
4197         _exceptionMessage = "offset < 0";
4198         goto exit;
4199     }
4200     _remaining = _env->GetArrayLength(param_ref) - offset;
4201     param_base = (GLint *)
4202         _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
4203     param = param_base + offset;
4204
4205     glSamplerParameteriv(
4206         (GLuint)sampler,
4207         (GLenum)pname,
4208         (GLint *)param
4209     );
4210
4211 exit:
4212     if (param_base) {
4213         _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
4214             JNI_ABORT);
4215     }
4216     if (_exception) {
4217         jniThrowException(_env, _exceptionType, _exceptionMessage);
4218     }
4219 }
4220
4221 /* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4222 static void
4223 android_glSamplerParameteriv__IILjava_nio_IntBuffer_2
4224   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
4225     jarray _array = (jarray) 0;
4226     jint _bufferOffset = (jint) 0;
4227     jint _remaining;
4228     GLint *param = (GLint *) 0;
4229
4230     param = (GLint *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
4231     if (param == NULL) {
4232         char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4233         param = (GLint *) (_paramBase + _bufferOffset);
4234     }
4235     glSamplerParameteriv(
4236         (GLuint)sampler,
4237         (GLenum)pname,
4238         (GLint *)param
4239     );
4240     if (_array) {
4241         releasePointer(_env, _array, param, JNI_FALSE);
4242     }
4243 }
4244
4245 /* void glSamplerParameterf ( GLuint sampler, GLenum pname, GLfloat param ) */
4246 static void
4247 android_glSamplerParameterf__IIF
4248   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloat param) {
4249     glSamplerParameterf(
4250         (GLuint)sampler,
4251         (GLenum)pname,
4252         (GLfloat)param
4253     );
4254 }
4255
4256 /* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4257 static void
4258 android_glSamplerParameterfv__II_3FI
4259   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray param_ref, jint offset) {
4260     jint _exception = 0;
4261     const char * _exceptionType = NULL;
4262     const char * _exceptionMessage = NULL;
4263     GLfloat *param_base = (GLfloat *) 0;
4264     jint _remaining;
4265     GLfloat *param = (GLfloat *) 0;
4266
4267     if (!param_ref) {
4268         _exception = 1;
4269         _exceptionType = "java/lang/IllegalArgumentException";
4270         _exceptionMessage = "param == null";
4271         goto exit;
4272     }
4273     if (offset < 0) {
4274         _exception = 1;
4275         _exceptionType = "java/lang/IllegalArgumentException";
4276         _exceptionMessage = "offset < 0";
4277         goto exit;
4278     }
4279     _remaining = _env->GetArrayLength(param_ref) - offset;
4280     param_base = (GLfloat *)
4281         _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
4282     param = param_base + offset;
4283
4284     glSamplerParameterfv(
4285         (GLuint)sampler,
4286         (GLenum)pname,
4287         (GLfloat *)param
4288     );
4289
4290 exit:
4291     if (param_base) {
4292         _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
4293             JNI_ABORT);
4294     }
4295     if (_exception) {
4296         jniThrowException(_env, _exceptionType, _exceptionMessage);
4297     }
4298 }
4299
4300 /* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4301 static void
4302 android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2
4303   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
4304     jarray _array = (jarray) 0;
4305     jint _bufferOffset = (jint) 0;
4306     jint _remaining;
4307     GLfloat *param = (GLfloat *) 0;
4308
4309     param = (GLfloat *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
4310     if (param == NULL) {
4311         char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4312         param = (GLfloat *) (_paramBase + _bufferOffset);
4313     }
4314     glSamplerParameterfv(
4315         (GLuint)sampler,
4316         (GLenum)pname,
4317         (GLfloat *)param
4318     );
4319     if (_array) {
4320         releasePointer(_env, _array, param, JNI_FALSE);
4321     }
4322 }
4323
4324 /* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
4325 static void
4326 android_glGetSamplerParameteriv__II_3II
4327   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
4328     jint _exception = 0;
4329     const char * _exceptionType = NULL;
4330     const char * _exceptionMessage = NULL;
4331     GLint *params_base = (GLint *) 0;
4332     jint _remaining;
4333     GLint *params = (GLint *) 0;
4334
4335     if (!params_ref) {
4336         _exception = 1;
4337         _exceptionType = "java/lang/IllegalArgumentException";
4338         _exceptionMessage = "params == null";
4339         goto exit;
4340     }
4341     if (offset < 0) {
4342         _exception = 1;
4343         _exceptionType = "java/lang/IllegalArgumentException";
4344         _exceptionMessage = "offset < 0";
4345         goto exit;
4346     }
4347     _remaining = _env->GetArrayLength(params_ref) - offset;
4348     params_base = (GLint *)
4349         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
4350     params = params_base + offset;
4351
4352     glGetSamplerParameteriv(
4353         (GLuint)sampler,
4354         (GLenum)pname,
4355         (GLint *)params
4356     );
4357
4358 exit:
4359     if (params_base) {
4360         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
4361             _exception ? JNI_ABORT: 0);
4362     }
4363     if (_exception) {
4364         jniThrowException(_env, _exceptionType, _exceptionMessage);
4365     }
4366 }
4367
4368 /* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
4369 static void
4370 android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2
4371   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
4372     jarray _array = (jarray) 0;
4373     jint _bufferOffset = (jint) 0;
4374     jint _remaining;
4375     GLint *params = (GLint *) 0;
4376
4377     params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
4378     if (params == NULL) {
4379         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4380         params = (GLint *) (_paramsBase + _bufferOffset);
4381     }
4382     glGetSamplerParameteriv(
4383         (GLuint)sampler,
4384         (GLenum)pname,
4385         (GLint *)params
4386     );
4387     if (_array) {
4388         releasePointer(_env, _array, params, JNI_TRUE);
4389     }
4390 }
4391
4392 /* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
4393 static void
4394 android_glGetSamplerParameterfv__II_3FI
4395   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray params_ref, jint offset) {
4396     jint _exception = 0;
4397     const char * _exceptionType = NULL;
4398     const char * _exceptionMessage = NULL;
4399     GLfloat *params_base = (GLfloat *) 0;
4400     jint _remaining;
4401     GLfloat *params = (GLfloat *) 0;
4402
4403     if (!params_ref) {
4404         _exception = 1;
4405         _exceptionType = "java/lang/IllegalArgumentException";
4406         _exceptionMessage = "params == null";
4407         goto exit;
4408     }
4409     if (offset < 0) {
4410         _exception = 1;
4411         _exceptionType = "java/lang/IllegalArgumentException";
4412         _exceptionMessage = "offset < 0";
4413         goto exit;
4414     }
4415     _remaining = _env->GetArrayLength(params_ref) - offset;
4416     params_base = (GLfloat *)
4417         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
4418     params = params_base + offset;
4419
4420     glGetSamplerParameterfv(
4421         (GLuint)sampler,
4422         (GLenum)pname,
4423         (GLfloat *)params
4424     );
4425
4426 exit:
4427     if (params_base) {
4428         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
4429             _exception ? JNI_ABORT: 0);
4430     }
4431     if (_exception) {
4432         jniThrowException(_env, _exceptionType, _exceptionMessage);
4433     }
4434 }
4435
4436 /* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
4437 static void
4438 android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2
4439   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
4440     jarray _array = (jarray) 0;
4441     jint _bufferOffset = (jint) 0;
4442     jint _remaining;
4443     GLfloat *params = (GLfloat *) 0;
4444
4445     params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
4446     if (params == NULL) {
4447         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4448         params = (GLfloat *) (_paramsBase + _bufferOffset);
4449     }
4450     glGetSamplerParameterfv(
4451         (GLuint)sampler,
4452         (GLenum)pname,
4453         (GLfloat *)params
4454     );
4455     if (_array) {
4456         releasePointer(_env, _array, params, JNI_TRUE);
4457     }
4458 }
4459
4460 /* void glVertexAttribDivisor ( GLuint index, GLuint divisor ) */
4461 static void
4462 android_glVertexAttribDivisor__II
4463   (JNIEnv *_env, jobject _this, jint index, jint divisor) {
4464     glVertexAttribDivisor(
4465         (GLuint)index,
4466         (GLuint)divisor
4467     );
4468 }
4469
4470 /* void glBindTransformFeedback ( GLenum target, GLuint id ) */
4471 static void
4472 android_glBindTransformFeedback__II
4473   (JNIEnv *_env, jobject _this, jint target, jint id) {
4474     glBindTransformFeedback(
4475         (GLenum)target,
4476         (GLuint)id
4477     );
4478 }
4479
4480 /* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
4481 static void
4482 android_glDeleteTransformFeedbacks__I_3II
4483   (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
4484     jint _exception = 0;
4485     const char * _exceptionType = NULL;
4486     const char * _exceptionMessage = NULL;
4487     GLuint *ids_base = (GLuint *) 0;
4488     jint _remaining;
4489     GLuint *ids = (GLuint *) 0;
4490
4491     if (!ids_ref) {
4492         _exception = 1;
4493         _exceptionType = "java/lang/IllegalArgumentException";
4494         _exceptionMessage = "ids == null";
4495         goto exit;
4496     }
4497     if (offset < 0) {
4498         _exception = 1;
4499         _exceptionType = "java/lang/IllegalArgumentException";
4500         _exceptionMessage = "offset < 0";
4501         goto exit;
4502     }
4503     _remaining = _env->GetArrayLength(ids_ref) - offset;
4504     ids_base = (GLuint *)
4505         _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
4506     ids = ids_base + offset;
4507
4508     glDeleteTransformFeedbacks(
4509         (GLsizei)n,
4510         (GLuint *)ids
4511     );
4512
4513 exit:
4514     if (ids_base) {
4515         _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
4516             JNI_ABORT);
4517     }
4518     if (_exception) {
4519         jniThrowException(_env, _exceptionType, _exceptionMessage);
4520     }
4521 }
4522
4523 /* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
4524 static void
4525 android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2
4526   (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
4527     jarray _array = (jarray) 0;
4528     jint _bufferOffset = (jint) 0;
4529     jint _remaining;
4530     GLuint *ids = (GLuint *) 0;
4531
4532     ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
4533     if (ids == NULL) {
4534         char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4535         ids = (GLuint *) (_idsBase + _bufferOffset);
4536     }
4537     glDeleteTransformFeedbacks(
4538         (GLsizei)n,
4539         (GLuint *)ids
4540     );
4541     if (_array) {
4542         releasePointer(_env, _array, ids, JNI_FALSE);
4543     }
4544 }
4545
4546 /* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
4547 static void
4548 android_glGenTransformFeedbacks__I_3II
4549   (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
4550     jint _exception = 0;
4551     const char * _exceptionType = NULL;
4552     const char * _exceptionMessage = NULL;
4553     GLuint *ids_base = (GLuint *) 0;
4554     jint _remaining;
4555     GLuint *ids = (GLuint *) 0;
4556
4557     if (!ids_ref) {
4558         _exception = 1;
4559         _exceptionType = "java/lang/IllegalArgumentException";
4560         _exceptionMessage = "ids == null";
4561         goto exit;
4562     }
4563     if (offset < 0) {
4564         _exception = 1;
4565         _exceptionType = "java/lang/IllegalArgumentException";
4566         _exceptionMessage = "offset < 0";
4567         goto exit;
4568     }
4569     _remaining = _env->GetArrayLength(ids_ref) - offset;
4570     ids_base = (GLuint *)
4571         _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
4572     ids = ids_base + offset;
4573
4574     glGenTransformFeedbacks(
4575         (GLsizei)n,
4576         (GLuint *)ids
4577     );
4578
4579 exit:
4580     if (ids_base) {
4581         _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
4582             _exception ? JNI_ABORT: 0);
4583     }
4584     if (_exception) {
4585         jniThrowException(_env, _exceptionType, _exceptionMessage);
4586     }
4587 }
4588
4589 /* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
4590 static void
4591 android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2
4592   (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
4593     jarray _array = (jarray) 0;
4594     jint _bufferOffset = (jint) 0;
4595     jint _remaining;
4596     GLuint *ids = (GLuint *) 0;
4597
4598     ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
4599     if (ids == NULL) {
4600         char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4601         ids = (GLuint *) (_idsBase + _bufferOffset);
4602     }
4603     glGenTransformFeedbacks(
4604         (GLsizei)n,
4605         (GLuint *)ids
4606     );
4607     if (_array) {
4608         releasePointer(_env, _array, ids, JNI_TRUE);
4609     }
4610 }
4611
4612 /* GLboolean glIsTransformFeedback ( GLuint id ) */
4613 static jboolean
4614 android_glIsTransformFeedback__I
4615   (JNIEnv *_env, jobject _this, jint id) {
4616     GLboolean _returnValue;
4617     _returnValue = glIsTransformFeedback(
4618         (GLuint)id
4619     );
4620     return (jboolean)_returnValue;
4621 }
4622
4623 /* void glPauseTransformFeedback ( void ) */
4624 static void
4625 android_glPauseTransformFeedback__
4626   (JNIEnv *_env, jobject _this) {
4627     glPauseTransformFeedback();
4628 }
4629
4630 /* void glResumeTransformFeedback ( void ) */
4631 static void
4632 android_glResumeTransformFeedback__
4633   (JNIEnv *_env, jobject _this) {
4634     glResumeTransformFeedback();
4635 }
4636
4637 /* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
4638 static void
4639 android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2
4640   (JNIEnv *_env, jobject _this, jint program, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray binaryFormat_ref, jint binaryFormatOffset, jobject binary_buf) {
4641     jint _exception = 0;
4642     const char * _exceptionType = NULL;
4643     const char * _exceptionMessage = NULL;
4644     jarray _array = (jarray) 0;
4645     jint _bufferOffset = (jint) 0;
4646     GLsizei *length_base = (GLsizei *) 0;
4647     jint _lengthRemaining;
4648     GLsizei *length = (GLsizei *) 0;
4649     GLenum *binaryFormat_base = (GLenum *) 0;
4650     jint _binaryFormatRemaining;
4651     GLenum *binaryFormat = (GLenum *) 0;
4652     jint _binaryRemaining;
4653     GLvoid *binary = (GLvoid *) 0;
4654
4655     if (!length_ref) {
4656         _exception = 1;
4657         _exceptionType = "java/lang/IllegalArgumentException";
4658         _exceptionMessage = "length == null";
4659         goto exit;
4660     }
4661     if (lengthOffset < 0) {
4662         _exception = 1;
4663         _exceptionType = "java/lang/IllegalArgumentException";
4664         _exceptionMessage = "lengthOffset < 0";
4665         goto exit;
4666     }
4667     _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
4668     length_base = (GLsizei *)
4669         _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
4670     length = length_base + lengthOffset;
4671
4672     if (!binaryFormat_ref) {
4673         _exception = 1;
4674         _exceptionType = "java/lang/IllegalArgumentException";
4675         _exceptionMessage = "binaryFormat == null";
4676         goto exit;
4677     }
4678     if (binaryFormatOffset < 0) {
4679         _exception = 1;
4680         _exceptionType = "java/lang/IllegalArgumentException";
4681         _exceptionMessage = "binaryFormatOffset < 0";
4682         goto exit;
4683     }
4684     _binaryFormatRemaining = _env->GetArrayLength(binaryFormat_ref) - binaryFormatOffset;
4685     binaryFormat_base = (GLenum *)
4686         _env->GetPrimitiveArrayCritical(binaryFormat_ref, (jboolean *)0);
4687     binaryFormat = binaryFormat_base + binaryFormatOffset;
4688
4689     binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_binaryRemaining, &_bufferOffset);
4690     if (binary == NULL) {
4691         char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4692         binary = (GLvoid *) (_binaryBase + _bufferOffset);
4693     }
4694     glGetProgramBinary(
4695         (GLuint)program,
4696         (GLsizei)bufSize,
4697         (GLsizei *)length,
4698         (GLenum *)binaryFormat,
4699         (GLvoid *)binary
4700     );
4701
4702 exit:
4703     if (_array) {
4704         releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
4705     }
4706     if (binaryFormat_base) {
4707         _env->ReleasePrimitiveArrayCritical(binaryFormat_ref, binaryFormat_base,
4708             _exception ? JNI_ABORT: 0);
4709     }
4710     if (length_base) {
4711         _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
4712             _exception ? JNI_ABORT: 0);
4713     }
4714     if (_exception) {
4715         jniThrowException(_env, _exceptionType, _exceptionMessage);
4716     }
4717 }
4718
4719 /* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
4720 static void
4721 android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2
4722   (JNIEnv *_env, jobject _this, jint program, jint bufSize, jobject length_buf, jobject binaryFormat_buf, jobject binary_buf) {
4723     jarray _lengthArray = (jarray) 0;
4724     jint _lengthBufferOffset = (jint) 0;
4725     jarray _binaryFormatArray = (jarray) 0;
4726     jint _binaryFormatBufferOffset = (jint) 0;
4727     jarray _binaryArray = (jarray) 0;
4728     jint _binaryBufferOffset = (jint) 0;
4729     jint _lengthRemaining;
4730     GLsizei *length = (GLsizei *) 0;
4731     jint _binaryFormatRemaining;
4732     GLenum *binaryFormat = (GLenum *) 0;
4733     jint _binaryRemaining;
4734     GLvoid *binary = (GLvoid *) 0;
4735
4736     length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
4737     binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, &_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
4738     binary = (GLvoid *)getPointer(_env, binary_buf, &_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
4739     if (length == NULL) {
4740         char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
4741         length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
4742     }
4743     if (binaryFormat == NULL) {
4744         char * _binaryFormatBase = (char *)_env->GetPrimitiveArrayCritical(_binaryFormatArray, (jboolean *) 0);
4745         binaryFormat = (GLenum *) (_binaryFormatBase + _binaryFormatBufferOffset);
4746     }
4747     if (binary == NULL) {
4748         char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_binaryArray, (jboolean *) 0);
4749         binary = (GLvoid *) (_binaryBase + _binaryBufferOffset);
4750     }
4751     glGetProgramBinary(
4752         (GLuint)program,
4753         (GLsizei)bufSize,
4754         (GLsizei *)length,
4755         (GLenum *)binaryFormat,
4756         (GLvoid *)binary
4757     );
4758     if (_binaryArray) {
4759         releasePointer(_env, _binaryArray, binary, JNI_TRUE);
4760     }
4761     if (_binaryFormatArray) {
4762         releasePointer(_env, _binaryFormatArray, binaryFormat, JNI_TRUE);
4763     }
4764     if (_lengthArray) {
4765         releasePointer(_env, _lengthArray, length, JNI_TRUE);
4766     }
4767 }
4768
4769 /* void glProgramBinary ( GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length ) */
4770 static void
4771 android_glProgramBinary__IILjava_nio_Buffer_2I
4772   (JNIEnv *_env, jobject _this, jint program, jint binaryFormat, jobject binary_buf, jint length) {
4773     jarray _array = (jarray) 0;
4774     jint _bufferOffset = (jint) 0;
4775     jint _remaining;
4776     GLvoid *binary = (GLvoid *) 0;
4777
4778     binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_remaining, &_bufferOffset);
4779     if (binary == NULL) {
4780         char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4781         binary = (GLvoid *) (_binaryBase + _bufferOffset);
4782     }
4783     glProgramBinary(
4784         (GLuint)program,
4785         (GLenum)binaryFormat,
4786         (GLvoid *)binary,
4787         (GLsizei)length
4788     );
4789     if (_array) {
4790         releasePointer(_env, _array, binary, JNI_FALSE);
4791     }
4792 }
4793
4794 /* void glProgramParameteri ( GLuint program, GLenum pname, GLint value ) */
4795 static void
4796 android_glProgramParameteri__III
4797   (JNIEnv *_env, jobject _this, jint program, jint pname, jint value) {
4798     glProgramParameteri(
4799         (GLuint)program,
4800         (GLenum)pname,
4801         (GLint)value
4802     );
4803 }
4804
4805 /* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
4806 static void
4807 android_glInvalidateFramebuffer__II_3II
4808   (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset) {
4809     jint _exception = 0;
4810     const char * _exceptionType = NULL;
4811     const char * _exceptionMessage = NULL;
4812     GLenum *attachments_base = (GLenum *) 0;
4813     jint _remaining;
4814     GLenum *attachments = (GLenum *) 0;
4815
4816     if (!attachments_ref) {
4817         _exception = 1;
4818         _exceptionType = "java/lang/IllegalArgumentException";
4819         _exceptionMessage = "attachments == null";
4820         goto exit;
4821     }
4822     if (offset < 0) {
4823         _exception = 1;
4824         _exceptionType = "java/lang/IllegalArgumentException";
4825         _exceptionMessage = "offset < 0";
4826         goto exit;
4827     }
4828     _remaining = _env->GetArrayLength(attachments_ref) - offset;
4829     attachments_base = (GLenum *)
4830         _env->GetPrimitiveArrayCritical(attachments_ref, (jboolean *)0);
4831     attachments = attachments_base + offset;
4832
4833     glInvalidateFramebuffer(
4834         (GLenum)target,
4835         (GLsizei)numAttachments,
4836         (GLenum *)attachments
4837     );
4838
4839 exit:
4840     if (attachments_base) {
4841         _env->ReleasePrimitiveArrayCritical(attachments_ref, attachments_base,
4842             JNI_ABORT);
4843     }
4844     if (_exception) {
4845         jniThrowException(_env, _exceptionType, _exceptionMessage);
4846     }
4847 }
4848
4849 /* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
4850 static void
4851 android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2
4852   (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf) {
4853     jarray _array = (jarray) 0;
4854     jint _bufferOffset = (jint) 0;
4855     jint _remaining;
4856     GLenum *attachments = (GLenum *) 0;
4857
4858     attachments = (GLenum *)getPointer(_env, attachments_buf, &_array, &_remaining, &_bufferOffset);
4859     if (attachments == NULL) {
4860         char * _attachmentsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4861         attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
4862     }
4863     glInvalidateFramebuffer(
4864         (GLenum)target,
4865         (GLsizei)numAttachments,
4866         (GLenum *)attachments
4867     );
4868     if (_array) {
4869         releasePointer(_env, _array, attachments, JNI_FALSE);
4870     }
4871 }
4872
4873 /* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
4874 static void
4875 android_glInvalidateSubFramebuffer__II_3IIIIII
4876   (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset, jint x, jint y, jint width, jint height) {
4877     jint _exception = 0;
4878     const char * _exceptionType = NULL;
4879     const char * _exceptionMessage = NULL;
4880     GLenum *attachments_base = (GLenum *) 0;
4881     jint _remaining;
4882     GLenum *attachments = (GLenum *) 0;
4883
4884     if (!attachments_ref) {
4885         _exception = 1;
4886         _exceptionType = "java/lang/IllegalArgumentException";
4887         _exceptionMessage = "attachments == null";
4888         goto exit;
4889     }
4890     if (offset < 0) {
4891         _exception = 1;
4892         _exceptionType = "java/lang/IllegalArgumentException";
4893         _exceptionMessage = "offset < 0";
4894         goto exit;
4895     }
4896     _remaining = _env->GetArrayLength(attachments_ref) - offset;
4897     attachments_base = (GLenum *)
4898         _env->GetPrimitiveArrayCritical(attachments_ref, (jboolean *)0);
4899     attachments = attachments_base + offset;
4900
4901     glInvalidateSubFramebuffer(
4902         (GLenum)target,
4903         (GLsizei)numAttachments,
4904         (GLenum *)attachments,
4905         (GLint)x,
4906         (GLint)y,
4907         (GLsizei)width,
4908         (GLsizei)height
4909     );
4910
4911 exit:
4912     if (attachments_base) {
4913         _env->ReleasePrimitiveArrayCritical(attachments_ref, attachments_base,
4914             JNI_ABORT);
4915     }
4916     if (_exception) {
4917         jniThrowException(_env, _exceptionType, _exceptionMessage);
4918     }
4919 }
4920
4921 /* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
4922 static void
4923 android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII
4924   (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf, jint x, jint y, jint width, jint height) {
4925     jarray _array = (jarray) 0;
4926     jint _bufferOffset = (jint) 0;
4927     jint _remaining;
4928     GLenum *attachments = (GLenum *) 0;
4929
4930     attachments = (GLenum *)getPointer(_env, attachments_buf, &_array, &_remaining, &_bufferOffset);
4931     if (attachments == NULL) {
4932         char * _attachmentsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4933         attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
4934     }
4935     glInvalidateSubFramebuffer(
4936         (GLenum)target,
4937         (GLsizei)numAttachments,
4938         (GLenum *)attachments,
4939         (GLint)x,
4940         (GLint)y,
4941         (GLsizei)width,
4942         (GLsizei)height
4943     );
4944     if (_array) {
4945         releasePointer(_env, _array, attachments, JNI_FALSE);
4946     }
4947 }
4948
4949 /* void glTexStorage2D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height ) */
4950 static void
4951 android_glTexStorage2D__IIIII
4952   (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height) {
4953     glTexStorage2D(
4954         (GLenum)target,
4955         (GLsizei)levels,
4956         (GLenum)internalformat,
4957         (GLsizei)width,
4958         (GLsizei)height
4959     );
4960 }
4961
4962 /* void glTexStorage3D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth ) */
4963 static void
4964 android_glTexStorage3D__IIIIII
4965   (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height, jint depth) {
4966     glTexStorage3D(
4967         (GLenum)target,
4968         (GLsizei)levels,
4969         (GLenum)internalformat,
4970         (GLsizei)width,
4971         (GLsizei)height,
4972         (GLsizei)depth
4973     );
4974 }
4975
4976 /* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
4977 static void
4978 android_glGetInternalformativ__IIII_3II
4979   (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jintArray params_ref, jint offset) {
4980     jint _exception = 0;
4981     const char * _exceptionType = NULL;
4982     const char * _exceptionMessage = NULL;
4983     GLint *params_base = (GLint *) 0;
4984     jint _remaining;
4985     GLint *params = (GLint *) 0;
4986
4987     if (!params_ref) {
4988         _exception = 1;
4989         _exceptionType = "java/lang/IllegalArgumentException";
4990         _exceptionMessage = "params == null";
4991         goto exit;
4992     }
4993     if (offset < 0) {
4994         _exception = 1;
4995         _exceptionType = "java/lang/IllegalArgumentException";
4996         _exceptionMessage = "offset < 0";
4997         goto exit;
4998     }
4999     _remaining = _env->GetArrayLength(params_ref) - offset;
5000     params_base = (GLint *)
5001         _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
5002     params = params_base + offset;
5003
5004     glGetInternalformativ(
5005         (GLenum)target,
5006         (GLenum)internalformat,
5007         (GLenum)pname,
5008         (GLsizei)bufSize,
5009         (GLint *)params
5010     );
5011
5012 exit:
5013     if (params_base) {
5014         _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
5015             _exception ? JNI_ABORT: 0);
5016     }
5017     if (_exception) {
5018         jniThrowException(_env, _exceptionType, _exceptionMessage);
5019     }
5020 }
5021
5022 /* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5023 static void
5024 android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2
5025   (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jobject params_buf) {
5026     jarray _array = (jarray) 0;
5027     jint _bufferOffset = (jint) 0;
5028     jint _remaining;
5029     GLint *params = (GLint *) 0;
5030
5031     params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
5032     if (params == NULL) {
5033         char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
5034         params = (GLint *) (_paramsBase + _bufferOffset);
5035     }
5036     glGetInternalformativ(
5037         (GLenum)target,
5038         (GLenum)internalformat,
5039         (GLenum)pname,
5040         (GLsizei)bufSize,
5041         (GLint *)params
5042     );
5043     if (_array) {
5044         releasePointer(_env, _array, params, JNI_TRUE);
5045     }
5046 }
5047
5048 static const char *classPathName = "android/opengl/GLES30";
5049
5050 static JNINativeMethod methods[] = {
5051 {"_nativeClassInit", "()V", (void*)nativeClassInit },
5052 {"glReadBuffer", "(I)V", (void *) android_glReadBuffer__I },
5053 {"glDrawRangeElements", "(IIIIILjava/nio/Buffer;)V", (void *) android_glDrawRangeElements__IIIIILjava_nio_Buffer_2 },
5054 {"glDrawRangeElements", "(IIIIII)V", (void *) android_glDrawRangeElements__IIIIII },
5055 {"glTexImage3D", "(IIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2 },
5056 {"glTexImage3D", "(IIIIIIIIII)V", (void *) android_glTexImage3D__IIIIIIIIII },
5057 {"glTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5058 {"glTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glTexSubImage3D__IIIIIIIIIII },
5059 {"glCopyTexSubImage3D", "(IIIIIIIII)V", (void *) android_glCopyTexSubImage3D__IIIIIIIII },
5060 {"glCompressedTexImage3D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2 },
5061 {"glCompressedTexImage3D", "(IIIIIIIII)V", (void *) android_glCompressedTexImage3D__IIIIIIIII },
5062 {"glCompressedTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5063 {"glCompressedTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIII },
5064 {"glGenQueries", "(I[II)V", (void *) android_glGenQueries__I_3II },
5065 {"glGenQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenQueries__ILjava_nio_IntBuffer_2 },
5066 {"glDeleteQueries", "(I[II)V", (void *) android_glDeleteQueries__I_3II },
5067 {"glDeleteQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteQueries__ILjava_nio_IntBuffer_2 },
5068 {"glIsQuery", "(I)Z", (void *) android_glIsQuery__I },
5069 {"glBeginQuery", "(II)V", (void *) android_glBeginQuery__II },
5070 {"glEndQuery", "(I)V", (void *) android_glEndQuery__I },
5071 {"glGetQueryiv", "(II[II)V", (void *) android_glGetQueryiv__II_3II },
5072 {"glGetQueryiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryiv__IILjava_nio_IntBuffer_2 },
5073 {"glGetQueryObjectuiv", "(II[II)V", (void *) android_glGetQueryObjectuiv__II_3II },
5074 {"glGetQueryObjectuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2 },
5075 {"glUnmapBuffer", "(I)Z", (void *) android_glUnmapBuffer__I },
5076 {"glGetBufferPointerv", "(II)Ljava/nio/Buffer;", (void *) android_glGetBufferPointerv__II },
5077 {"glDrawBuffers", "(I[II)V", (void *) android_glDrawBuffers__I_3II },
5078 {"glDrawBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDrawBuffers__ILjava_nio_IntBuffer_2 },
5079 {"glUniformMatrix2x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x3fv__IIZ_3FI },
5080 {"glUniformMatrix2x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2 },
5081 {"glUniformMatrix3x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x2fv__IIZ_3FI },
5082 {"glUniformMatrix3x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2 },
5083 {"glUniformMatrix2x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x4fv__IIZ_3FI },
5084 {"glUniformMatrix2x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2 },
5085 {"glUniformMatrix4x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x2fv__IIZ_3FI },
5086 {"glUniformMatrix4x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2 },
5087 {"glUniformMatrix3x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x4fv__IIZ_3FI },
5088 {"glUniformMatrix3x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2 },
5089 {"glUniformMatrix4x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x3fv__IIZ_3FI },
5090 {"glUniformMatrix4x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2 },
5091 {"glBlitFramebuffer", "(IIIIIIIIII)V", (void *) android_glBlitFramebuffer__IIIIIIIIII },
5092 {"glRenderbufferStorageMultisample", "(IIIII)V", (void *) android_glRenderbufferStorageMultisample__IIIII },
5093 {"glFramebufferTextureLayer", "(IIIII)V", (void *) android_glFramebufferTextureLayer__IIIII },
5094 {"glMapBufferRange", "(IIII)Ljava/nio/Buffer;", (void *) android_glMapBufferRange__IIII },
5095 {"glFlushMappedBufferRange", "(III)V", (void *) android_glFlushMappedBufferRange__III },
5096 {"glBindVertexArray", "(I)V", (void *) android_glBindVertexArray__I },
5097 {"glDeleteVertexArrays", "(I[II)V", (void *) android_glDeleteVertexArrays__I_3II },
5098 {"glDeleteVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2 },
5099 {"glGenVertexArrays", "(I[II)V", (void *) android_glGenVertexArrays__I_3II },
5100 {"glGenVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenVertexArrays__ILjava_nio_IntBuffer_2 },
5101 {"glIsVertexArray", "(I)Z", (void *) android_glIsVertexArray__I },
5102 {"glGetIntegeri_v", "(II[II)V", (void *) android_glGetIntegeri_v__II_3II },
5103 {"glGetIntegeri_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetIntegeri_v__IILjava_nio_IntBuffer_2 },
5104 {"glBeginTransformFeedback", "(I)V", (void *) android_glBeginTransformFeedback__I },
5105 {"glEndTransformFeedback", "()V", (void *) android_glEndTransformFeedback__ },
5106 {"glBindBufferRange", "(IIIII)V", (void *) android_glBindBufferRange__IIIII },
5107 {"glBindBufferBase", "(III)V", (void *) android_glBindBufferBase__III },
5108 {"glTransformFeedbackVaryings", "(I[Ljava/lang/String;I)V", (void *) android_glTransformFeedbackVaryings },
5109 {"glGetTransformFeedbackVarying", "(III[II[II[II[BI)V", (void *) android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI },
5110 {"glGetTransformFeedbackVarying", "(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V", (void *) android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B },
5111 {"glGetTransformFeedbackVarying", "(II[II[II)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying1 },
5112 {"glGetTransformFeedbackVarying", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying2 },
5113 {"glVertexAttribIPointerBounds", "(IIIILjava/nio/Buffer;I)V", (void *) android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I },
5114 {"glVertexAttribIPointer", "(IIIII)V", (void *) android_glVertexAttribIPointer__IIIII },
5115 {"glGetVertexAttribIiv", "(II[II)V", (void *) android_glGetVertexAttribIiv__II_3II },
5116 {"glGetVertexAttribIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2 },
5117 {"glGetVertexAttribIuiv", "(II[II)V", (void *) android_glGetVertexAttribIuiv__II_3II },
5118 {"glGetVertexAttribIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2 },
5119 {"glVertexAttribI4i", "(IIIII)V", (void *) android_glVertexAttribI4i__IIIII },
5120 {"glVertexAttribI4ui", "(IIIII)V", (void *) android_glVertexAttribI4ui__IIIII },
5121 {"glVertexAttribI4iv", "(I[II)V", (void *) android_glVertexAttribI4iv__I_3II },
5122 {"glVertexAttribI4iv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2 },
5123 {"glVertexAttribI4uiv", "(I[II)V", (void *) android_glVertexAttribI4uiv__I_3II },
5124 {"glVertexAttribI4uiv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2 },
5125 {"glGetUniformuiv", "(II[II)V", (void *) android_glGetUniformuiv__II_3II },
5126 {"glGetUniformuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetUniformuiv__IILjava_nio_IntBuffer_2 },
5127 {"glGetFragDataLocation", "(ILjava/lang/String;)I", (void *) android_glGetFragDataLocation__ILjava_lang_String_2 },
5128 {"glUniform1ui", "(II)V", (void *) android_glUniform1ui__II },
5129 {"glUniform2ui", "(III)V", (void *) android_glUniform2ui__III },
5130 {"glUniform3ui", "(IIII)V", (void *) android_glUniform3ui__IIII },
5131 {"glUniform4ui", "(IIIII)V", (void *) android_glUniform4ui__IIIII },
5132 {"glUniform1uiv", "(II[II)V", (void *) android_glUniform1uiv__II_3II },
5133 {"glUniform1uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform1uiv__IILjava_nio_IntBuffer_2 },
5134 {"glUniform2uiv", "(II[II)V", (void *) android_glUniform2uiv__II_3II },
5135 {"glUniform2uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform2uiv__IILjava_nio_IntBuffer_2 },
5136 {"glUniform3uiv", "(II[II)V", (void *) android_glUniform3uiv__II_3II },
5137 {"glUniform3uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform3uiv__IILjava_nio_IntBuffer_2 },
5138 {"glUniform4uiv", "(II[II)V", (void *) android_glUniform4uiv__II_3II },
5139 {"glUniform4uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform4uiv__IILjava_nio_IntBuffer_2 },
5140 {"glClearBufferiv", "(II[II)V", (void *) android_glClearBufferiv__II_3II },
5141 {"glClearBufferiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferiv__IILjava_nio_IntBuffer_2 },
5142 {"glClearBufferuiv", "(II[II)V", (void *) android_glClearBufferuiv__II_3II },
5143 {"glClearBufferuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferuiv__IILjava_nio_IntBuffer_2 },
5144 {"glClearBufferfv", "(II[FI)V", (void *) android_glClearBufferfv__II_3FI },
5145 {"glClearBufferfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glClearBufferfv__IILjava_nio_FloatBuffer_2 },
5146 {"glClearBufferfi", "(IIFI)V", (void *) android_glClearBufferfi__IIFI },
5147 {"glGetStringi", "(II)Ljava/lang/String;", (void *) android_glGetStringi__II },
5148 {"glCopyBufferSubData", "(IIIII)V", (void *) android_glCopyBufferSubData__IIIII },
5149 {"glGetUniformIndices", "(I[Ljava/lang/String;[II)V", (void *) android_glGetUniformIndices_array },
5150 {"glGetUniformIndices", "(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V", (void *) android_glGetUniformIndices_buffer },
5151 {"glGetActiveUniformsiv", "(II[III[II)V", (void *) android_glGetActiveUniformsiv__II_3III_3II },
5152 {"glGetActiveUniformsiv", "(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2 },
5153 {"glGetUniformBlockIndex", "(ILjava/lang/String;)I", (void *) android_glGetUniformBlockIndex__ILjava_lang_String_2 },
5154 {"glGetActiveUniformBlockiv", "(III[II)V", (void *) android_glGetActiveUniformBlockiv__III_3II },
5155 {"glGetActiveUniformBlockiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2 },
5156 {"glGetActiveUniformBlockName", "(III[II[BI)V", (void *) android_glGetActiveUniformBlockName_III_3II_3BI },
5157 {"glGetActiveUniformBlockName", "(IILjava/nio/Buffer;Ljava/nio/Buffer;)V", (void *) android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 },
5158 {"glGetActiveUniformBlockName", "(II)Ljava/lang/String;", (void *) android_glGetActiveUniformBlockName_II },
5159 {"glUniformBlockBinding", "(III)V", (void *) android_glUniformBlockBinding__III },
5160 {"glDrawArraysInstanced", "(IIII)V", (void *) android_glDrawArraysInstanced__IIII },
5161 {"glDrawElementsInstanced", "(IIILjava/nio/Buffer;I)V", (void *) android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I },
5162 {"glDrawElementsInstanced", "(IIIII)V", (void *) android_glDrawElementsInstanced__IIIII },
5163 {"glFenceSync", "(II)J", (void *) android_glFenceSync__II },
5164 {"glIsSync", "(J)Z", (void *) android_glIsSync__J },
5165 {"glDeleteSync", "(J)V", (void *) android_glDeleteSync__J },
5166 {"glClientWaitSync", "(JIJ)I", (void *) android_glClientWaitSync__JIJ },
5167 {"glWaitSync", "(JIJ)V", (void *) android_glWaitSync__JIJ },
5168 {"glGetInteger64v", "(I[JI)V", (void *) android_glGetInteger64v__I_3JI },
5169 {"glGetInteger64v", "(ILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64v__ILjava_nio_LongBuffer_2 },
5170 {"glGetSynciv", "(JII[II[II)V", (void *) android_glGetSynciv__JII_3II_3II },
5171 {"glGetSynciv", "(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
5172 {"glGetInteger64i_v", "(II[JI)V", (void *) android_glGetInteger64i_v__II_3JI },
5173 {"glGetInteger64i_v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64i_v__IILjava_nio_LongBuffer_2 },
5174 {"glGetBufferParameteri64v", "(II[JI)V", (void *) android_glGetBufferParameteri64v__II_3JI },
5175 {"glGetBufferParameteri64v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2 },
5176 {"glGenSamplers", "(I[II)V", (void *) android_glGenSamplers__I_3II },
5177 {"glGenSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenSamplers__ILjava_nio_IntBuffer_2 },
5178 {"glDeleteSamplers", "(I[II)V", (void *) android_glDeleteSamplers__I_3II },
5179 {"glDeleteSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteSamplers__ILjava_nio_IntBuffer_2 },
5180 {"glIsSampler", "(I)Z", (void *) android_glIsSampler__I },
5181 {"glBindSampler", "(II)V", (void *) android_glBindSampler__II },
5182 {"glSamplerParameteri", "(III)V", (void *) android_glSamplerParameteri__III },
5183 {"glSamplerParameteriv", "(II[II)V", (void *) android_glSamplerParameteriv__II_3II },
5184 {"glSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameteriv__IILjava_nio_IntBuffer_2 },
5185 {"glSamplerParameterf", "(IIF)V", (void *) android_glSamplerParameterf__IIF },
5186 {"glSamplerParameterfv", "(II[FI)V", (void *) android_glSamplerParameterfv__II_3FI },
5187 {"glSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
5188 {"glGetSamplerParameteriv", "(II[II)V", (void *) android_glGetSamplerParameteriv__II_3II },
5189 {"glGetSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2 },
5190 {"glGetSamplerParameterfv", "(II[FI)V", (void *) android_glGetSamplerParameterfv__II_3FI },
5191 {"glGetSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
5192 {"glVertexAttribDivisor", "(II)V", (void *) android_glVertexAttribDivisor__II },
5193 {"glBindTransformFeedback", "(II)V", (void *) android_glBindTransformFeedback__II },
5194 {"glDeleteTransformFeedbacks", "(I[II)V", (void *) android_glDeleteTransformFeedbacks__I_3II },
5195 {"glDeleteTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2 },
5196 {"glGenTransformFeedbacks", "(I[II)V", (void *) android_glGenTransformFeedbacks__I_3II },
5197 {"glGenTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2 },
5198 {"glIsTransformFeedback", "(I)Z", (void *) android_glIsTransformFeedback__I },
5199 {"glPauseTransformFeedback", "()V", (void *) android_glPauseTransformFeedback__ },
5200 {"glResumeTransformFeedback", "()V", (void *) android_glResumeTransformFeedback__ },
5201 {"glGetProgramBinary", "(II[II[IILjava/nio/Buffer;)V", (void *) android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2 },
5202 {"glGetProgramBinary", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;)V", (void *) android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2 },
5203 {"glProgramBinary", "(IILjava/nio/Buffer;I)V", (void *) android_glProgramBinary__IILjava_nio_Buffer_2I },
5204 {"glProgramParameteri", "(III)V", (void *) android_glProgramParameteri__III },
5205 {"glInvalidateFramebuffer", "(II[II)V", (void *) android_glInvalidateFramebuffer__II_3II },
5206 {"glInvalidateFramebuffer", "(IILjava/nio/IntBuffer;)V", (void *) android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2 },
5207 {"glInvalidateSubFramebuffer", "(II[IIIIII)V", (void *) android_glInvalidateSubFramebuffer__II_3IIIIII },
5208 {"glInvalidateSubFramebuffer", "(IILjava/nio/IntBuffer;IIII)V", (void *) android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII },
5209 {"glTexStorage2D", "(IIIII)V", (void *) android_glTexStorage2D__IIIII },
5210 {"glTexStorage3D", "(IIIIII)V", (void *) android_glTexStorage3D__IIIIII },
5211 {"glGetInternalformativ", "(IIII[II)V", (void *) android_glGetInternalformativ__IIII_3II },
5212 {"glGetInternalformativ", "(IIIILjava/nio/IntBuffer;)V", (void *) android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2 },
5213 };
5214
5215 int register_android_opengl_jni_GLES30(JNIEnv *_env)
5216 {
5217     int err;
5218     err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
5219     return err;
5220 }