android_opengl_GLES20.cpp revision 2545b32ced69100fe70685b95315c6adf411083b
1/*
2**
3** Copyright 2009, 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 "jni.h"
21#include "JNIHelp.h"
22#include <android_runtime/AndroidRuntime.h>
23#include <utils/misc.h>
24
25#include <assert.h>
26#include <GLES2/gl2.h>
27#include <GLES2/gl2ext.h>
28
29static int initialized = 0;
30
31static jclass nioAccessClass;
32static jclass bufferClass;
33static jmethodID getBasePointerID;
34static jmethodID getBaseArrayID;
35static jmethodID getBaseArrayOffsetID;
36static jfieldID positionID;
37static jfieldID limitID;
38static jfieldID elementSizeShiftID;
39
40/* Cache method IDs each time the class is loaded. */
41
42static void
43nativeClassInit(JNIEnv *_env, jclass glImplClass)
44{
45    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
46    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
47
48    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
49    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
50
51    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
52            "getBasePointer", "(Ljava/nio/Buffer;)J");
53    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
54            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
55    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
56            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
57
58    positionID = _env->GetFieldID(bufferClass, "position", "I");
59    limitID = _env->GetFieldID(bufferClass, "limit", "I");
60    elementSizeShiftID =
61        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
62}
63
64
65static void *
66getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
67{
68    jint position;
69    jint limit;
70    jint elementSizeShift;
71    jlong pointer;
72    jint offset;
73    void *data;
74
75    position = _env->GetIntField(buffer, positionID);
76    limit = _env->GetIntField(buffer, limitID);
77    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
78    *remaining = (limit - position) << elementSizeShift;
79    pointer = _env->CallStaticLongMethod(nioAccessClass,
80            getBasePointerID, buffer);
81    if (pointer != 0L) {
82        *array = NULL;
83        return (void *) (jint) pointer;
84    }
85
86    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
87            getBaseArrayID, buffer);
88    offset = _env->CallStaticIntMethod(nioAccessClass,
89            getBaseArrayOffsetID, buffer);
90    data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
91
92    return (void *) ((char *) data + offset);
93}
94
95
96static void
97releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
98{
99    _env->ReleasePrimitiveArrayCritical(array, data,
100					   commit ? 0 : JNI_ABORT);
101}
102
103static void *
104getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
105    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
106    if (buf) {
107        jint position = _env->GetIntField(buffer, positionID);
108        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
109        buf += position << elementSizeShift;
110    } else {
111        jniThrowException(_env, "java/lang/IllegalArgumentException",
112                          "Must use a native order direct Buffer");
113    }
114    return (void*) buf;
115}
116
117static int
118getNumCompressedTextureFormats() {
119    int numCompressedTextureFormats = 0;
120    glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &numCompressedTextureFormats);
121    return numCompressedTextureFormats;
122}
123
124static void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
125        GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
126    glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
127}
128
129// --------------------------------------------------------------------------
130/* void glActiveTexture ( GLenum texture ) */
131static void
132android_glActiveTexture__I
133  (JNIEnv *_env, jobject _this, jint texture) {
134    glActiveTexture(
135        (GLenum)texture
136    );
137}
138
139/* void glAttachShader ( GLuint program, GLuint shader ) */
140static void
141android_glAttachShader__II
142  (JNIEnv *_env, jobject _this, jint program, jint shader) {
143    glAttachShader(
144        (GLuint)program,
145        (GLuint)shader
146    );
147}
148
149/* void glBindAttribLocation ( GLuint program, GLuint index, const char *name ) */
150static void
151android_glBindAttribLocation__IILjava_lang_String_2
152  (JNIEnv *_env, jobject _this, jint program, jint index, jstring name) {
153    jint _exception = 0;
154    const char * _exceptionType;
155    const char * _exceptionMessage;
156    const char* _nativename = 0;
157
158    if (!name) {
159        _exceptionType = "java/lang/IllegalArgumentException";
160        _exceptionMessage = "name == null";
161        goto exit;
162    }
163    _nativename = _env->GetStringUTFChars(name, 0);
164
165    glBindAttribLocation(
166        (GLuint)program,
167        (GLuint)index,
168        (char *)_nativename
169    );
170
171exit:
172    if (_nativename) {
173        _env->ReleaseStringUTFChars(name, _nativename);
174    }
175
176    if (_exception) {
177        jniThrowException(_env, _exceptionType, _exceptionMessage);
178    }
179}
180
181/* void glBindBuffer ( GLenum target, GLuint buffer ) */
182static void
183android_glBindBuffer__II
184  (JNIEnv *_env, jobject _this, jint target, jint buffer) {
185    glBindBuffer(
186        (GLenum)target,
187        (GLuint)buffer
188    );
189}
190
191/* void glBindFramebuffer ( GLenum target, GLuint framebuffer ) */
192static void
193android_glBindFramebuffer__II
194  (JNIEnv *_env, jobject _this, jint target, jint framebuffer) {
195    glBindFramebuffer(
196        (GLenum)target,
197        (GLuint)framebuffer
198    );
199}
200
201/* void glBindRenderbuffer ( GLenum target, GLuint renderbuffer ) */
202static void
203android_glBindRenderbuffer__II
204  (JNIEnv *_env, jobject _this, jint target, jint renderbuffer) {
205    glBindRenderbuffer(
206        (GLenum)target,
207        (GLuint)renderbuffer
208    );
209}
210
211/* void glBindTexture ( GLenum target, GLuint texture ) */
212static void
213android_glBindTexture__II
214  (JNIEnv *_env, jobject _this, jint target, jint texture) {
215    glBindTexture(
216        (GLenum)target,
217        (GLuint)texture
218    );
219}
220
221/* void glBlendColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) */
222static void
223android_glBlendColor__FFFF
224  (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
225    glBlendColor(
226        (GLclampf)red,
227        (GLclampf)green,
228        (GLclampf)blue,
229        (GLclampf)alpha
230    );
231}
232
233/* void glBlendEquation ( GLenum mode ) */
234static void
235android_glBlendEquation__I
236  (JNIEnv *_env, jobject _this, jint mode) {
237    glBlendEquation(
238        (GLenum)mode
239    );
240}
241
242/* void glBlendEquationSeparate ( GLenum modeRGB, GLenum modeAlpha ) */
243static void
244android_glBlendEquationSeparate__II
245  (JNIEnv *_env, jobject _this, jint modeRGB, jint modeAlpha) {
246    glBlendEquationSeparate(
247        (GLenum)modeRGB,
248        (GLenum)modeAlpha
249    );
250}
251
252/* void glBlendFunc ( GLenum sfactor, GLenum dfactor ) */
253static void
254android_glBlendFunc__II
255  (JNIEnv *_env, jobject _this, jint sfactor, jint dfactor) {
256    glBlendFunc(
257        (GLenum)sfactor,
258        (GLenum)dfactor
259    );
260}
261
262/* void glBlendFuncSeparate ( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha ) */
263static void
264android_glBlendFuncSeparate__IIII
265  (JNIEnv *_env, jobject _this, jint srcRGB, jint dstRGB, jint srcAlpha, jint dstAlpha) {
266    glBlendFuncSeparate(
267        (GLenum)srcRGB,
268        (GLenum)dstRGB,
269        (GLenum)srcAlpha,
270        (GLenum)dstAlpha
271    );
272}
273
274/* void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage ) */
275static void
276android_glBufferData__IILjava_nio_Buffer_2I
277  (JNIEnv *_env, jobject _this, jint target, jint size, jobject data_buf, jint usage) {
278    jint _exception = 0;
279    const char * _exceptionType;
280    const char * _exceptionMessage;
281    jarray _array = (jarray) 0;
282    jint _remaining;
283    GLvoid *data = (GLvoid *) 0;
284
285    if (data_buf) {
286        data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
287        if (_remaining < size) {
288            _exception = 1;
289            _exceptionType = "java/lang/IllegalArgumentException";
290            _exceptionMessage = "remaining() < size < needed";
291            goto exit;
292        }
293    }
294    glBufferData(
295        (GLenum)target,
296        (GLsizeiptr)size,
297        (GLvoid *)data,
298        (GLenum)usage
299    );
300
301exit:
302    if (_array) {
303        releasePointer(_env, _array, data, JNI_FALSE);
304    }
305    if (_exception) {
306        jniThrowException(_env, _exceptionType, _exceptionMessage);
307    }
308}
309
310/* void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data ) */
311static void
312android_glBufferSubData__IIILjava_nio_Buffer_2
313  (JNIEnv *_env, jobject _this, jint target, jint offset, jint size, jobject data_buf) {
314    jint _exception = 0;
315    const char * _exceptionType;
316    const char * _exceptionMessage;
317    jarray _array = (jarray) 0;
318    jint _remaining;
319    GLvoid *data = (GLvoid *) 0;
320
321    data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
322    if (_remaining < size) {
323        _exception = 1;
324        _exceptionType = "java/lang/IllegalArgumentException";
325        _exceptionMessage = "remaining() < size < needed";
326        goto exit;
327    }
328    glBufferSubData(
329        (GLenum)target,
330        (GLintptr)offset,
331        (GLsizeiptr)size,
332        (GLvoid *)data
333    );
334
335exit:
336    if (_array) {
337        releasePointer(_env, _array, data, JNI_FALSE);
338    }
339    if (_exception) {
340        jniThrowException(_env, _exceptionType, _exceptionMessage);
341    }
342}
343
344/* GLenum glCheckFramebufferStatus ( GLenum target ) */
345static jint
346android_glCheckFramebufferStatus__I
347  (JNIEnv *_env, jobject _this, jint target) {
348    GLenum _returnValue;
349    _returnValue = glCheckFramebufferStatus(
350        (GLenum)target
351    );
352    return _returnValue;
353}
354
355/* void glClear ( GLbitfield mask ) */
356static void
357android_glClear__I
358  (JNIEnv *_env, jobject _this, jint mask) {
359    glClear(
360        (GLbitfield)mask
361    );
362}
363
364/* void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) */
365static void
366android_glClearColor__FFFF
367  (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
368    glClearColor(
369        (GLclampf)red,
370        (GLclampf)green,
371        (GLclampf)blue,
372        (GLclampf)alpha
373    );
374}
375
376/* void glClearDepthf ( GLclampf depth ) */
377static void
378android_glClearDepthf__F
379  (JNIEnv *_env, jobject _this, jfloat depth) {
380    glClearDepthf(
381        (GLclampf)depth
382    );
383}
384
385/* void glClearStencil ( GLint s ) */
386static void
387android_glClearStencil__I
388  (JNIEnv *_env, jobject _this, jint s) {
389    glClearStencil(
390        (GLint)s
391    );
392}
393
394/* void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ) */
395static void
396android_glColorMask__ZZZZ
397  (JNIEnv *_env, jobject _this, jboolean red, jboolean green, jboolean blue, jboolean alpha) {
398    glColorMask(
399        (GLboolean)red,
400        (GLboolean)green,
401        (GLboolean)blue,
402        (GLboolean)alpha
403    );
404}
405
406/* void glCompileShader ( GLuint shader ) */
407static void
408android_glCompileShader__I
409  (JNIEnv *_env, jobject _this, jint shader) {
410    glCompileShader(
411        (GLuint)shader
412    );
413}
414
415/* void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ) */
416static void
417android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
418  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint imageSize, jobject data_buf) {
419    jarray _array = (jarray) 0;
420    jint _remaining;
421    GLvoid *data = (GLvoid *) 0;
422
423    data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
424    glCompressedTexImage2D(
425        (GLenum)target,
426        (GLint)level,
427        (GLenum)internalformat,
428        (GLsizei)width,
429        (GLsizei)height,
430        (GLint)border,
431        (GLsizei)imageSize,
432        (GLvoid *)data
433    );
434    if (_array) {
435        releasePointer(_env, _array, data, JNI_FALSE);
436    }
437}
438
439/* void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ) */
440static void
441android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
442  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint imageSize, jobject data_buf) {
443    jarray _array = (jarray) 0;
444    jint _remaining;
445    GLvoid *data = (GLvoid *) 0;
446
447    data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
448    glCompressedTexSubImage2D(
449        (GLenum)target,
450        (GLint)level,
451        (GLint)xoffset,
452        (GLint)yoffset,
453        (GLsizei)width,
454        (GLsizei)height,
455        (GLenum)format,
456        (GLsizei)imageSize,
457        (GLvoid *)data
458    );
459    if (_array) {
460        releasePointer(_env, _array, data, JNI_FALSE);
461    }
462}
463
464/* void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) */
465static void
466android_glCopyTexImage2D__IIIIIIII
467  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint x, jint y, jint width, jint height, jint border) {
468    glCopyTexImage2D(
469        (GLenum)target,
470        (GLint)level,
471        (GLenum)internalformat,
472        (GLint)x,
473        (GLint)y,
474        (GLsizei)width,
475        (GLsizei)height,
476        (GLint)border
477    );
478}
479
480/* void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
481static void
482android_glCopyTexSubImage2D__IIIIIIII
483  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint x, jint y, jint width, jint height) {
484    glCopyTexSubImage2D(
485        (GLenum)target,
486        (GLint)level,
487        (GLint)xoffset,
488        (GLint)yoffset,
489        (GLint)x,
490        (GLint)y,
491        (GLsizei)width,
492        (GLsizei)height
493    );
494}
495
496/* GLuint glCreateProgram ( void ) */
497static jint
498android_glCreateProgram__
499  (JNIEnv *_env, jobject _this) {
500    GLuint _returnValue;
501    _returnValue = glCreateProgram();
502    return _returnValue;
503}
504
505/* GLuint glCreateShader ( GLenum type ) */
506static jint
507android_glCreateShader__I
508  (JNIEnv *_env, jobject _this, jint type) {
509    GLuint _returnValue;
510    _returnValue = glCreateShader(
511        (GLenum)type
512    );
513    return _returnValue;
514}
515
516/* void glCullFace ( GLenum mode ) */
517static void
518android_glCullFace__I
519  (JNIEnv *_env, jobject _this, jint mode) {
520    glCullFace(
521        (GLenum)mode
522    );
523}
524
525/* void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) */
526static void
527android_glDeleteBuffers__I_3II
528  (JNIEnv *_env, jobject _this, jint n, jintArray buffers_ref, jint offset) {
529    jint _exception = 0;
530    const char * _exceptionType;
531    const char * _exceptionMessage;
532    GLuint *buffers_base = (GLuint *) 0;
533    jint _remaining;
534    GLuint *buffers = (GLuint *) 0;
535
536    if (!buffers_ref) {
537        _exception = 1;
538        _exceptionType = "java/lang/IllegalArgumentException";
539        _exceptionMessage = "buffers == null";
540        goto exit;
541    }
542    if (offset < 0) {
543        _exception = 1;
544        _exceptionType = "java/lang/IllegalArgumentException";
545        _exceptionMessage = "offset < 0";
546        goto exit;
547    }
548    _remaining = _env->GetArrayLength(buffers_ref) - offset;
549    if (_remaining < n) {
550        _exception = 1;
551        _exceptionType = "java/lang/IllegalArgumentException";
552        _exceptionMessage = "length - offset < n < needed";
553        goto exit;
554    }
555    buffers_base = (GLuint *)
556        _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
557    buffers = buffers_base + offset;
558
559    glDeleteBuffers(
560        (GLsizei)n,
561        (GLuint *)buffers
562    );
563
564exit:
565    if (buffers_base) {
566        _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
567            JNI_ABORT);
568    }
569    if (_exception) {
570        jniThrowException(_env, _exceptionType, _exceptionMessage);
571    }
572}
573
574/* void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) */
575static void
576android_glDeleteBuffers__ILjava_nio_IntBuffer_2
577  (JNIEnv *_env, jobject _this, jint n, jobject buffers_buf) {
578    jint _exception = 0;
579    const char * _exceptionType;
580    const char * _exceptionMessage;
581    jarray _array = (jarray) 0;
582    jint _remaining;
583    GLuint *buffers = (GLuint *) 0;
584
585    buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining);
586    if (_remaining < n) {
587        _exception = 1;
588        _exceptionType = "java/lang/IllegalArgumentException";
589        _exceptionMessage = "remaining() < n < needed";
590        goto exit;
591    }
592    glDeleteBuffers(
593        (GLsizei)n,
594        (GLuint *)buffers
595    );
596
597exit:
598    if (_array) {
599        releasePointer(_env, _array, buffers, JNI_FALSE);
600    }
601    if (_exception) {
602        jniThrowException(_env, _exceptionType, _exceptionMessage);
603    }
604}
605
606/* void glDeleteFramebuffers ( GLsizei n, const GLuint *framebuffers ) */
607static void
608android_glDeleteFramebuffers__I_3II
609  (JNIEnv *_env, jobject _this, jint n, jintArray framebuffers_ref, jint offset) {
610    jint _exception = 0;
611    const char * _exceptionType;
612    const char * _exceptionMessage;
613    GLuint *framebuffers_base = (GLuint *) 0;
614    jint _remaining;
615    GLuint *framebuffers = (GLuint *) 0;
616
617    if (!framebuffers_ref) {
618        _exception = 1;
619        _exceptionType = "java/lang/IllegalArgumentException";
620        _exceptionMessage = "framebuffers == null";
621        goto exit;
622    }
623    if (offset < 0) {
624        _exception = 1;
625        _exceptionType = "java/lang/IllegalArgumentException";
626        _exceptionMessage = "offset < 0";
627        goto exit;
628    }
629    _remaining = _env->GetArrayLength(framebuffers_ref) - offset;
630    framebuffers_base = (GLuint *)
631        _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
632    framebuffers = framebuffers_base + offset;
633
634    glDeleteFramebuffers(
635        (GLsizei)n,
636        (GLuint *)framebuffers
637    );
638
639exit:
640    if (framebuffers_base) {
641        _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
642            JNI_ABORT);
643    }
644    if (_exception) {
645        jniThrowException(_env, _exceptionType, _exceptionMessage);
646    }
647}
648
649/* void glDeleteFramebuffers ( GLsizei n, const GLuint *framebuffers ) */
650static void
651android_glDeleteFramebuffers__ILjava_nio_IntBuffer_2
652  (JNIEnv *_env, jobject _this, jint n, jobject framebuffers_buf) {
653    jarray _array = (jarray) 0;
654    jint _remaining;
655    GLuint *framebuffers = (GLuint *) 0;
656
657    framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining);
658    glDeleteFramebuffers(
659        (GLsizei)n,
660        (GLuint *)framebuffers
661    );
662    if (_array) {
663        releasePointer(_env, _array, framebuffers, JNI_FALSE);
664    }
665}
666
667/* void glDeleteProgram ( GLuint program ) */
668static void
669android_glDeleteProgram__I
670  (JNIEnv *_env, jobject _this, jint program) {
671    glDeleteProgram(
672        (GLuint)program
673    );
674}
675
676/* void glDeleteRenderbuffers ( GLsizei n, const GLuint *renderbuffers ) */
677static void
678android_glDeleteRenderbuffers__I_3II
679  (JNIEnv *_env, jobject _this, jint n, jintArray renderbuffers_ref, jint offset) {
680    jint _exception = 0;
681    const char * _exceptionType;
682    const char * _exceptionMessage;
683    GLuint *renderbuffers_base = (GLuint *) 0;
684    jint _remaining;
685    GLuint *renderbuffers = (GLuint *) 0;
686
687    if (!renderbuffers_ref) {
688        _exception = 1;
689        _exceptionType = "java/lang/IllegalArgumentException";
690        _exceptionMessage = "renderbuffers == null";
691        goto exit;
692    }
693    if (offset < 0) {
694        _exception = 1;
695        _exceptionType = "java/lang/IllegalArgumentException";
696        _exceptionMessage = "offset < 0";
697        goto exit;
698    }
699    _remaining = _env->GetArrayLength(renderbuffers_ref) - offset;
700    renderbuffers_base = (GLuint *)
701        _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
702    renderbuffers = renderbuffers_base + offset;
703
704    glDeleteRenderbuffers(
705        (GLsizei)n,
706        (GLuint *)renderbuffers
707    );
708
709exit:
710    if (renderbuffers_base) {
711        _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
712            JNI_ABORT);
713    }
714    if (_exception) {
715        jniThrowException(_env, _exceptionType, _exceptionMessage);
716    }
717}
718
719/* void glDeleteRenderbuffers ( GLsizei n, const GLuint *renderbuffers ) */
720static void
721android_glDeleteRenderbuffers__ILjava_nio_IntBuffer_2
722  (JNIEnv *_env, jobject _this, jint n, jobject renderbuffers_buf) {
723    jarray _array = (jarray) 0;
724    jint _remaining;
725    GLuint *renderbuffers = (GLuint *) 0;
726
727    renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining);
728    glDeleteRenderbuffers(
729        (GLsizei)n,
730        (GLuint *)renderbuffers
731    );
732    if (_array) {
733        releasePointer(_env, _array, renderbuffers, JNI_FALSE);
734    }
735}
736
737/* void glDeleteShader ( GLuint shader ) */
738static void
739android_glDeleteShader__I
740  (JNIEnv *_env, jobject _this, jint shader) {
741    glDeleteShader(
742        (GLuint)shader
743    );
744}
745
746/* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
747static void
748android_glDeleteTextures__I_3II
749  (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
750    jint _exception = 0;
751    const char * _exceptionType;
752    const char * _exceptionMessage;
753    GLuint *textures_base = (GLuint *) 0;
754    jint _remaining;
755    GLuint *textures = (GLuint *) 0;
756
757    if (!textures_ref) {
758        _exception = 1;
759        _exceptionType = "java/lang/IllegalArgumentException";
760        _exceptionMessage = "textures == null";
761        goto exit;
762    }
763    if (offset < 0) {
764        _exception = 1;
765        _exceptionType = "java/lang/IllegalArgumentException";
766        _exceptionMessage = "offset < 0";
767        goto exit;
768    }
769    _remaining = _env->GetArrayLength(textures_ref) - offset;
770    if (_remaining < n) {
771        _exception = 1;
772        _exceptionType = "java/lang/IllegalArgumentException";
773        _exceptionMessage = "length - offset < n < needed";
774        goto exit;
775    }
776    textures_base = (GLuint *)
777        _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
778    textures = textures_base + offset;
779
780    glDeleteTextures(
781        (GLsizei)n,
782        (GLuint *)textures
783    );
784
785exit:
786    if (textures_base) {
787        _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
788            JNI_ABORT);
789    }
790    if (_exception) {
791        jniThrowException(_env, _exceptionType, _exceptionMessage);
792    }
793}
794
795/* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
796static void
797android_glDeleteTextures__ILjava_nio_IntBuffer_2
798  (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
799    jint _exception = 0;
800    const char * _exceptionType;
801    const char * _exceptionMessage;
802    jarray _array = (jarray) 0;
803    jint _remaining;
804    GLuint *textures = (GLuint *) 0;
805
806    textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining);
807    if (_remaining < n) {
808        _exception = 1;
809        _exceptionType = "java/lang/IllegalArgumentException";
810        _exceptionMessage = "remaining() < n < needed";
811        goto exit;
812    }
813    glDeleteTextures(
814        (GLsizei)n,
815        (GLuint *)textures
816    );
817
818exit:
819    if (_array) {
820        releasePointer(_env, _array, textures, JNI_FALSE);
821    }
822    if (_exception) {
823        jniThrowException(_env, _exceptionType, _exceptionMessage);
824    }
825}
826
827/* void glDepthFunc ( GLenum func ) */
828static void
829android_glDepthFunc__I
830  (JNIEnv *_env, jobject _this, jint func) {
831    glDepthFunc(
832        (GLenum)func
833    );
834}
835
836/* void glDepthMask ( GLboolean flag ) */
837static void
838android_glDepthMask__Z
839  (JNIEnv *_env, jobject _this, jboolean flag) {
840    glDepthMask(
841        (GLboolean)flag
842    );
843}
844
845/* void glDepthRangef ( GLclampf zNear, GLclampf zFar ) */
846static void
847android_glDepthRangef__FF
848  (JNIEnv *_env, jobject _this, jfloat zNear, jfloat zFar) {
849    glDepthRangef(
850        (GLclampf)zNear,
851        (GLclampf)zFar
852    );
853}
854
855/* void glDetachShader ( GLuint program, GLuint shader ) */
856static void
857android_glDetachShader__II
858  (JNIEnv *_env, jobject _this, jint program, jint shader) {
859    glDetachShader(
860        (GLuint)program,
861        (GLuint)shader
862    );
863}
864
865/* void glDisable ( GLenum cap ) */
866static void
867android_glDisable__I
868  (JNIEnv *_env, jobject _this, jint cap) {
869    glDisable(
870        (GLenum)cap
871    );
872}
873
874/* void glDisableVertexAttribArray ( GLuint index ) */
875static void
876android_glDisableVertexAttribArray__I
877  (JNIEnv *_env, jobject _this, jint index) {
878    glDisableVertexAttribArray(
879        (GLuint)index
880    );
881}
882
883/* void glDrawArrays ( GLenum mode, GLint first, GLsizei count ) */
884static void
885android_glDrawArrays__III
886  (JNIEnv *_env, jobject _this, jint mode, jint first, jint count) {
887    glDrawArrays(
888        (GLenum)mode,
889        (GLint)first,
890        (GLsizei)count
891    );
892}
893
894/* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, GLint offset ) */
895static void
896android_glDrawElements__IIII
897  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint offset) {
898    jint _exception = 0;
899    const char * _exceptionType;
900    const char * _exceptionMessage;
901    glDrawElements(
902        (GLenum)mode,
903        (GLsizei)count,
904        (GLenum)type,
905        (const GLvoid *)offset
906    );
907    if (_exception) {
908        jniThrowException(_env, _exceptionType, _exceptionMessage);
909    }
910}
911
912/* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) */
913static void
914android_glDrawElements__IIILjava_nio_Buffer_2
915  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf) {
916    jint _exception = 0;
917    const char * _exceptionType;
918    const char * _exceptionMessage;
919    jarray _array = (jarray) 0;
920    jint _remaining;
921    GLvoid *indices = (GLvoid *) 0;
922
923    indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining);
924    if (_remaining < count) {
925        _exception = 1;
926        _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
927        _exceptionMessage = "remaining() < count < needed";
928        goto exit;
929    }
930    glDrawElements(
931        (GLenum)mode,
932        (GLsizei)count,
933        (GLenum)type,
934        (GLvoid *)indices
935    );
936
937exit:
938    if (_array) {
939        releasePointer(_env, _array, indices, JNI_FALSE);
940    }
941    if (_exception) {
942        jniThrowException(_env, _exceptionType, _exceptionMessage);
943    }
944}
945
946/* void glEnable ( GLenum cap ) */
947static void
948android_glEnable__I
949  (JNIEnv *_env, jobject _this, jint cap) {
950    glEnable(
951        (GLenum)cap
952    );
953}
954
955/* void glEnableVertexAttribArray ( GLuint index ) */
956static void
957android_glEnableVertexAttribArray__I
958  (JNIEnv *_env, jobject _this, jint index) {
959    glEnableVertexAttribArray(
960        (GLuint)index
961    );
962}
963
964/* void glFinish ( void ) */
965static void
966android_glFinish__
967  (JNIEnv *_env, jobject _this) {
968    glFinish();
969}
970
971/* void glFlush ( void ) */
972static void
973android_glFlush__
974  (JNIEnv *_env, jobject _this) {
975    glFlush();
976}
977
978/* void glFramebufferRenderbuffer ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer ) */
979static void
980android_glFramebufferRenderbuffer__IIII
981  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint renderbuffertarget, jint renderbuffer) {
982    glFramebufferRenderbuffer(
983        (GLenum)target,
984        (GLenum)attachment,
985        (GLenum)renderbuffertarget,
986        (GLuint)renderbuffer
987    );
988}
989
990/* void glFramebufferTexture2D ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ) */
991static void
992android_glFramebufferTexture2D__IIIII
993  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint textarget, jint texture, jint level) {
994    glFramebufferTexture2D(
995        (GLenum)target,
996        (GLenum)attachment,
997        (GLenum)textarget,
998        (GLuint)texture,
999        (GLint)level
1000    );
1001}
1002
1003/* void glFrontFace ( GLenum mode ) */
1004static void
1005android_glFrontFace__I
1006  (JNIEnv *_env, jobject _this, jint mode) {
1007    glFrontFace(
1008        (GLenum)mode
1009    );
1010}
1011
1012/* void glGenBuffers ( GLsizei n, GLuint *buffers ) */
1013static void
1014android_glGenBuffers__I_3II
1015  (JNIEnv *_env, jobject _this, jint n, jintArray buffers_ref, jint offset) {
1016    jint _exception = 0;
1017    const char * _exceptionType;
1018    const char * _exceptionMessage;
1019    GLuint *buffers_base = (GLuint *) 0;
1020    jint _remaining;
1021    GLuint *buffers = (GLuint *) 0;
1022
1023    if (!buffers_ref) {
1024        _exception = 1;
1025        _exceptionType = "java/lang/IllegalArgumentException";
1026        _exceptionMessage = "buffers == null";
1027        goto exit;
1028    }
1029    if (offset < 0) {
1030        _exception = 1;
1031        _exceptionType = "java/lang/IllegalArgumentException";
1032        _exceptionMessage = "offset < 0";
1033        goto exit;
1034    }
1035    _remaining = _env->GetArrayLength(buffers_ref) - offset;
1036    if (_remaining < n) {
1037        _exception = 1;
1038        _exceptionType = "java/lang/IllegalArgumentException";
1039        _exceptionMessage = "length - offset < n < needed";
1040        goto exit;
1041    }
1042    buffers_base = (GLuint *)
1043        _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
1044    buffers = buffers_base + offset;
1045
1046    glGenBuffers(
1047        (GLsizei)n,
1048        (GLuint *)buffers
1049    );
1050
1051exit:
1052    if (buffers_base) {
1053        _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
1054            _exception ? JNI_ABORT: 0);
1055    }
1056    if (_exception) {
1057        jniThrowException(_env, _exceptionType, _exceptionMessage);
1058    }
1059}
1060
1061/* void glGenBuffers ( GLsizei n, GLuint *buffers ) */
1062static void
1063android_glGenBuffers__ILjava_nio_IntBuffer_2
1064  (JNIEnv *_env, jobject _this, jint n, jobject buffers_buf) {
1065    jint _exception = 0;
1066    const char * _exceptionType;
1067    const char * _exceptionMessage;
1068    jarray _array = (jarray) 0;
1069    jint _remaining;
1070    GLuint *buffers = (GLuint *) 0;
1071
1072    buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining);
1073    if (_remaining < n) {
1074        _exception = 1;
1075        _exceptionType = "java/lang/IllegalArgumentException";
1076        _exceptionMessage = "remaining() < n < needed";
1077        goto exit;
1078    }
1079    glGenBuffers(
1080        (GLsizei)n,
1081        (GLuint *)buffers
1082    );
1083
1084exit:
1085    if (_array) {
1086        releasePointer(_env, _array, buffers, _exception ? JNI_FALSE : JNI_TRUE);
1087    }
1088    if (_exception) {
1089        jniThrowException(_env, _exceptionType, _exceptionMessage);
1090    }
1091}
1092
1093/* void glGenerateMipmap ( GLenum target ) */
1094static void
1095android_glGenerateMipmap__I
1096  (JNIEnv *_env, jobject _this, jint target) {
1097    glGenerateMipmap(
1098        (GLenum)target
1099    );
1100}
1101
1102/* void glGenFramebuffers ( GLsizei n, GLuint *framebuffers ) */
1103static void
1104android_glGenFramebuffers__I_3II
1105  (JNIEnv *_env, jobject _this, jint n, jintArray framebuffers_ref, jint offset) {
1106    jint _exception = 0;
1107    const char * _exceptionType;
1108    const char * _exceptionMessage;
1109    GLuint *framebuffers_base = (GLuint *) 0;
1110    jint _remaining;
1111    GLuint *framebuffers = (GLuint *) 0;
1112
1113    if (!framebuffers_ref) {
1114        _exception = 1;
1115        _exceptionType = "java/lang/IllegalArgumentException";
1116        _exceptionMessage = "framebuffers == null";
1117        goto exit;
1118    }
1119    if (offset < 0) {
1120        _exception = 1;
1121        _exceptionType = "java/lang/IllegalArgumentException";
1122        _exceptionMessage = "offset < 0";
1123        goto exit;
1124    }
1125    _remaining = _env->GetArrayLength(framebuffers_ref) - offset;
1126    framebuffers_base = (GLuint *)
1127        _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
1128    framebuffers = framebuffers_base + offset;
1129
1130    glGenFramebuffers(
1131        (GLsizei)n,
1132        (GLuint *)framebuffers
1133    );
1134
1135exit:
1136    if (framebuffers_base) {
1137        _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
1138            _exception ? JNI_ABORT: 0);
1139    }
1140    if (_exception) {
1141        jniThrowException(_env, _exceptionType, _exceptionMessage);
1142    }
1143}
1144
1145/* void glGenFramebuffers ( GLsizei n, GLuint *framebuffers ) */
1146static void
1147android_glGenFramebuffers__ILjava_nio_IntBuffer_2
1148  (JNIEnv *_env, jobject _this, jint n, jobject framebuffers_buf) {
1149    jarray _array = (jarray) 0;
1150    jint _remaining;
1151    GLuint *framebuffers = (GLuint *) 0;
1152
1153    framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining);
1154    glGenFramebuffers(
1155        (GLsizei)n,
1156        (GLuint *)framebuffers
1157    );
1158    if (_array) {
1159        releasePointer(_env, _array, framebuffers, JNI_TRUE);
1160    }
1161}
1162
1163/* void glGenRenderbuffers ( GLsizei n, GLuint *renderbuffers ) */
1164static void
1165android_glGenRenderbuffers__I_3II
1166  (JNIEnv *_env, jobject _this, jint n, jintArray renderbuffers_ref, jint offset) {
1167    jint _exception = 0;
1168    const char * _exceptionType;
1169    const char * _exceptionMessage;
1170    GLuint *renderbuffers_base = (GLuint *) 0;
1171    jint _remaining;
1172    GLuint *renderbuffers = (GLuint *) 0;
1173
1174    if (!renderbuffers_ref) {
1175        _exception = 1;
1176        _exceptionType = "java/lang/IllegalArgumentException";
1177        _exceptionMessage = "renderbuffers == null";
1178        goto exit;
1179    }
1180    if (offset < 0) {
1181        _exception = 1;
1182        _exceptionType = "java/lang/IllegalArgumentException";
1183        _exceptionMessage = "offset < 0";
1184        goto exit;
1185    }
1186    _remaining = _env->GetArrayLength(renderbuffers_ref) - offset;
1187    renderbuffers_base = (GLuint *)
1188        _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
1189    renderbuffers = renderbuffers_base + offset;
1190
1191    glGenRenderbuffers(
1192        (GLsizei)n,
1193        (GLuint *)renderbuffers
1194    );
1195
1196exit:
1197    if (renderbuffers_base) {
1198        _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
1199            _exception ? JNI_ABORT: 0);
1200    }
1201    if (_exception) {
1202        jniThrowException(_env, _exceptionType, _exceptionMessage);
1203    }
1204}
1205
1206/* void glGenRenderbuffers ( GLsizei n, GLuint *renderbuffers ) */
1207static void
1208android_glGenRenderbuffers__ILjava_nio_IntBuffer_2
1209  (JNIEnv *_env, jobject _this, jint n, jobject renderbuffers_buf) {
1210    jarray _array = (jarray) 0;
1211    jint _remaining;
1212    GLuint *renderbuffers = (GLuint *) 0;
1213
1214    renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining);
1215    glGenRenderbuffers(
1216        (GLsizei)n,
1217        (GLuint *)renderbuffers
1218    );
1219    if (_array) {
1220        releasePointer(_env, _array, renderbuffers, JNI_TRUE);
1221    }
1222}
1223
1224/* void glGenTextures ( GLsizei n, GLuint *textures ) */
1225static void
1226android_glGenTextures__I_3II
1227  (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
1228    jint _exception = 0;
1229    const char * _exceptionType;
1230    const char * _exceptionMessage;
1231    GLuint *textures_base = (GLuint *) 0;
1232    jint _remaining;
1233    GLuint *textures = (GLuint *) 0;
1234
1235    if (!textures_ref) {
1236        _exception = 1;
1237        _exceptionType = "java/lang/IllegalArgumentException";
1238        _exceptionMessage = "textures == null";
1239        goto exit;
1240    }
1241    if (offset < 0) {
1242        _exception = 1;
1243        _exceptionType = "java/lang/IllegalArgumentException";
1244        _exceptionMessage = "offset < 0";
1245        goto exit;
1246    }
1247    _remaining = _env->GetArrayLength(textures_ref) - offset;
1248    if (_remaining < n) {
1249        _exception = 1;
1250        _exceptionType = "java/lang/IllegalArgumentException";
1251        _exceptionMessage = "length - offset < n < needed";
1252        goto exit;
1253    }
1254    textures_base = (GLuint *)
1255        _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
1256    textures = textures_base + offset;
1257
1258    glGenTextures(
1259        (GLsizei)n,
1260        (GLuint *)textures
1261    );
1262
1263exit:
1264    if (textures_base) {
1265        _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
1266            _exception ? JNI_ABORT: 0);
1267    }
1268    if (_exception) {
1269        jniThrowException(_env, _exceptionType, _exceptionMessage);
1270    }
1271}
1272
1273/* void glGenTextures ( GLsizei n, GLuint *textures ) */
1274static void
1275android_glGenTextures__ILjava_nio_IntBuffer_2
1276  (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
1277    jint _exception = 0;
1278    const char * _exceptionType;
1279    const char * _exceptionMessage;
1280    jarray _array = (jarray) 0;
1281    jint _remaining;
1282    GLuint *textures = (GLuint *) 0;
1283
1284    textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining);
1285    if (_remaining < n) {
1286        _exception = 1;
1287        _exceptionType = "java/lang/IllegalArgumentException";
1288        _exceptionMessage = "remaining() < n < needed";
1289        goto exit;
1290    }
1291    glGenTextures(
1292        (GLsizei)n,
1293        (GLuint *)textures
1294    );
1295
1296exit:
1297    if (_array) {
1298        releasePointer(_env, _array, textures, _exception ? JNI_FALSE : JNI_TRUE);
1299    }
1300    if (_exception) {
1301        jniThrowException(_env, _exceptionType, _exceptionMessage);
1302    }
1303}
1304
1305/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
1306static void
1307android_glGetActiveAttrib__III_3II_3II_3II_3BI
1308  (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) {
1309    jint _exception = 0;
1310    const char * _exceptionType;
1311    const char * _exceptionMessage;
1312    GLsizei *length_base = (GLsizei *) 0;
1313    jint _lengthRemaining;
1314    GLsizei *length = (GLsizei *) 0;
1315    GLint *size_base = (GLint *) 0;
1316    jint _sizeRemaining;
1317    GLint *size = (GLint *) 0;
1318    GLenum *type_base = (GLenum *) 0;
1319    jint _typeRemaining;
1320    GLenum *type = (GLenum *) 0;
1321    char *name_base = (char *) 0;
1322    jint _nameRemaining;
1323    char *name = (char *) 0;
1324
1325    if (!length_ref) {
1326        _exception = 1;
1327        _exceptionType = "java/lang/IllegalArgumentException";
1328        _exceptionMessage = "length == null";
1329        goto exit;
1330    }
1331    if (lengthOffset < 0) {
1332        _exception = 1;
1333        _exceptionType = "java/lang/IllegalArgumentException";
1334        _exceptionMessage = "lengthOffset < 0";
1335        goto exit;
1336    }
1337    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
1338    length_base = (GLsizei *)
1339        _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
1340    length = length_base + lengthOffset;
1341
1342    if (!size_ref) {
1343        _exception = 1;
1344        _exceptionType = "java/lang/IllegalArgumentException";
1345        _exceptionMessage = "size == null";
1346        goto exit;
1347    }
1348    if (sizeOffset < 0) {
1349        _exception = 1;
1350        _exceptionType = "java/lang/IllegalArgumentException";
1351        _exceptionMessage = "sizeOffset < 0";
1352        goto exit;
1353    }
1354    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
1355    size_base = (GLint *)
1356        _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
1357    size = size_base + sizeOffset;
1358
1359    if (!type_ref) {
1360        _exception = 1;
1361        _exceptionType = "java/lang/IllegalArgumentException";
1362        _exceptionMessage = "type == null";
1363        goto exit;
1364    }
1365    if (typeOffset < 0) {
1366        _exception = 1;
1367        _exceptionType = "java/lang/IllegalArgumentException";
1368        _exceptionMessage = "typeOffset < 0";
1369        goto exit;
1370    }
1371    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
1372    type_base = (GLenum *)
1373        _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
1374    type = type_base + typeOffset;
1375
1376    if (!name_ref) {
1377        _exception = 1;
1378        _exceptionType = "java/lang/IllegalArgumentException";
1379        _exceptionMessage = "name == null";
1380        goto exit;
1381    }
1382    if (nameOffset < 0) {
1383        _exception = 1;
1384        _exceptionType = "java/lang/IllegalArgumentException";
1385        _exceptionMessage = "nameOffset < 0";
1386        goto exit;
1387    }
1388    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
1389    name_base = (char *)
1390        _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
1391    name = name_base + nameOffset;
1392
1393    glGetActiveAttrib(
1394        (GLuint)program,
1395        (GLuint)index,
1396        (GLsizei)bufsize,
1397        (GLsizei *)length,
1398        (GLint *)size,
1399        (GLenum *)type,
1400        (char *)name
1401    );
1402
1403exit:
1404    if (name_base) {
1405        _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
1406            _exception ? JNI_ABORT: 0);
1407    }
1408    if (type_base) {
1409        _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
1410            _exception ? JNI_ABORT: 0);
1411    }
1412    if (size_base) {
1413        _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
1414            _exception ? JNI_ABORT: 0);
1415    }
1416    if (length_base) {
1417        _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
1418            _exception ? JNI_ABORT: 0);
1419    }
1420    if (_exception) {
1421        jniThrowException(_env, _exceptionType, _exceptionMessage);
1422    }
1423}
1424
1425/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
1426static void
1427android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
1428  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
1429    jarray _lengthArray = (jarray) 0;
1430    jarray _sizeArray = (jarray) 0;
1431    jarray _typeArray = (jarray) 0;
1432    jint _lengthRemaining;
1433    GLsizei *length = (GLsizei *) 0;
1434    jint _sizeRemaining;
1435    GLint *size = (GLint *) 0;
1436    jint _typeRemaining;
1437    GLenum *type = (GLenum *) 0;
1438
1439    length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining);
1440    size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining);
1441    type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining);
1442    glGetActiveAttrib(
1443        (GLuint)program,
1444        (GLuint)index,
1445        (GLsizei)bufsize,
1446        (GLsizei *)length,
1447        (GLint *)size,
1448        (GLenum *)type,
1449        (char *)name
1450    );
1451    if (_lengthArray) {
1452        releasePointer(_env, _lengthArray, type, JNI_TRUE);
1453    }
1454    if (_sizeArray) {
1455        releasePointer(_env, _sizeArray, size, JNI_TRUE);
1456    }
1457    if (_typeArray) {
1458        releasePointer(_env, _typeArray, length, JNI_TRUE);
1459    }
1460}
1461
1462/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
1463static void
1464android_glGetActiveUniform__III_3II_3II_3II_3BI
1465  (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) {
1466    jint _exception = 0;
1467    const char * _exceptionType;
1468    const char * _exceptionMessage;
1469    GLsizei *length_base = (GLsizei *) 0;
1470    jint _lengthRemaining;
1471    GLsizei *length = (GLsizei *) 0;
1472    GLint *size_base = (GLint *) 0;
1473    jint _sizeRemaining;
1474    GLint *size = (GLint *) 0;
1475    GLenum *type_base = (GLenum *) 0;
1476    jint _typeRemaining;
1477    GLenum *type = (GLenum *) 0;
1478    char *name_base = (char *) 0;
1479    jint _nameRemaining;
1480    char *name = (char *) 0;
1481
1482    if (!length_ref) {
1483        _exception = 1;
1484        _exceptionType = "java/lang/IllegalArgumentException";
1485        _exceptionMessage = "length == null";
1486        goto exit;
1487    }
1488    if (lengthOffset < 0) {
1489        _exception = 1;
1490        _exceptionType = "java/lang/IllegalArgumentException";
1491        _exceptionMessage = "lengthOffset < 0";
1492        goto exit;
1493    }
1494    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
1495    length_base = (GLsizei *)
1496        _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
1497    length = length_base + lengthOffset;
1498
1499    if (!size_ref) {
1500        _exception = 1;
1501        _exceptionType = "java/lang/IllegalArgumentException";
1502        _exceptionMessage = "size == null";
1503        goto exit;
1504    }
1505    if (sizeOffset < 0) {
1506        _exception = 1;
1507        _exceptionType = "java/lang/IllegalArgumentException";
1508        _exceptionMessage = "sizeOffset < 0";
1509        goto exit;
1510    }
1511    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
1512    size_base = (GLint *)
1513        _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
1514    size = size_base + sizeOffset;
1515
1516    if (!type_ref) {
1517        _exception = 1;
1518        _exceptionType = "java/lang/IllegalArgumentException";
1519        _exceptionMessage = "type == null";
1520        goto exit;
1521    }
1522    if (typeOffset < 0) {
1523        _exception = 1;
1524        _exceptionType = "java/lang/IllegalArgumentException";
1525        _exceptionMessage = "typeOffset < 0";
1526        goto exit;
1527    }
1528    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
1529    type_base = (GLenum *)
1530        _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
1531    type = type_base + typeOffset;
1532
1533    if (!name_ref) {
1534        _exception = 1;
1535        _exceptionType = "java/lang/IllegalArgumentException";
1536        _exceptionMessage = "name == null";
1537        goto exit;
1538    }
1539    if (nameOffset < 0) {
1540        _exception = 1;
1541        _exceptionType = "java/lang/IllegalArgumentException";
1542        _exceptionMessage = "nameOffset < 0";
1543        goto exit;
1544    }
1545    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
1546    name_base = (char *)
1547        _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
1548    name = name_base + nameOffset;
1549
1550    glGetActiveUniform(
1551        (GLuint)program,
1552        (GLuint)index,
1553        (GLsizei)bufsize,
1554        (GLsizei *)length,
1555        (GLint *)size,
1556        (GLenum *)type,
1557        (char *)name
1558    );
1559
1560exit:
1561    if (name_base) {
1562        _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
1563            _exception ? JNI_ABORT: 0);
1564    }
1565    if (type_base) {
1566        _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
1567            _exception ? JNI_ABORT: 0);
1568    }
1569    if (size_base) {
1570        _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
1571            _exception ? JNI_ABORT: 0);
1572    }
1573    if (length_base) {
1574        _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
1575            _exception ? JNI_ABORT: 0);
1576    }
1577    if (_exception) {
1578        jniThrowException(_env, _exceptionType, _exceptionMessage);
1579    }
1580}
1581
1582/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
1583static void
1584android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
1585  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
1586    jarray _lengthArray = (jarray) 0;
1587    jarray _sizeArray = (jarray) 0;
1588    jarray _typeArray = (jarray) 0;
1589    jint _lengthRemaining;
1590    GLsizei *length = (GLsizei *) 0;
1591    jint _sizeRemaining;
1592    GLint *size = (GLint *) 0;
1593    jint _typeRemaining;
1594    GLenum *type = (GLenum *) 0;
1595
1596    length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining);
1597    size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining);
1598    type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining);
1599    glGetActiveUniform(
1600        (GLuint)program,
1601        (GLuint)index,
1602        (GLsizei)bufsize,
1603        (GLsizei *)length,
1604        (GLint *)size,
1605        (GLenum *)type,
1606        (char *)name
1607    );
1608    if (_lengthArray) {
1609        releasePointer(_env, _lengthArray, type, JNI_TRUE);
1610    }
1611    if (_sizeArray) {
1612        releasePointer(_env, _sizeArray, size, JNI_TRUE);
1613    }
1614    if (_typeArray) {
1615        releasePointer(_env, _typeArray, length, JNI_TRUE);
1616    }
1617}
1618
1619/* void glGetAttachedShaders ( GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders ) */
1620static void
1621android_glGetAttachedShaders__II_3II_3II
1622  (JNIEnv *_env, jobject _this, jint program, jint maxcount, jintArray count_ref, jint countOffset, jintArray shaders_ref, jint shadersOffset) {
1623    jint _exception = 0;
1624    const char * _exceptionType;
1625    const char * _exceptionMessage;
1626    GLsizei *count_base = (GLsizei *) 0;
1627    jint _countRemaining;
1628    GLsizei *count = (GLsizei *) 0;
1629    GLuint *shaders_base = (GLuint *) 0;
1630    jint _shadersRemaining;
1631    GLuint *shaders = (GLuint *) 0;
1632
1633    if (!count_ref) {
1634        _exception = 1;
1635        _exceptionType = "java/lang/IllegalArgumentException";
1636        _exceptionMessage = "count == null";
1637        goto exit;
1638    }
1639    if (countOffset < 0) {
1640        _exception = 1;
1641        _exceptionType = "java/lang/IllegalArgumentException";
1642        _exceptionMessage = "countOffset < 0";
1643        goto exit;
1644    }
1645    _countRemaining = _env->GetArrayLength(count_ref) - countOffset;
1646    count_base = (GLsizei *)
1647        _env->GetPrimitiveArrayCritical(count_ref, (jboolean *)0);
1648    count = count_base + countOffset;
1649
1650    if (!shaders_ref) {
1651        _exception = 1;
1652        _exceptionType = "java/lang/IllegalArgumentException";
1653        _exceptionMessage = "shaders == null";
1654        goto exit;
1655    }
1656    if (shadersOffset < 0) {
1657        _exception = 1;
1658        _exceptionType = "java/lang/IllegalArgumentException";
1659        _exceptionMessage = "shadersOffset < 0";
1660        goto exit;
1661    }
1662    _shadersRemaining = _env->GetArrayLength(shaders_ref) - shadersOffset;
1663    shaders_base = (GLuint *)
1664        _env->GetPrimitiveArrayCritical(shaders_ref, (jboolean *)0);
1665    shaders = shaders_base + shadersOffset;
1666
1667    glGetAttachedShaders(
1668        (GLuint)program,
1669        (GLsizei)maxcount,
1670        (GLsizei *)count,
1671        (GLuint *)shaders
1672    );
1673
1674exit:
1675    if (shaders_base) {
1676        _env->ReleasePrimitiveArrayCritical(shaders_ref, shaders_base,
1677            _exception ? JNI_ABORT: 0);
1678    }
1679    if (count_base) {
1680        _env->ReleasePrimitiveArrayCritical(count_ref, count_base,
1681            _exception ? JNI_ABORT: 0);
1682    }
1683    if (_exception) {
1684        jniThrowException(_env, _exceptionType, _exceptionMessage);
1685    }
1686}
1687
1688/* void glGetAttachedShaders ( GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders ) */
1689static void
1690android_glGetAttachedShaders__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
1691  (JNIEnv *_env, jobject _this, jint program, jint maxcount, jobject count_buf, jobject shaders_buf) {
1692    jarray _countArray = (jarray) 0;
1693    jarray _shadersArray = (jarray) 0;
1694    jint _countRemaining;
1695    GLsizei *count = (GLsizei *) 0;
1696    jint _shadersRemaining;
1697    GLuint *shaders = (GLuint *) 0;
1698
1699    count = (GLsizei *)getPointer(_env, count_buf, &_countArray, &_countRemaining);
1700    shaders = (GLuint *)getPointer(_env, shaders_buf, &_shadersArray, &_shadersRemaining);
1701    glGetAttachedShaders(
1702        (GLuint)program,
1703        (GLsizei)maxcount,
1704        (GLsizei *)count,
1705        (GLuint *)shaders
1706    );
1707    if (_countArray) {
1708        releasePointer(_env, _countArray, shaders, JNI_TRUE);
1709    }
1710    if (_shadersArray) {
1711        releasePointer(_env, _shadersArray, count, JNI_TRUE);
1712    }
1713}
1714
1715/* int glGetAttribLocation ( GLuint program, const char *name ) */
1716static jint
1717android_glGetAttribLocation__ILjava_lang_String_2
1718  (JNIEnv *_env, jobject _this, jint program, jstring name) {
1719    jint _exception = 0;
1720    const char * _exceptionType;
1721    const char * _exceptionMessage;
1722    int _returnValue = 0;
1723    const char* _nativename = 0;
1724
1725    if (!name) {
1726        _exceptionType = "java/lang/IllegalArgumentException";
1727        _exceptionMessage = "name == null";
1728        goto exit;
1729    }
1730    _nativename = _env->GetStringUTFChars(name, 0);
1731
1732    _returnValue = glGetAttribLocation(
1733        (GLuint)program,
1734        (char *)_nativename
1735    );
1736
1737exit:
1738    if (_nativename) {
1739        _env->ReleaseStringUTFChars(name, _nativename);
1740    }
1741
1742    if (_exception) {
1743        jniThrowException(_env, _exceptionType, _exceptionMessage);
1744    }
1745    return _returnValue;
1746}
1747
1748/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
1749static void
1750android_glGetBooleanv__I_3ZI
1751  (JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
1752    jint _exception = 0;
1753    const char * _exceptionType;
1754    const char * _exceptionMessage;
1755    GLboolean *params_base = (GLboolean *) 0;
1756    jint _remaining;
1757    GLboolean *params = (GLboolean *) 0;
1758
1759    if (!params_ref) {
1760        _exception = 1;
1761        _exceptionType = "java/lang/IllegalArgumentException";
1762        _exceptionMessage = "params == null";
1763        goto exit;
1764    }
1765    if (offset < 0) {
1766        _exception = 1;
1767        _exceptionType = "java/lang/IllegalArgumentException";
1768        _exceptionMessage = "offset < 0";
1769        goto exit;
1770    }
1771    _remaining = _env->GetArrayLength(params_ref) - offset;
1772    params_base = (GLboolean *)
1773        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
1774    params = params_base + offset;
1775
1776    glGetBooleanv(
1777        (GLenum)pname,
1778        (GLboolean *)params
1779    );
1780
1781exit:
1782    if (params_base) {
1783        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
1784            _exception ? JNI_ABORT: 0);
1785    }
1786    if (_exception) {
1787        jniThrowException(_env, _exceptionType, _exceptionMessage);
1788    }
1789}
1790
1791/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
1792static void
1793android_glGetBooleanv__ILjava_nio_IntBuffer_2
1794  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
1795    jarray _array = (jarray) 0;
1796    jint _remaining;
1797    GLboolean *params = (GLboolean *) 0;
1798
1799    params = (GLboolean *)getPointer(_env, params_buf, &_array, &_remaining);
1800    glGetBooleanv(
1801        (GLenum)pname,
1802        (GLboolean *)params
1803    );
1804    if (_array) {
1805        releasePointer(_env, _array, params, JNI_TRUE);
1806    }
1807}
1808
1809/* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
1810static void
1811android_glGetBufferParameteriv__II_3II
1812  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
1813    jint _exception = 0;
1814    const char * _exceptionType;
1815    const char * _exceptionMessage;
1816    GLint *params_base = (GLint *) 0;
1817    jint _remaining;
1818    GLint *params = (GLint *) 0;
1819
1820    if (!params_ref) {
1821        _exception = 1;
1822        _exceptionType = "java/lang/IllegalArgumentException";
1823        _exceptionMessage = "params == null";
1824        goto exit;
1825    }
1826    if (offset < 0) {
1827        _exception = 1;
1828        _exceptionType = "java/lang/IllegalArgumentException";
1829        _exceptionMessage = "offset < 0";
1830        goto exit;
1831    }
1832    _remaining = _env->GetArrayLength(params_ref) - offset;
1833    if (_remaining < 1) {
1834        _exception = 1;
1835        _exceptionType = "java/lang/IllegalArgumentException";
1836        _exceptionMessage = "length - offset < 1 < needed";
1837        goto exit;
1838    }
1839    params_base = (GLint *)
1840        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
1841    params = params_base + offset;
1842
1843    glGetBufferParameteriv(
1844        (GLenum)target,
1845        (GLenum)pname,
1846        (GLint *)params
1847    );
1848
1849exit:
1850    if (params_base) {
1851        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
1852            _exception ? JNI_ABORT: 0);
1853    }
1854    if (_exception) {
1855        jniThrowException(_env, _exceptionType, _exceptionMessage);
1856    }
1857}
1858
1859/* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
1860static void
1861android_glGetBufferParameteriv__IILjava_nio_IntBuffer_2
1862  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
1863    jint _exception = 0;
1864    const char * _exceptionType;
1865    const char * _exceptionMessage;
1866    jarray _array = (jarray) 0;
1867    jint _remaining;
1868    GLint *params = (GLint *) 0;
1869
1870    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
1871    if (_remaining < 1) {
1872        _exception = 1;
1873        _exceptionType = "java/lang/IllegalArgumentException";
1874        _exceptionMessage = "remaining() < 1 < needed";
1875        goto exit;
1876    }
1877    glGetBufferParameteriv(
1878        (GLenum)target,
1879        (GLenum)pname,
1880        (GLint *)params
1881    );
1882
1883exit:
1884    if (_array) {
1885        releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
1886    }
1887    if (_exception) {
1888        jniThrowException(_env, _exceptionType, _exceptionMessage);
1889    }
1890}
1891
1892/* GLenum glGetError ( void ) */
1893static jint
1894android_glGetError__
1895  (JNIEnv *_env, jobject _this) {
1896    GLenum _returnValue;
1897    _returnValue = glGetError();
1898    return _returnValue;
1899}
1900
1901/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
1902static void
1903android_glGetFloatv__I_3FI
1904  (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
1905    jint _exception = 0;
1906    const char * _exceptionType;
1907    const char * _exceptionMessage;
1908    GLfloat *params_base = (GLfloat *) 0;
1909    jint _remaining;
1910    GLfloat *params = (GLfloat *) 0;
1911
1912    if (!params_ref) {
1913        _exception = 1;
1914        _exceptionType = "java/lang/IllegalArgumentException";
1915        _exceptionMessage = "params == null";
1916        goto exit;
1917    }
1918    if (offset < 0) {
1919        _exception = 1;
1920        _exceptionType = "java/lang/IllegalArgumentException";
1921        _exceptionMessage = "offset < 0";
1922        goto exit;
1923    }
1924    _remaining = _env->GetArrayLength(params_ref) - offset;
1925    params_base = (GLfloat *)
1926        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
1927    params = params_base + offset;
1928
1929    glGetFloatv(
1930        (GLenum)pname,
1931        (GLfloat *)params
1932    );
1933
1934exit:
1935    if (params_base) {
1936        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
1937            _exception ? JNI_ABORT: 0);
1938    }
1939    if (_exception) {
1940        jniThrowException(_env, _exceptionType, _exceptionMessage);
1941    }
1942}
1943
1944/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
1945static void
1946android_glGetFloatv__ILjava_nio_FloatBuffer_2
1947  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
1948    jarray _array = (jarray) 0;
1949    jint _remaining;
1950    GLfloat *params = (GLfloat *) 0;
1951
1952    params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
1953    glGetFloatv(
1954        (GLenum)pname,
1955        (GLfloat *)params
1956    );
1957    if (_array) {
1958        releasePointer(_env, _array, params, JNI_TRUE);
1959    }
1960}
1961
1962/* void glGetFramebufferAttachmentParameteriv ( GLenum target, GLenum attachment, GLenum pname, GLint *params ) */
1963static void
1964android_glGetFramebufferAttachmentParameteriv__III_3II
1965  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint pname, jintArray params_ref, jint offset) {
1966    jint _exception = 0;
1967    const char * _exceptionType;
1968    const char * _exceptionMessage;
1969    GLint *params_base = (GLint *) 0;
1970    jint _remaining;
1971    GLint *params = (GLint *) 0;
1972
1973    if (!params_ref) {
1974        _exception = 1;
1975        _exceptionType = "java/lang/IllegalArgumentException";
1976        _exceptionMessage = "params == null";
1977        goto exit;
1978    }
1979    if (offset < 0) {
1980        _exception = 1;
1981        _exceptionType = "java/lang/IllegalArgumentException";
1982        _exceptionMessage = "offset < 0";
1983        goto exit;
1984    }
1985    _remaining = _env->GetArrayLength(params_ref) - offset;
1986    params_base = (GLint *)
1987        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
1988    params = params_base + offset;
1989
1990    glGetFramebufferAttachmentParameteriv(
1991        (GLenum)target,
1992        (GLenum)attachment,
1993        (GLenum)pname,
1994        (GLint *)params
1995    );
1996
1997exit:
1998    if (params_base) {
1999        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2000            _exception ? JNI_ABORT: 0);
2001    }
2002    if (_exception) {
2003        jniThrowException(_env, _exceptionType, _exceptionMessage);
2004    }
2005}
2006
2007/* void glGetFramebufferAttachmentParameteriv ( GLenum target, GLenum attachment, GLenum pname, GLint *params ) */
2008static void
2009android_glGetFramebufferAttachmentParameteriv__IIILjava_nio_IntBuffer_2
2010  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint pname, jobject params_buf) {
2011    jarray _array = (jarray) 0;
2012    jint _remaining;
2013    GLint *params = (GLint *) 0;
2014
2015    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
2016    glGetFramebufferAttachmentParameteriv(
2017        (GLenum)target,
2018        (GLenum)attachment,
2019        (GLenum)pname,
2020        (GLint *)params
2021    );
2022    if (_array) {
2023        releasePointer(_env, _array, params, JNI_TRUE);
2024    }
2025}
2026
2027/* void glGetIntegerv ( GLenum pname, GLint *params ) */
2028static void
2029android_glGetIntegerv__I_3II
2030  (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
2031    jint _exception = 0;
2032    const char * _exceptionType;
2033    const char * _exceptionMessage;
2034    GLint *params_base = (GLint *) 0;
2035    jint _remaining;
2036    GLint *params = (GLint *) 0;
2037
2038    if (!params_ref) {
2039        _exception = 1;
2040        _exceptionType = "java/lang/IllegalArgumentException";
2041        _exceptionMessage = "params == null";
2042        goto exit;
2043    }
2044    if (offset < 0) {
2045        _exception = 1;
2046        _exceptionType = "java/lang/IllegalArgumentException";
2047        _exceptionMessage = "offset < 0";
2048        goto exit;
2049    }
2050    _remaining = _env->GetArrayLength(params_ref) - offset;
2051    int _needed;
2052    switch (pname) {
2053#if defined(GL_ALPHA_BITS)
2054        case GL_ALPHA_BITS:
2055#endif // defined(GL_ALPHA_BITS)
2056#if defined(GL_ALPHA_TEST_FUNC)
2057        case GL_ALPHA_TEST_FUNC:
2058#endif // defined(GL_ALPHA_TEST_FUNC)
2059#if defined(GL_ALPHA_TEST_REF)
2060        case GL_ALPHA_TEST_REF:
2061#endif // defined(GL_ALPHA_TEST_REF)
2062#if defined(GL_BLEND_DST)
2063        case GL_BLEND_DST:
2064#endif // defined(GL_BLEND_DST)
2065#if defined(GL_BLUE_BITS)
2066        case GL_BLUE_BITS:
2067#endif // defined(GL_BLUE_BITS)
2068#if defined(GL_COLOR_ARRAY_BUFFER_BINDING)
2069        case GL_COLOR_ARRAY_BUFFER_BINDING:
2070#endif // defined(GL_COLOR_ARRAY_BUFFER_BINDING)
2071#if defined(GL_COLOR_ARRAY_SIZE)
2072        case GL_COLOR_ARRAY_SIZE:
2073#endif // defined(GL_COLOR_ARRAY_SIZE)
2074#if defined(GL_COLOR_ARRAY_STRIDE)
2075        case GL_COLOR_ARRAY_STRIDE:
2076#endif // defined(GL_COLOR_ARRAY_STRIDE)
2077#if defined(GL_COLOR_ARRAY_TYPE)
2078        case GL_COLOR_ARRAY_TYPE:
2079#endif // defined(GL_COLOR_ARRAY_TYPE)
2080#if defined(GL_CULL_FACE)
2081        case GL_CULL_FACE:
2082#endif // defined(GL_CULL_FACE)
2083#if defined(GL_DEPTH_BITS)
2084        case GL_DEPTH_BITS:
2085#endif // defined(GL_DEPTH_BITS)
2086#if defined(GL_DEPTH_CLEAR_VALUE)
2087        case GL_DEPTH_CLEAR_VALUE:
2088#endif // defined(GL_DEPTH_CLEAR_VALUE)
2089#if defined(GL_DEPTH_FUNC)
2090        case GL_DEPTH_FUNC:
2091#endif // defined(GL_DEPTH_FUNC)
2092#if defined(GL_DEPTH_WRITEMASK)
2093        case GL_DEPTH_WRITEMASK:
2094#endif // defined(GL_DEPTH_WRITEMASK)
2095#if defined(GL_FOG_DENSITY)
2096        case GL_FOG_DENSITY:
2097#endif // defined(GL_FOG_DENSITY)
2098#if defined(GL_FOG_END)
2099        case GL_FOG_END:
2100#endif // defined(GL_FOG_END)
2101#if defined(GL_FOG_MODE)
2102        case GL_FOG_MODE:
2103#endif // defined(GL_FOG_MODE)
2104#if defined(GL_FOG_START)
2105        case GL_FOG_START:
2106#endif // defined(GL_FOG_START)
2107#if defined(GL_FRONT_FACE)
2108        case GL_FRONT_FACE:
2109#endif // defined(GL_FRONT_FACE)
2110#if defined(GL_GREEN_BITS)
2111        case GL_GREEN_BITS:
2112#endif // defined(GL_GREEN_BITS)
2113#if defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
2114        case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
2115#endif // defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
2116#if defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
2117        case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
2118#endif // defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
2119#if defined(GL_LIGHT_MODEL_COLOR_CONTROL)
2120        case GL_LIGHT_MODEL_COLOR_CONTROL:
2121#endif // defined(GL_LIGHT_MODEL_COLOR_CONTROL)
2122#if defined(GL_LIGHT_MODEL_LOCAL_VIEWER)
2123        case GL_LIGHT_MODEL_LOCAL_VIEWER:
2124#endif // defined(GL_LIGHT_MODEL_LOCAL_VIEWER)
2125#if defined(GL_LIGHT_MODEL_TWO_SIDE)
2126        case GL_LIGHT_MODEL_TWO_SIDE:
2127#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
2128#if defined(GL_LINE_SMOOTH_HINT)
2129        case GL_LINE_SMOOTH_HINT:
2130#endif // defined(GL_LINE_SMOOTH_HINT)
2131#if defined(GL_LINE_WIDTH)
2132        case GL_LINE_WIDTH:
2133#endif // defined(GL_LINE_WIDTH)
2134#if defined(GL_LOGIC_OP_MODE)
2135        case GL_LOGIC_OP_MODE:
2136#endif // defined(GL_LOGIC_OP_MODE)
2137#if defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
2138        case GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES:
2139#endif // defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
2140#if defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
2141        case GL_MATRIX_INDEX_ARRAY_SIZE_OES:
2142#endif // defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
2143#if defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
2144        case GL_MATRIX_INDEX_ARRAY_STRIDE_OES:
2145#endif // defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
2146#if defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
2147        case GL_MATRIX_INDEX_ARRAY_TYPE_OES:
2148#endif // defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
2149#if defined(GL_MATRIX_MODE)
2150        case GL_MATRIX_MODE:
2151#endif // defined(GL_MATRIX_MODE)
2152#if defined(GL_MAX_CLIP_PLANES)
2153        case GL_MAX_CLIP_PLANES:
2154#endif // defined(GL_MAX_CLIP_PLANES)
2155#if defined(GL_MAX_ELEMENTS_INDICES)
2156        case GL_MAX_ELEMENTS_INDICES:
2157#endif // defined(GL_MAX_ELEMENTS_INDICES)
2158#if defined(GL_MAX_ELEMENTS_VERTICES)
2159        case GL_MAX_ELEMENTS_VERTICES:
2160#endif // defined(GL_MAX_ELEMENTS_VERTICES)
2161#if defined(GL_MAX_LIGHTS)
2162        case GL_MAX_LIGHTS:
2163#endif // defined(GL_MAX_LIGHTS)
2164#if defined(GL_MAX_MODELVIEW_STACK_DEPTH)
2165        case GL_MAX_MODELVIEW_STACK_DEPTH:
2166#endif // defined(GL_MAX_MODELVIEW_STACK_DEPTH)
2167#if defined(GL_MAX_PALETTE_MATRICES_OES)
2168        case GL_MAX_PALETTE_MATRICES_OES:
2169#endif // defined(GL_MAX_PALETTE_MATRICES_OES)
2170#if defined(GL_MAX_PROJECTION_STACK_DEPTH)
2171        case GL_MAX_PROJECTION_STACK_DEPTH:
2172#endif // defined(GL_MAX_PROJECTION_STACK_DEPTH)
2173#if defined(GL_MAX_TEXTURE_SIZE)
2174        case GL_MAX_TEXTURE_SIZE:
2175#endif // defined(GL_MAX_TEXTURE_SIZE)
2176#if defined(GL_MAX_TEXTURE_STACK_DEPTH)
2177        case GL_MAX_TEXTURE_STACK_DEPTH:
2178#endif // defined(GL_MAX_TEXTURE_STACK_DEPTH)
2179#if defined(GL_MAX_TEXTURE_UNITS)
2180        case GL_MAX_TEXTURE_UNITS:
2181#endif // defined(GL_MAX_TEXTURE_UNITS)
2182#if defined(GL_MAX_VERTEX_UNITS_OES)
2183        case GL_MAX_VERTEX_UNITS_OES:
2184#endif // defined(GL_MAX_VERTEX_UNITS_OES)
2185#if defined(GL_MODELVIEW_STACK_DEPTH)
2186        case GL_MODELVIEW_STACK_DEPTH:
2187#endif // defined(GL_MODELVIEW_STACK_DEPTH)
2188#if defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
2189        case GL_NORMAL_ARRAY_BUFFER_BINDING:
2190#endif // defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
2191#if defined(GL_NORMAL_ARRAY_STRIDE)
2192        case GL_NORMAL_ARRAY_STRIDE:
2193#endif // defined(GL_NORMAL_ARRAY_STRIDE)
2194#if defined(GL_NORMAL_ARRAY_TYPE)
2195        case GL_NORMAL_ARRAY_TYPE:
2196#endif // defined(GL_NORMAL_ARRAY_TYPE)
2197#if defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
2198        case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
2199#endif // defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
2200#if defined(GL_PACK_ALIGNMENT)
2201        case GL_PACK_ALIGNMENT:
2202#endif // defined(GL_PACK_ALIGNMENT)
2203#if defined(GL_PERSPECTIVE_CORRECTION_HINT)
2204        case GL_PERSPECTIVE_CORRECTION_HINT:
2205#endif // defined(GL_PERSPECTIVE_CORRECTION_HINT)
2206#if defined(GL_POINT_SIZE)
2207        case GL_POINT_SIZE:
2208#endif // defined(GL_POINT_SIZE)
2209#if defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
2210        case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
2211#endif // defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
2212#if defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
2213        case GL_POINT_SIZE_ARRAY_STRIDE_OES:
2214#endif // defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
2215#if defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
2216        case GL_POINT_SIZE_ARRAY_TYPE_OES:
2217#endif // defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
2218#if defined(GL_POINT_SMOOTH_HINT)
2219        case GL_POINT_SMOOTH_HINT:
2220#endif // defined(GL_POINT_SMOOTH_HINT)
2221#if defined(GL_POLYGON_OFFSET_FACTOR)
2222        case GL_POLYGON_OFFSET_FACTOR:
2223#endif // defined(GL_POLYGON_OFFSET_FACTOR)
2224#if defined(GL_POLYGON_OFFSET_UNITS)
2225        case GL_POLYGON_OFFSET_UNITS:
2226#endif // defined(GL_POLYGON_OFFSET_UNITS)
2227#if defined(GL_PROJECTION_STACK_DEPTH)
2228        case GL_PROJECTION_STACK_DEPTH:
2229#endif // defined(GL_PROJECTION_STACK_DEPTH)
2230#if defined(GL_RED_BITS)
2231        case GL_RED_BITS:
2232#endif // defined(GL_RED_BITS)
2233#if defined(GL_SHADE_MODEL)
2234        case GL_SHADE_MODEL:
2235#endif // defined(GL_SHADE_MODEL)
2236#if defined(GL_STENCIL_BITS)
2237        case GL_STENCIL_BITS:
2238#endif // defined(GL_STENCIL_BITS)
2239#if defined(GL_STENCIL_CLEAR_VALUE)
2240        case GL_STENCIL_CLEAR_VALUE:
2241#endif // defined(GL_STENCIL_CLEAR_VALUE)
2242#if defined(GL_STENCIL_FAIL)
2243        case GL_STENCIL_FAIL:
2244#endif // defined(GL_STENCIL_FAIL)
2245#if defined(GL_STENCIL_FUNC)
2246        case GL_STENCIL_FUNC:
2247#endif // defined(GL_STENCIL_FUNC)
2248#if defined(GL_STENCIL_PASS_DEPTH_FAIL)
2249        case GL_STENCIL_PASS_DEPTH_FAIL:
2250#endif // defined(GL_STENCIL_PASS_DEPTH_FAIL)
2251#if defined(GL_STENCIL_PASS_DEPTH_PASS)
2252        case GL_STENCIL_PASS_DEPTH_PASS:
2253#endif // defined(GL_STENCIL_PASS_DEPTH_PASS)
2254#if defined(GL_STENCIL_REF)
2255        case GL_STENCIL_REF:
2256#endif // defined(GL_STENCIL_REF)
2257#if defined(GL_STENCIL_VALUE_MASK)
2258        case GL_STENCIL_VALUE_MASK:
2259#endif // defined(GL_STENCIL_VALUE_MASK)
2260#if defined(GL_STENCIL_WRITEMASK)
2261        case GL_STENCIL_WRITEMASK:
2262#endif // defined(GL_STENCIL_WRITEMASK)
2263#if defined(GL_SUBPIXEL_BITS)
2264        case GL_SUBPIXEL_BITS:
2265#endif // defined(GL_SUBPIXEL_BITS)
2266#if defined(GL_TEXTURE_BINDING_2D)
2267        case GL_TEXTURE_BINDING_2D:
2268#endif // defined(GL_TEXTURE_BINDING_2D)
2269#if defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
2270        case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
2271#endif // defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
2272#if defined(GL_TEXTURE_COORD_ARRAY_SIZE)
2273        case GL_TEXTURE_COORD_ARRAY_SIZE:
2274#endif // defined(GL_TEXTURE_COORD_ARRAY_SIZE)
2275#if defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
2276        case GL_TEXTURE_COORD_ARRAY_STRIDE:
2277#endif // defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
2278#if defined(GL_TEXTURE_COORD_ARRAY_TYPE)
2279        case GL_TEXTURE_COORD_ARRAY_TYPE:
2280#endif // defined(GL_TEXTURE_COORD_ARRAY_TYPE)
2281#if defined(GL_TEXTURE_STACK_DEPTH)
2282        case GL_TEXTURE_STACK_DEPTH:
2283#endif // defined(GL_TEXTURE_STACK_DEPTH)
2284#if defined(GL_UNPACK_ALIGNMENT)
2285        case GL_UNPACK_ALIGNMENT:
2286#endif // defined(GL_UNPACK_ALIGNMENT)
2287#if defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
2288        case GL_VERTEX_ARRAY_BUFFER_BINDING:
2289#endif // defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
2290#if defined(GL_VERTEX_ARRAY_SIZE)
2291        case GL_VERTEX_ARRAY_SIZE:
2292#endif // defined(GL_VERTEX_ARRAY_SIZE)
2293#if defined(GL_VERTEX_ARRAY_STRIDE)
2294        case GL_VERTEX_ARRAY_STRIDE:
2295#endif // defined(GL_VERTEX_ARRAY_STRIDE)
2296#if defined(GL_VERTEX_ARRAY_TYPE)
2297        case GL_VERTEX_ARRAY_TYPE:
2298#endif // defined(GL_VERTEX_ARRAY_TYPE)
2299#if defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
2300        case GL_WEIGHT_ARRAY_BUFFER_BINDING_OES:
2301#endif // defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
2302#if defined(GL_WEIGHT_ARRAY_SIZE_OES)
2303        case GL_WEIGHT_ARRAY_SIZE_OES:
2304#endif // defined(GL_WEIGHT_ARRAY_SIZE_OES)
2305#if defined(GL_WEIGHT_ARRAY_STRIDE_OES)
2306        case GL_WEIGHT_ARRAY_STRIDE_OES:
2307#endif // defined(GL_WEIGHT_ARRAY_STRIDE_OES)
2308#if defined(GL_WEIGHT_ARRAY_TYPE_OES)
2309        case GL_WEIGHT_ARRAY_TYPE_OES:
2310#endif // defined(GL_WEIGHT_ARRAY_TYPE_OES)
2311            _needed = 1;
2312            break;
2313#if defined(GL_ALIASED_POINT_SIZE_RANGE)
2314        case GL_ALIASED_POINT_SIZE_RANGE:
2315#endif // defined(GL_ALIASED_POINT_SIZE_RANGE)
2316#if defined(GL_ALIASED_LINE_WIDTH_RANGE)
2317        case GL_ALIASED_LINE_WIDTH_RANGE:
2318#endif // defined(GL_ALIASED_LINE_WIDTH_RANGE)
2319#if defined(GL_DEPTH_RANGE)
2320        case GL_DEPTH_RANGE:
2321#endif // defined(GL_DEPTH_RANGE)
2322#if defined(GL_MAX_VIEWPORT_DIMS)
2323        case GL_MAX_VIEWPORT_DIMS:
2324#endif // defined(GL_MAX_VIEWPORT_DIMS)
2325#if defined(GL_SMOOTH_LINE_WIDTH_RANGE)
2326        case GL_SMOOTH_LINE_WIDTH_RANGE:
2327#endif // defined(GL_SMOOTH_LINE_WIDTH_RANGE)
2328#if defined(GL_SMOOTH_POINT_SIZE_RANGE)
2329        case GL_SMOOTH_POINT_SIZE_RANGE:
2330#endif // defined(GL_SMOOTH_POINT_SIZE_RANGE)
2331            _needed = 2;
2332            break;
2333#if defined(GL_COLOR_CLEAR_VALUE)
2334        case GL_COLOR_CLEAR_VALUE:
2335#endif // defined(GL_COLOR_CLEAR_VALUE)
2336#if defined(GL_COLOR_WRITEMASK)
2337        case GL_COLOR_WRITEMASK:
2338#endif // defined(GL_COLOR_WRITEMASK)
2339#if defined(GL_FOG_COLOR)
2340        case GL_FOG_COLOR:
2341#endif // defined(GL_FOG_COLOR)
2342#if defined(GL_LIGHT_MODEL_AMBIENT)
2343        case GL_LIGHT_MODEL_AMBIENT:
2344#endif // defined(GL_LIGHT_MODEL_AMBIENT)
2345#if defined(GL_SCISSOR_BOX)
2346        case GL_SCISSOR_BOX:
2347#endif // defined(GL_SCISSOR_BOX)
2348#if defined(GL_VIEWPORT)
2349        case GL_VIEWPORT:
2350#endif // defined(GL_VIEWPORT)
2351            _needed = 4;
2352            break;
2353#if defined(GL_MODELVIEW_MATRIX)
2354        case GL_MODELVIEW_MATRIX:
2355#endif // defined(GL_MODELVIEW_MATRIX)
2356#if defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
2357        case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES:
2358#endif // defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
2359#if defined(GL_PROJECTION_MATRIX)
2360        case GL_PROJECTION_MATRIX:
2361#endif // defined(GL_PROJECTION_MATRIX)
2362#if defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
2363        case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES:
2364#endif // defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
2365#if defined(GL_TEXTURE_MATRIX)
2366        case GL_TEXTURE_MATRIX:
2367#endif // defined(GL_TEXTURE_MATRIX)
2368#if defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
2369        case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES:
2370#endif // defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
2371            _needed = 16;
2372            break;
2373#if defined(GL_COMPRESSED_TEXTURE_FORMATS)
2374        case GL_COMPRESSED_TEXTURE_FORMATS:
2375#endif // defined(GL_COMPRESSED_TEXTURE_FORMATS)
2376            _needed = getNumCompressedTextureFormats();
2377            break;
2378        default:
2379            _needed = 0;
2380            break;
2381    }
2382    if (_remaining < _needed) {
2383        _exception = 1;
2384        _exceptionType = "java/lang/IllegalArgumentException";
2385        _exceptionMessage = "length - offset < needed";
2386        goto exit;
2387    }
2388    params_base = (GLint *)
2389        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2390    params = params_base + offset;
2391
2392    glGetIntegerv(
2393        (GLenum)pname,
2394        (GLint *)params
2395    );
2396
2397exit:
2398    if (params_base) {
2399        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2400            _exception ? JNI_ABORT: 0);
2401    }
2402    if (_exception) {
2403        jniThrowException(_env, _exceptionType, _exceptionMessage);
2404    }
2405}
2406
2407/* void glGetIntegerv ( GLenum pname, GLint *params ) */
2408static void
2409android_glGetIntegerv__ILjava_nio_IntBuffer_2
2410  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
2411    jint _exception = 0;
2412    const char * _exceptionType;
2413    const char * _exceptionMessage;
2414    jarray _array = (jarray) 0;
2415    jint _remaining;
2416    GLint *params = (GLint *) 0;
2417
2418    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
2419    int _needed;
2420    switch (pname) {
2421#if defined(GL_ALPHA_BITS)
2422        case GL_ALPHA_BITS:
2423#endif // defined(GL_ALPHA_BITS)
2424#if defined(GL_ALPHA_TEST_FUNC)
2425        case GL_ALPHA_TEST_FUNC:
2426#endif // defined(GL_ALPHA_TEST_FUNC)
2427#if defined(GL_ALPHA_TEST_REF)
2428        case GL_ALPHA_TEST_REF:
2429#endif // defined(GL_ALPHA_TEST_REF)
2430#if defined(GL_BLEND_DST)
2431        case GL_BLEND_DST:
2432#endif // defined(GL_BLEND_DST)
2433#if defined(GL_BLUE_BITS)
2434        case GL_BLUE_BITS:
2435#endif // defined(GL_BLUE_BITS)
2436#if defined(GL_COLOR_ARRAY_BUFFER_BINDING)
2437        case GL_COLOR_ARRAY_BUFFER_BINDING:
2438#endif // defined(GL_COLOR_ARRAY_BUFFER_BINDING)
2439#if defined(GL_COLOR_ARRAY_SIZE)
2440        case GL_COLOR_ARRAY_SIZE:
2441#endif // defined(GL_COLOR_ARRAY_SIZE)
2442#if defined(GL_COLOR_ARRAY_STRIDE)
2443        case GL_COLOR_ARRAY_STRIDE:
2444#endif // defined(GL_COLOR_ARRAY_STRIDE)
2445#if defined(GL_COLOR_ARRAY_TYPE)
2446        case GL_COLOR_ARRAY_TYPE:
2447#endif // defined(GL_COLOR_ARRAY_TYPE)
2448#if defined(GL_CULL_FACE)
2449        case GL_CULL_FACE:
2450#endif // defined(GL_CULL_FACE)
2451#if defined(GL_DEPTH_BITS)
2452        case GL_DEPTH_BITS:
2453#endif // defined(GL_DEPTH_BITS)
2454#if defined(GL_DEPTH_CLEAR_VALUE)
2455        case GL_DEPTH_CLEAR_VALUE:
2456#endif // defined(GL_DEPTH_CLEAR_VALUE)
2457#if defined(GL_DEPTH_FUNC)
2458        case GL_DEPTH_FUNC:
2459#endif // defined(GL_DEPTH_FUNC)
2460#if defined(GL_DEPTH_WRITEMASK)
2461        case GL_DEPTH_WRITEMASK:
2462#endif // defined(GL_DEPTH_WRITEMASK)
2463#if defined(GL_FOG_DENSITY)
2464        case GL_FOG_DENSITY:
2465#endif // defined(GL_FOG_DENSITY)
2466#if defined(GL_FOG_END)
2467        case GL_FOG_END:
2468#endif // defined(GL_FOG_END)
2469#if defined(GL_FOG_MODE)
2470        case GL_FOG_MODE:
2471#endif // defined(GL_FOG_MODE)
2472#if defined(GL_FOG_START)
2473        case GL_FOG_START:
2474#endif // defined(GL_FOG_START)
2475#if defined(GL_FRONT_FACE)
2476        case GL_FRONT_FACE:
2477#endif // defined(GL_FRONT_FACE)
2478#if defined(GL_GREEN_BITS)
2479        case GL_GREEN_BITS:
2480#endif // defined(GL_GREEN_BITS)
2481#if defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
2482        case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
2483#endif // defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
2484#if defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
2485        case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
2486#endif // defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
2487#if defined(GL_LIGHT_MODEL_COLOR_CONTROL)
2488        case GL_LIGHT_MODEL_COLOR_CONTROL:
2489#endif // defined(GL_LIGHT_MODEL_COLOR_CONTROL)
2490#if defined(GL_LIGHT_MODEL_LOCAL_VIEWER)
2491        case GL_LIGHT_MODEL_LOCAL_VIEWER:
2492#endif // defined(GL_LIGHT_MODEL_LOCAL_VIEWER)
2493#if defined(GL_LIGHT_MODEL_TWO_SIDE)
2494        case GL_LIGHT_MODEL_TWO_SIDE:
2495#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
2496#if defined(GL_LINE_SMOOTH_HINT)
2497        case GL_LINE_SMOOTH_HINT:
2498#endif // defined(GL_LINE_SMOOTH_HINT)
2499#if defined(GL_LINE_WIDTH)
2500        case GL_LINE_WIDTH:
2501#endif // defined(GL_LINE_WIDTH)
2502#if defined(GL_LOGIC_OP_MODE)
2503        case GL_LOGIC_OP_MODE:
2504#endif // defined(GL_LOGIC_OP_MODE)
2505#if defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
2506        case GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES:
2507#endif // defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
2508#if defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
2509        case GL_MATRIX_INDEX_ARRAY_SIZE_OES:
2510#endif // defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
2511#if defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
2512        case GL_MATRIX_INDEX_ARRAY_STRIDE_OES:
2513#endif // defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
2514#if defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
2515        case GL_MATRIX_INDEX_ARRAY_TYPE_OES:
2516#endif // defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
2517#if defined(GL_MATRIX_MODE)
2518        case GL_MATRIX_MODE:
2519#endif // defined(GL_MATRIX_MODE)
2520#if defined(GL_MAX_CLIP_PLANES)
2521        case GL_MAX_CLIP_PLANES:
2522#endif // defined(GL_MAX_CLIP_PLANES)
2523#if defined(GL_MAX_ELEMENTS_INDICES)
2524        case GL_MAX_ELEMENTS_INDICES:
2525#endif // defined(GL_MAX_ELEMENTS_INDICES)
2526#if defined(GL_MAX_ELEMENTS_VERTICES)
2527        case GL_MAX_ELEMENTS_VERTICES:
2528#endif // defined(GL_MAX_ELEMENTS_VERTICES)
2529#if defined(GL_MAX_LIGHTS)
2530        case GL_MAX_LIGHTS:
2531#endif // defined(GL_MAX_LIGHTS)
2532#if defined(GL_MAX_MODELVIEW_STACK_DEPTH)
2533        case GL_MAX_MODELVIEW_STACK_DEPTH:
2534#endif // defined(GL_MAX_MODELVIEW_STACK_DEPTH)
2535#if defined(GL_MAX_PALETTE_MATRICES_OES)
2536        case GL_MAX_PALETTE_MATRICES_OES:
2537#endif // defined(GL_MAX_PALETTE_MATRICES_OES)
2538#if defined(GL_MAX_PROJECTION_STACK_DEPTH)
2539        case GL_MAX_PROJECTION_STACK_DEPTH:
2540#endif // defined(GL_MAX_PROJECTION_STACK_DEPTH)
2541#if defined(GL_MAX_TEXTURE_SIZE)
2542        case GL_MAX_TEXTURE_SIZE:
2543#endif // defined(GL_MAX_TEXTURE_SIZE)
2544#if defined(GL_MAX_TEXTURE_STACK_DEPTH)
2545        case GL_MAX_TEXTURE_STACK_DEPTH:
2546#endif // defined(GL_MAX_TEXTURE_STACK_DEPTH)
2547#if defined(GL_MAX_TEXTURE_UNITS)
2548        case GL_MAX_TEXTURE_UNITS:
2549#endif // defined(GL_MAX_TEXTURE_UNITS)
2550#if defined(GL_MAX_VERTEX_UNITS_OES)
2551        case GL_MAX_VERTEX_UNITS_OES:
2552#endif // defined(GL_MAX_VERTEX_UNITS_OES)
2553#if defined(GL_MODELVIEW_STACK_DEPTH)
2554        case GL_MODELVIEW_STACK_DEPTH:
2555#endif // defined(GL_MODELVIEW_STACK_DEPTH)
2556#if defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
2557        case GL_NORMAL_ARRAY_BUFFER_BINDING:
2558#endif // defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
2559#if defined(GL_NORMAL_ARRAY_STRIDE)
2560        case GL_NORMAL_ARRAY_STRIDE:
2561#endif // defined(GL_NORMAL_ARRAY_STRIDE)
2562#if defined(GL_NORMAL_ARRAY_TYPE)
2563        case GL_NORMAL_ARRAY_TYPE:
2564#endif // defined(GL_NORMAL_ARRAY_TYPE)
2565#if defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
2566        case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
2567#endif // defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
2568#if defined(GL_PACK_ALIGNMENT)
2569        case GL_PACK_ALIGNMENT:
2570#endif // defined(GL_PACK_ALIGNMENT)
2571#if defined(GL_PERSPECTIVE_CORRECTION_HINT)
2572        case GL_PERSPECTIVE_CORRECTION_HINT:
2573#endif // defined(GL_PERSPECTIVE_CORRECTION_HINT)
2574#if defined(GL_POINT_SIZE)
2575        case GL_POINT_SIZE:
2576#endif // defined(GL_POINT_SIZE)
2577#if defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
2578        case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
2579#endif // defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
2580#if defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
2581        case GL_POINT_SIZE_ARRAY_STRIDE_OES:
2582#endif // defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
2583#if defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
2584        case GL_POINT_SIZE_ARRAY_TYPE_OES:
2585#endif // defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
2586#if defined(GL_POINT_SMOOTH_HINT)
2587        case GL_POINT_SMOOTH_HINT:
2588#endif // defined(GL_POINT_SMOOTH_HINT)
2589#if defined(GL_POLYGON_OFFSET_FACTOR)
2590        case GL_POLYGON_OFFSET_FACTOR:
2591#endif // defined(GL_POLYGON_OFFSET_FACTOR)
2592#if defined(GL_POLYGON_OFFSET_UNITS)
2593        case GL_POLYGON_OFFSET_UNITS:
2594#endif // defined(GL_POLYGON_OFFSET_UNITS)
2595#if defined(GL_PROJECTION_STACK_DEPTH)
2596        case GL_PROJECTION_STACK_DEPTH:
2597#endif // defined(GL_PROJECTION_STACK_DEPTH)
2598#if defined(GL_RED_BITS)
2599        case GL_RED_BITS:
2600#endif // defined(GL_RED_BITS)
2601#if defined(GL_SHADE_MODEL)
2602        case GL_SHADE_MODEL:
2603#endif // defined(GL_SHADE_MODEL)
2604#if defined(GL_STENCIL_BITS)
2605        case GL_STENCIL_BITS:
2606#endif // defined(GL_STENCIL_BITS)
2607#if defined(GL_STENCIL_CLEAR_VALUE)
2608        case GL_STENCIL_CLEAR_VALUE:
2609#endif // defined(GL_STENCIL_CLEAR_VALUE)
2610#if defined(GL_STENCIL_FAIL)
2611        case GL_STENCIL_FAIL:
2612#endif // defined(GL_STENCIL_FAIL)
2613#if defined(GL_STENCIL_FUNC)
2614        case GL_STENCIL_FUNC:
2615#endif // defined(GL_STENCIL_FUNC)
2616#if defined(GL_STENCIL_PASS_DEPTH_FAIL)
2617        case GL_STENCIL_PASS_DEPTH_FAIL:
2618#endif // defined(GL_STENCIL_PASS_DEPTH_FAIL)
2619#if defined(GL_STENCIL_PASS_DEPTH_PASS)
2620        case GL_STENCIL_PASS_DEPTH_PASS:
2621#endif // defined(GL_STENCIL_PASS_DEPTH_PASS)
2622#if defined(GL_STENCIL_REF)
2623        case GL_STENCIL_REF:
2624#endif // defined(GL_STENCIL_REF)
2625#if defined(GL_STENCIL_VALUE_MASK)
2626        case GL_STENCIL_VALUE_MASK:
2627#endif // defined(GL_STENCIL_VALUE_MASK)
2628#if defined(GL_STENCIL_WRITEMASK)
2629        case GL_STENCIL_WRITEMASK:
2630#endif // defined(GL_STENCIL_WRITEMASK)
2631#if defined(GL_SUBPIXEL_BITS)
2632        case GL_SUBPIXEL_BITS:
2633#endif // defined(GL_SUBPIXEL_BITS)
2634#if defined(GL_TEXTURE_BINDING_2D)
2635        case GL_TEXTURE_BINDING_2D:
2636#endif // defined(GL_TEXTURE_BINDING_2D)
2637#if defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
2638        case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
2639#endif // defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
2640#if defined(GL_TEXTURE_COORD_ARRAY_SIZE)
2641        case GL_TEXTURE_COORD_ARRAY_SIZE:
2642#endif // defined(GL_TEXTURE_COORD_ARRAY_SIZE)
2643#if defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
2644        case GL_TEXTURE_COORD_ARRAY_STRIDE:
2645#endif // defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
2646#if defined(GL_TEXTURE_COORD_ARRAY_TYPE)
2647        case GL_TEXTURE_COORD_ARRAY_TYPE:
2648#endif // defined(GL_TEXTURE_COORD_ARRAY_TYPE)
2649#if defined(GL_TEXTURE_STACK_DEPTH)
2650        case GL_TEXTURE_STACK_DEPTH:
2651#endif // defined(GL_TEXTURE_STACK_DEPTH)
2652#if defined(GL_UNPACK_ALIGNMENT)
2653        case GL_UNPACK_ALIGNMENT:
2654#endif // defined(GL_UNPACK_ALIGNMENT)
2655#if defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
2656        case GL_VERTEX_ARRAY_BUFFER_BINDING:
2657#endif // defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
2658#if defined(GL_VERTEX_ARRAY_SIZE)
2659        case GL_VERTEX_ARRAY_SIZE:
2660#endif // defined(GL_VERTEX_ARRAY_SIZE)
2661#if defined(GL_VERTEX_ARRAY_STRIDE)
2662        case GL_VERTEX_ARRAY_STRIDE:
2663#endif // defined(GL_VERTEX_ARRAY_STRIDE)
2664#if defined(GL_VERTEX_ARRAY_TYPE)
2665        case GL_VERTEX_ARRAY_TYPE:
2666#endif // defined(GL_VERTEX_ARRAY_TYPE)
2667#if defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
2668        case GL_WEIGHT_ARRAY_BUFFER_BINDING_OES:
2669#endif // defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
2670#if defined(GL_WEIGHT_ARRAY_SIZE_OES)
2671        case GL_WEIGHT_ARRAY_SIZE_OES:
2672#endif // defined(GL_WEIGHT_ARRAY_SIZE_OES)
2673#if defined(GL_WEIGHT_ARRAY_STRIDE_OES)
2674        case GL_WEIGHT_ARRAY_STRIDE_OES:
2675#endif // defined(GL_WEIGHT_ARRAY_STRIDE_OES)
2676#if defined(GL_WEIGHT_ARRAY_TYPE_OES)
2677        case GL_WEIGHT_ARRAY_TYPE_OES:
2678#endif // defined(GL_WEIGHT_ARRAY_TYPE_OES)
2679            _needed = 1;
2680            break;
2681#if defined(GL_ALIASED_POINT_SIZE_RANGE)
2682        case GL_ALIASED_POINT_SIZE_RANGE:
2683#endif // defined(GL_ALIASED_POINT_SIZE_RANGE)
2684#if defined(GL_ALIASED_LINE_WIDTH_RANGE)
2685        case GL_ALIASED_LINE_WIDTH_RANGE:
2686#endif // defined(GL_ALIASED_LINE_WIDTH_RANGE)
2687#if defined(GL_DEPTH_RANGE)
2688        case GL_DEPTH_RANGE:
2689#endif // defined(GL_DEPTH_RANGE)
2690#if defined(GL_MAX_VIEWPORT_DIMS)
2691        case GL_MAX_VIEWPORT_DIMS:
2692#endif // defined(GL_MAX_VIEWPORT_DIMS)
2693#if defined(GL_SMOOTH_LINE_WIDTH_RANGE)
2694        case GL_SMOOTH_LINE_WIDTH_RANGE:
2695#endif // defined(GL_SMOOTH_LINE_WIDTH_RANGE)
2696#if defined(GL_SMOOTH_POINT_SIZE_RANGE)
2697        case GL_SMOOTH_POINT_SIZE_RANGE:
2698#endif // defined(GL_SMOOTH_POINT_SIZE_RANGE)
2699            _needed = 2;
2700            break;
2701#if defined(GL_COLOR_CLEAR_VALUE)
2702        case GL_COLOR_CLEAR_VALUE:
2703#endif // defined(GL_COLOR_CLEAR_VALUE)
2704#if defined(GL_COLOR_WRITEMASK)
2705        case GL_COLOR_WRITEMASK:
2706#endif // defined(GL_COLOR_WRITEMASK)
2707#if defined(GL_FOG_COLOR)
2708        case GL_FOG_COLOR:
2709#endif // defined(GL_FOG_COLOR)
2710#if defined(GL_LIGHT_MODEL_AMBIENT)
2711        case GL_LIGHT_MODEL_AMBIENT:
2712#endif // defined(GL_LIGHT_MODEL_AMBIENT)
2713#if defined(GL_SCISSOR_BOX)
2714        case GL_SCISSOR_BOX:
2715#endif // defined(GL_SCISSOR_BOX)
2716#if defined(GL_VIEWPORT)
2717        case GL_VIEWPORT:
2718#endif // defined(GL_VIEWPORT)
2719            _needed = 4;
2720            break;
2721#if defined(GL_MODELVIEW_MATRIX)
2722        case GL_MODELVIEW_MATRIX:
2723#endif // defined(GL_MODELVIEW_MATRIX)
2724#if defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
2725        case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES:
2726#endif // defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
2727#if defined(GL_PROJECTION_MATRIX)
2728        case GL_PROJECTION_MATRIX:
2729#endif // defined(GL_PROJECTION_MATRIX)
2730#if defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
2731        case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES:
2732#endif // defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
2733#if defined(GL_TEXTURE_MATRIX)
2734        case GL_TEXTURE_MATRIX:
2735#endif // defined(GL_TEXTURE_MATRIX)
2736#if defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
2737        case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES:
2738#endif // defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
2739            _needed = 16;
2740            break;
2741#if defined(GL_COMPRESSED_TEXTURE_FORMATS)
2742        case GL_COMPRESSED_TEXTURE_FORMATS:
2743#endif // defined(GL_COMPRESSED_TEXTURE_FORMATS)
2744            _needed = getNumCompressedTextureFormats();
2745            break;
2746        default:
2747            _needed = 0;
2748            break;
2749    }
2750    if (_remaining < _needed) {
2751        _exception = 1;
2752        _exceptionType = "java/lang/IllegalArgumentException";
2753        _exceptionMessage = "remaining() < needed";
2754        goto exit;
2755    }
2756    glGetIntegerv(
2757        (GLenum)pname,
2758        (GLint *)params
2759    );
2760
2761exit:
2762    if (_array) {
2763        releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
2764    }
2765    if (_exception) {
2766        jniThrowException(_env, _exceptionType, _exceptionMessage);
2767    }
2768}
2769
2770/* void glGetProgramiv ( GLuint program, GLenum pname, GLint *params ) */
2771static void
2772android_glGetProgramiv__II_3II
2773  (JNIEnv *_env, jobject _this, jint program, jint pname, jintArray params_ref, jint offset) {
2774    jint _exception = 0;
2775    const char * _exceptionType;
2776    const char * _exceptionMessage;
2777    GLint *params_base = (GLint *) 0;
2778    jint _remaining;
2779    GLint *params = (GLint *) 0;
2780
2781    if (!params_ref) {
2782        _exception = 1;
2783        _exceptionType = "java/lang/IllegalArgumentException";
2784        _exceptionMessage = "params == null";
2785        goto exit;
2786    }
2787    if (offset < 0) {
2788        _exception = 1;
2789        _exceptionType = "java/lang/IllegalArgumentException";
2790        _exceptionMessage = "offset < 0";
2791        goto exit;
2792    }
2793    _remaining = _env->GetArrayLength(params_ref) - offset;
2794    params_base = (GLint *)
2795        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2796    params = params_base + offset;
2797
2798    glGetProgramiv(
2799        (GLuint)program,
2800        (GLenum)pname,
2801        (GLint *)params
2802    );
2803
2804exit:
2805    if (params_base) {
2806        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2807            _exception ? JNI_ABORT: 0);
2808    }
2809    if (_exception) {
2810        jniThrowException(_env, _exceptionType, _exceptionMessage);
2811    }
2812}
2813
2814/* void glGetProgramiv ( GLuint program, GLenum pname, GLint *params ) */
2815static void
2816android_glGetProgramiv__IILjava_nio_IntBuffer_2
2817  (JNIEnv *_env, jobject _this, jint program, jint pname, jobject params_buf) {
2818    jarray _array = (jarray) 0;
2819    jint _remaining;
2820    GLint *params = (GLint *) 0;
2821
2822    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
2823    glGetProgramiv(
2824        (GLuint)program,
2825        (GLenum)pname,
2826        (GLint *)params
2827    );
2828    if (_array) {
2829        releasePointer(_env, _array, params, JNI_TRUE);
2830    }
2831}
2832
2833#include <stdlib.h>
2834
2835/* void glGetProgramInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
2836static jstring android_glGetProgramInfoLog(JNIEnv *_env, jobject, jint shader) {
2837    GLint infoLen = 0;
2838    glGetProgramiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
2839    if (!infoLen) {
2840        return _env->NewStringUTF("");
2841    }
2842    char* buf = (char*) malloc(infoLen);
2843    if (buf == NULL) {
2844        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2845        return NULL;
2846    }
2847    glGetProgramInfoLog(shader, infoLen, NULL, buf);
2848    jstring result = _env->NewStringUTF(buf);
2849    free(buf);
2850    return result;
2851}
2852/* void glGetRenderbufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
2853static void
2854android_glGetRenderbufferParameteriv__II_3II
2855  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
2856    jint _exception = 0;
2857    const char * _exceptionType;
2858    const char * _exceptionMessage;
2859    GLint *params_base = (GLint *) 0;
2860    jint _remaining;
2861    GLint *params = (GLint *) 0;
2862
2863    if (!params_ref) {
2864        _exception = 1;
2865        _exceptionType = "java/lang/IllegalArgumentException";
2866        _exceptionMessage = "params == null";
2867        goto exit;
2868    }
2869    if (offset < 0) {
2870        _exception = 1;
2871        _exceptionType = "java/lang/IllegalArgumentException";
2872        _exceptionMessage = "offset < 0";
2873        goto exit;
2874    }
2875    _remaining = _env->GetArrayLength(params_ref) - offset;
2876    params_base = (GLint *)
2877        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2878    params = params_base + offset;
2879
2880    glGetRenderbufferParameteriv(
2881        (GLenum)target,
2882        (GLenum)pname,
2883        (GLint *)params
2884    );
2885
2886exit:
2887    if (params_base) {
2888        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2889            _exception ? JNI_ABORT: 0);
2890    }
2891    if (_exception) {
2892        jniThrowException(_env, _exceptionType, _exceptionMessage);
2893    }
2894}
2895
2896/* void glGetRenderbufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
2897static void
2898android_glGetRenderbufferParameteriv__IILjava_nio_IntBuffer_2
2899  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
2900    jarray _array = (jarray) 0;
2901    jint _remaining;
2902    GLint *params = (GLint *) 0;
2903
2904    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
2905    glGetRenderbufferParameteriv(
2906        (GLenum)target,
2907        (GLenum)pname,
2908        (GLint *)params
2909    );
2910    if (_array) {
2911        releasePointer(_env, _array, params, JNI_TRUE);
2912    }
2913}
2914
2915/* void glGetShaderiv ( GLuint shader, GLenum pname, GLint *params ) */
2916static void
2917android_glGetShaderiv__II_3II
2918  (JNIEnv *_env, jobject _this, jint shader, jint pname, jintArray params_ref, jint offset) {
2919    jint _exception = 0;
2920    const char * _exceptionType;
2921    const char * _exceptionMessage;
2922    GLint *params_base = (GLint *) 0;
2923    jint _remaining;
2924    GLint *params = (GLint *) 0;
2925
2926    if (!params_ref) {
2927        _exception = 1;
2928        _exceptionType = "java/lang/IllegalArgumentException";
2929        _exceptionMessage = "params == null";
2930        goto exit;
2931    }
2932    if (offset < 0) {
2933        _exception = 1;
2934        _exceptionType = "java/lang/IllegalArgumentException";
2935        _exceptionMessage = "offset < 0";
2936        goto exit;
2937    }
2938    _remaining = _env->GetArrayLength(params_ref) - offset;
2939    params_base = (GLint *)
2940        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
2941    params = params_base + offset;
2942
2943    glGetShaderiv(
2944        (GLuint)shader,
2945        (GLenum)pname,
2946        (GLint *)params
2947    );
2948
2949exit:
2950    if (params_base) {
2951        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
2952            _exception ? JNI_ABORT: 0);
2953    }
2954    if (_exception) {
2955        jniThrowException(_env, _exceptionType, _exceptionMessage);
2956    }
2957}
2958
2959/* void glGetShaderiv ( GLuint shader, GLenum pname, GLint *params ) */
2960static void
2961android_glGetShaderiv__IILjava_nio_IntBuffer_2
2962  (JNIEnv *_env, jobject _this, jint shader, jint pname, jobject params_buf) {
2963    jarray _array = (jarray) 0;
2964    jint _remaining;
2965    GLint *params = (GLint *) 0;
2966
2967    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
2968    glGetShaderiv(
2969        (GLuint)shader,
2970        (GLenum)pname,
2971        (GLint *)params
2972    );
2973    if (_array) {
2974        releasePointer(_env, _array, params, JNI_TRUE);
2975    }
2976}
2977
2978#include <stdlib.h>
2979
2980/* void glGetShaderInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
2981static jstring android_glGetShaderInfoLog(JNIEnv *_env, jobject, jint shader) {
2982    GLint infoLen = 0;
2983    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
2984    if (!infoLen) {
2985        return _env->NewStringUTF("");
2986    }
2987    char* buf = (char*) malloc(infoLen);
2988    if (buf == NULL) {
2989        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2990        return NULL;
2991    }
2992    glGetShaderInfoLog(shader, infoLen, NULL, buf);
2993    jstring result = _env->NewStringUTF(buf);
2994    free(buf);
2995    return result;
2996}
2997/* void glGetShaderPrecisionFormat ( GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision ) */
2998static void
2999android_glGetShaderPrecisionFormat__II_3II_3II
3000  (JNIEnv *_env, jobject _this, jint shadertype, jint precisiontype, jintArray range_ref, jint rangeOffset, jintArray precision_ref, jint precisionOffset) {
3001    jint _exception = 0;
3002    const char * _exceptionType;
3003    const char * _exceptionMessage;
3004    GLint *range_base = (GLint *) 0;
3005    jint _rangeRemaining;
3006    GLint *range = (GLint *) 0;
3007    GLint *precision_base = (GLint *) 0;
3008    jint _precisionRemaining;
3009    GLint *precision = (GLint *) 0;
3010
3011    if (!range_ref) {
3012        _exception = 1;
3013        _exceptionType = "java/lang/IllegalArgumentException";
3014        _exceptionMessage = "range == null";
3015        goto exit;
3016    }
3017    if (rangeOffset < 0) {
3018        _exception = 1;
3019        _exceptionType = "java/lang/IllegalArgumentException";
3020        _exceptionMessage = "rangeOffset < 0";
3021        goto exit;
3022    }
3023    _rangeRemaining = _env->GetArrayLength(range_ref) - rangeOffset;
3024    range_base = (GLint *)
3025        _env->GetPrimitiveArrayCritical(range_ref, (jboolean *)0);
3026    range = range_base + rangeOffset;
3027
3028    if (!precision_ref) {
3029        _exception = 1;
3030        _exceptionType = "java/lang/IllegalArgumentException";
3031        _exceptionMessage = "precision == null";
3032        goto exit;
3033    }
3034    if (precisionOffset < 0) {
3035        _exception = 1;
3036        _exceptionType = "java/lang/IllegalArgumentException";
3037        _exceptionMessage = "precisionOffset < 0";
3038        goto exit;
3039    }
3040    _precisionRemaining = _env->GetArrayLength(precision_ref) - precisionOffset;
3041    precision_base = (GLint *)
3042        _env->GetPrimitiveArrayCritical(precision_ref, (jboolean *)0);
3043    precision = precision_base + precisionOffset;
3044
3045    glGetShaderPrecisionFormat(
3046        (GLenum)shadertype,
3047        (GLenum)precisiontype,
3048        (GLint *)range,
3049        (GLint *)precision
3050    );
3051
3052exit:
3053    if (precision_base) {
3054        _env->ReleasePrimitiveArrayCritical(precision_ref, precision_base,
3055            _exception ? JNI_ABORT: 0);
3056    }
3057    if (range_base) {
3058        _env->ReleasePrimitiveArrayCritical(range_ref, range_base,
3059            _exception ? JNI_ABORT: 0);
3060    }
3061    if (_exception) {
3062        jniThrowException(_env, _exceptionType, _exceptionMessage);
3063    }
3064}
3065
3066/* void glGetShaderPrecisionFormat ( GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision ) */
3067static void
3068android_glGetShaderPrecisionFormat__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
3069  (JNIEnv *_env, jobject _this, jint shadertype, jint precisiontype, jobject range_buf, jobject precision_buf) {
3070    jarray _rangeArray = (jarray) 0;
3071    jarray _precisionArray = (jarray) 0;
3072    jint _rangeRemaining;
3073    GLint *range = (GLint *) 0;
3074    jint _precisionRemaining;
3075    GLint *precision = (GLint *) 0;
3076
3077    range = (GLint *)getPointer(_env, range_buf, &_rangeArray, &_rangeRemaining);
3078    precision = (GLint *)getPointer(_env, precision_buf, &_precisionArray, &_precisionRemaining);
3079    glGetShaderPrecisionFormat(
3080        (GLenum)shadertype,
3081        (GLenum)precisiontype,
3082        (GLint *)range,
3083        (GLint *)precision
3084    );
3085    if (_rangeArray) {
3086        releasePointer(_env, _rangeArray, precision, JNI_TRUE);
3087    }
3088    if (_precisionArray) {
3089        releasePointer(_env, _precisionArray, range, JNI_TRUE);
3090    }
3091}
3092
3093/* void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source ) */
3094static void
3095android_glGetShaderSource__II_3II_3BI
3096  (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jintArray length_ref, jint lengthOffset, jbyteArray source_ref, jint sourceOffset) {
3097    jint _exception = 0;
3098    const char * _exceptionType;
3099    const char * _exceptionMessage;
3100    GLsizei *length_base = (GLsizei *) 0;
3101    jint _lengthRemaining;
3102    GLsizei *length = (GLsizei *) 0;
3103    char *source_base = (char *) 0;
3104    jint _sourceRemaining;
3105    char *source = (char *) 0;
3106
3107    if (!length_ref) {
3108        _exception = 1;
3109        _exceptionType = "java/lang/IllegalArgumentException";
3110        _exceptionMessage = "length == null";
3111        goto exit;
3112    }
3113    if (lengthOffset < 0) {
3114        _exception = 1;
3115        _exceptionType = "java/lang/IllegalArgumentException";
3116        _exceptionMessage = "lengthOffset < 0";
3117        goto exit;
3118    }
3119    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
3120    length_base = (GLsizei *)
3121        _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
3122    length = length_base + lengthOffset;
3123
3124    if (!source_ref) {
3125        _exception = 1;
3126        _exceptionType = "java/lang/IllegalArgumentException";
3127        _exceptionMessage = "source == null";
3128        goto exit;
3129    }
3130    if (sourceOffset < 0) {
3131        _exception = 1;
3132        _exceptionType = "java/lang/IllegalArgumentException";
3133        _exceptionMessage = "sourceOffset < 0";
3134        goto exit;
3135    }
3136    _sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset;
3137    source_base = (char *)
3138        _env->GetPrimitiveArrayCritical(source_ref, (jboolean *)0);
3139    source = source_base + sourceOffset;
3140
3141    glGetShaderSource(
3142        (GLuint)shader,
3143        (GLsizei)bufsize,
3144        (GLsizei *)length,
3145        (char *)source
3146    );
3147
3148exit:
3149    if (source_base) {
3150        _env->ReleasePrimitiveArrayCritical(source_ref, source_base,
3151            _exception ? JNI_ABORT: 0);
3152    }
3153    if (length_base) {
3154        _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
3155            _exception ? JNI_ABORT: 0);
3156    }
3157    if (_exception) {
3158        jniThrowException(_env, _exceptionType, _exceptionMessage);
3159    }
3160}
3161
3162/* void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source ) */
3163static void
3164android_glGetShaderSource__IILjava_nio_IntBuffer_2B
3165  (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) {
3166    jarray _array = (jarray) 0;
3167    jint _remaining;
3168    GLsizei *length = (GLsizei *) 0;
3169
3170    length = (GLsizei *)getPointer(_env, length_buf, &_array, &_remaining);
3171    glGetShaderSource(
3172        (GLuint)shader,
3173        (GLsizei)bufsize,
3174        (GLsizei *)length,
3175        (char *)source
3176    );
3177    if (_array) {
3178        releasePointer(_env, _array, length, JNI_TRUE);
3179    }
3180}
3181
3182/* const GLubyte * glGetString ( GLenum name ) */
3183static jstring android_glGetString(JNIEnv* _env, jobject, jint name) {
3184    const char* chars = (const char*) glGetString((GLenum) name);
3185    return _env->NewStringUTF(chars);
3186}
3187/* void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) */
3188static void
3189android_glGetTexParameterfv__II_3FI
3190  (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
3191    jint _exception = 0;
3192    const char * _exceptionType;
3193    const char * _exceptionMessage;
3194    GLfloat *params_base = (GLfloat *) 0;
3195    jint _remaining;
3196    GLfloat *params = (GLfloat *) 0;
3197
3198    if (!params_ref) {
3199        _exception = 1;
3200        _exceptionType = "java/lang/IllegalArgumentException";
3201        _exceptionMessage = "params == null";
3202        goto exit;
3203    }
3204    if (offset < 0) {
3205        _exception = 1;
3206        _exceptionType = "java/lang/IllegalArgumentException";
3207        _exceptionMessage = "offset < 0";
3208        goto exit;
3209    }
3210    _remaining = _env->GetArrayLength(params_ref) - offset;
3211    if (_remaining < 1) {
3212        _exception = 1;
3213        _exceptionType = "java/lang/IllegalArgumentException";
3214        _exceptionMessage = "length - offset < 1 < needed";
3215        goto exit;
3216    }
3217    params_base = (GLfloat *)
3218        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3219    params = params_base + offset;
3220
3221    glGetTexParameterfv(
3222        (GLenum)target,
3223        (GLenum)pname,
3224        (GLfloat *)params
3225    );
3226
3227exit:
3228    if (params_base) {
3229        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3230            _exception ? JNI_ABORT: 0);
3231    }
3232    if (_exception) {
3233        jniThrowException(_env, _exceptionType, _exceptionMessage);
3234    }
3235}
3236
3237/* void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) */
3238static void
3239android_glGetTexParameterfv__IILjava_nio_FloatBuffer_2
3240  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
3241    jint _exception = 0;
3242    const char * _exceptionType;
3243    const char * _exceptionMessage;
3244    jarray _array = (jarray) 0;
3245    jint _remaining;
3246    GLfloat *params = (GLfloat *) 0;
3247
3248    params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
3249    if (_remaining < 1) {
3250        _exception = 1;
3251        _exceptionType = "java/lang/IllegalArgumentException";
3252        _exceptionMessage = "remaining() < 1 < needed";
3253        goto exit;
3254    }
3255    glGetTexParameterfv(
3256        (GLenum)target,
3257        (GLenum)pname,
3258        (GLfloat *)params
3259    );
3260
3261exit:
3262    if (_array) {
3263        releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
3264    }
3265    if (_exception) {
3266        jniThrowException(_env, _exceptionType, _exceptionMessage);
3267    }
3268}
3269
3270/* void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) */
3271static void
3272android_glGetTexParameteriv__II_3II
3273  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
3274    jint _exception = 0;
3275    const char * _exceptionType;
3276    const char * _exceptionMessage;
3277    GLint *params_base = (GLint *) 0;
3278    jint _remaining;
3279    GLint *params = (GLint *) 0;
3280
3281    if (!params_ref) {
3282        _exception = 1;
3283        _exceptionType = "java/lang/IllegalArgumentException";
3284        _exceptionMessage = "params == null";
3285        goto exit;
3286    }
3287    if (offset < 0) {
3288        _exception = 1;
3289        _exceptionType = "java/lang/IllegalArgumentException";
3290        _exceptionMessage = "offset < 0";
3291        goto exit;
3292    }
3293    _remaining = _env->GetArrayLength(params_ref) - offset;
3294    if (_remaining < 1) {
3295        _exception = 1;
3296        _exceptionType = "java/lang/IllegalArgumentException";
3297        _exceptionMessage = "length - offset < 1 < needed";
3298        goto exit;
3299    }
3300    params_base = (GLint *)
3301        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3302    params = params_base + offset;
3303
3304    glGetTexParameteriv(
3305        (GLenum)target,
3306        (GLenum)pname,
3307        (GLint *)params
3308    );
3309
3310exit:
3311    if (params_base) {
3312        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3313            _exception ? JNI_ABORT: 0);
3314    }
3315    if (_exception) {
3316        jniThrowException(_env, _exceptionType, _exceptionMessage);
3317    }
3318}
3319
3320/* void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) */
3321static void
3322android_glGetTexParameteriv__IILjava_nio_IntBuffer_2
3323  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
3324    jint _exception = 0;
3325    const char * _exceptionType;
3326    const char * _exceptionMessage;
3327    jarray _array = (jarray) 0;
3328    jint _remaining;
3329    GLint *params = (GLint *) 0;
3330
3331    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
3332    if (_remaining < 1) {
3333        _exception = 1;
3334        _exceptionType = "java/lang/IllegalArgumentException";
3335        _exceptionMessage = "remaining() < 1 < needed";
3336        goto exit;
3337    }
3338    glGetTexParameteriv(
3339        (GLenum)target,
3340        (GLenum)pname,
3341        (GLint *)params
3342    );
3343
3344exit:
3345    if (_array) {
3346        releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
3347    }
3348    if (_exception) {
3349        jniThrowException(_env, _exceptionType, _exceptionMessage);
3350    }
3351}
3352
3353/* void glGetUniformfv ( GLuint program, GLint location, GLfloat *params ) */
3354static void
3355android_glGetUniformfv__II_3FI
3356  (JNIEnv *_env, jobject _this, jint program, jint location, jfloatArray params_ref, jint offset) {
3357    jint _exception = 0;
3358    const char * _exceptionType;
3359    const char * _exceptionMessage;
3360    GLfloat *params_base = (GLfloat *) 0;
3361    jint _remaining;
3362    GLfloat *params = (GLfloat *) 0;
3363
3364    if (!params_ref) {
3365        _exception = 1;
3366        _exceptionType = "java/lang/IllegalArgumentException";
3367        _exceptionMessage = "params == null";
3368        goto exit;
3369    }
3370    if (offset < 0) {
3371        _exception = 1;
3372        _exceptionType = "java/lang/IllegalArgumentException";
3373        _exceptionMessage = "offset < 0";
3374        goto exit;
3375    }
3376    _remaining = _env->GetArrayLength(params_ref) - offset;
3377    params_base = (GLfloat *)
3378        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3379    params = params_base + offset;
3380
3381    glGetUniformfv(
3382        (GLuint)program,
3383        (GLint)location,
3384        (GLfloat *)params
3385    );
3386
3387exit:
3388    if (params_base) {
3389        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3390            _exception ? JNI_ABORT: 0);
3391    }
3392    if (_exception) {
3393        jniThrowException(_env, _exceptionType, _exceptionMessage);
3394    }
3395}
3396
3397/* void glGetUniformfv ( GLuint program, GLint location, GLfloat *params ) */
3398static void
3399android_glGetUniformfv__IILjava_nio_FloatBuffer_2
3400  (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
3401    jarray _array = (jarray) 0;
3402    jint _remaining;
3403    GLfloat *params = (GLfloat *) 0;
3404
3405    params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
3406    glGetUniformfv(
3407        (GLuint)program,
3408        (GLint)location,
3409        (GLfloat *)params
3410    );
3411    if (_array) {
3412        releasePointer(_env, _array, params, JNI_TRUE);
3413    }
3414}
3415
3416/* void glGetUniformiv ( GLuint program, GLint location, GLint *params ) */
3417static void
3418android_glGetUniformiv__II_3II
3419  (JNIEnv *_env, jobject _this, jint program, jint location, jintArray params_ref, jint offset) {
3420    jint _exception = 0;
3421    const char * _exceptionType;
3422    const char * _exceptionMessage;
3423    GLint *params_base = (GLint *) 0;
3424    jint _remaining;
3425    GLint *params = (GLint *) 0;
3426
3427    if (!params_ref) {
3428        _exception = 1;
3429        _exceptionType = "java/lang/IllegalArgumentException";
3430        _exceptionMessage = "params == null";
3431        goto exit;
3432    }
3433    if (offset < 0) {
3434        _exception = 1;
3435        _exceptionType = "java/lang/IllegalArgumentException";
3436        _exceptionMessage = "offset < 0";
3437        goto exit;
3438    }
3439    _remaining = _env->GetArrayLength(params_ref) - offset;
3440    params_base = (GLint *)
3441        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3442    params = params_base + offset;
3443
3444    glGetUniformiv(
3445        (GLuint)program,
3446        (GLint)location,
3447        (GLint *)params
3448    );
3449
3450exit:
3451    if (params_base) {
3452        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3453            _exception ? JNI_ABORT: 0);
3454    }
3455    if (_exception) {
3456        jniThrowException(_env, _exceptionType, _exceptionMessage);
3457    }
3458}
3459
3460/* void glGetUniformiv ( GLuint program, GLint location, GLint *params ) */
3461static void
3462android_glGetUniformiv__IILjava_nio_IntBuffer_2
3463  (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
3464    jarray _array = (jarray) 0;
3465    jint _remaining;
3466    GLint *params = (GLint *) 0;
3467
3468    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
3469    glGetUniformiv(
3470        (GLuint)program,
3471        (GLint)location,
3472        (GLint *)params
3473    );
3474    if (_array) {
3475        releasePointer(_env, _array, params, JNI_TRUE);
3476    }
3477}
3478
3479/* int glGetUniformLocation ( GLuint program, const char *name ) */
3480static jint
3481android_glGetUniformLocation__ILjava_lang_String_2
3482  (JNIEnv *_env, jobject _this, jint program, jstring name) {
3483    jint _exception = 0;
3484    const char * _exceptionType;
3485    const char * _exceptionMessage;
3486    int _returnValue = 0;
3487    const char* _nativename = 0;
3488
3489    if (!name) {
3490        _exceptionType = "java/lang/IllegalArgumentException";
3491        _exceptionMessage = "name == null";
3492        goto exit;
3493    }
3494    _nativename = _env->GetStringUTFChars(name, 0);
3495
3496    _returnValue = glGetUniformLocation(
3497        (GLuint)program,
3498        (char *)_nativename
3499    );
3500
3501exit:
3502    if (_nativename) {
3503        _env->ReleaseStringUTFChars(name, _nativename);
3504    }
3505
3506    if (_exception) {
3507        jniThrowException(_env, _exceptionType, _exceptionMessage);
3508    }
3509    return _returnValue;
3510}
3511
3512/* void glGetVertexAttribfv ( GLuint index, GLenum pname, GLfloat *params ) */
3513static void
3514android_glGetVertexAttribfv__II_3FI
3515  (JNIEnv *_env, jobject _this, jint index, jint pname, jfloatArray params_ref, jint offset) {
3516    jint _exception = 0;
3517    const char * _exceptionType;
3518    const char * _exceptionMessage;
3519    GLfloat *params_base = (GLfloat *) 0;
3520    jint _remaining;
3521    GLfloat *params = (GLfloat *) 0;
3522
3523    if (!params_ref) {
3524        _exception = 1;
3525        _exceptionType = "java/lang/IllegalArgumentException";
3526        _exceptionMessage = "params == null";
3527        goto exit;
3528    }
3529    if (offset < 0) {
3530        _exception = 1;
3531        _exceptionType = "java/lang/IllegalArgumentException";
3532        _exceptionMessage = "offset < 0";
3533        goto exit;
3534    }
3535    _remaining = _env->GetArrayLength(params_ref) - offset;
3536    params_base = (GLfloat *)
3537        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3538    params = params_base + offset;
3539
3540    glGetVertexAttribfv(
3541        (GLuint)index,
3542        (GLenum)pname,
3543        (GLfloat *)params
3544    );
3545
3546exit:
3547    if (params_base) {
3548        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3549            _exception ? JNI_ABORT: 0);
3550    }
3551    if (_exception) {
3552        jniThrowException(_env, _exceptionType, _exceptionMessage);
3553    }
3554}
3555
3556/* void glGetVertexAttribfv ( GLuint index, GLenum pname, GLfloat *params ) */
3557static void
3558android_glGetVertexAttribfv__IILjava_nio_FloatBuffer_2
3559  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
3560    jarray _array = (jarray) 0;
3561    jint _remaining;
3562    GLfloat *params = (GLfloat *) 0;
3563
3564    params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
3565    glGetVertexAttribfv(
3566        (GLuint)index,
3567        (GLenum)pname,
3568        (GLfloat *)params
3569    );
3570    if (_array) {
3571        releasePointer(_env, _array, params, JNI_TRUE);
3572    }
3573}
3574
3575/* void glGetVertexAttribiv ( GLuint index, GLenum pname, GLint *params ) */
3576static void
3577android_glGetVertexAttribiv__II_3II
3578  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
3579    jint _exception = 0;
3580    const char * _exceptionType;
3581    const char * _exceptionMessage;
3582    GLint *params_base = (GLint *) 0;
3583    jint _remaining;
3584    GLint *params = (GLint *) 0;
3585
3586    if (!params_ref) {
3587        _exception = 1;
3588        _exceptionType = "java/lang/IllegalArgumentException";
3589        _exceptionMessage = "params == null";
3590        goto exit;
3591    }
3592    if (offset < 0) {
3593        _exception = 1;
3594        _exceptionType = "java/lang/IllegalArgumentException";
3595        _exceptionMessage = "offset < 0";
3596        goto exit;
3597    }
3598    _remaining = _env->GetArrayLength(params_ref) - offset;
3599    params_base = (GLint *)
3600        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
3601    params = params_base + offset;
3602
3603    glGetVertexAttribiv(
3604        (GLuint)index,
3605        (GLenum)pname,
3606        (GLint *)params
3607    );
3608
3609exit:
3610    if (params_base) {
3611        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
3612            _exception ? JNI_ABORT: 0);
3613    }
3614    if (_exception) {
3615        jniThrowException(_env, _exceptionType, _exceptionMessage);
3616    }
3617}
3618
3619/* void glGetVertexAttribiv ( GLuint index, GLenum pname, GLint *params ) */
3620static void
3621android_glGetVertexAttribiv__IILjava_nio_IntBuffer_2
3622  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
3623    jarray _array = (jarray) 0;
3624    jint _remaining;
3625    GLint *params = (GLint *) 0;
3626
3627    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
3628    glGetVertexAttribiv(
3629        (GLuint)index,
3630        (GLenum)pname,
3631        (GLint *)params
3632    );
3633    if (_array) {
3634        releasePointer(_env, _array, params, JNI_TRUE);
3635    }
3636}
3637
3638/* void glHint ( GLenum target, GLenum mode ) */
3639static void
3640android_glHint__II
3641  (JNIEnv *_env, jobject _this, jint target, jint mode) {
3642    glHint(
3643        (GLenum)target,
3644        (GLenum)mode
3645    );
3646}
3647
3648/* GLboolean glIsBuffer ( GLuint buffer ) */
3649static jboolean
3650android_glIsBuffer__I
3651  (JNIEnv *_env, jobject _this, jint buffer) {
3652    GLboolean _returnValue;
3653    _returnValue = glIsBuffer(
3654        (GLuint)buffer
3655    );
3656    return _returnValue;
3657}
3658
3659/* GLboolean glIsEnabled ( GLenum cap ) */
3660static jboolean
3661android_glIsEnabled__I
3662  (JNIEnv *_env, jobject _this, jint cap) {
3663    GLboolean _returnValue;
3664    _returnValue = glIsEnabled(
3665        (GLenum)cap
3666    );
3667    return _returnValue;
3668}
3669
3670/* GLboolean glIsFramebuffer ( GLuint framebuffer ) */
3671static jboolean
3672android_glIsFramebuffer__I
3673  (JNIEnv *_env, jobject _this, jint framebuffer) {
3674    GLboolean _returnValue;
3675    _returnValue = glIsFramebuffer(
3676        (GLuint)framebuffer
3677    );
3678    return _returnValue;
3679}
3680
3681/* GLboolean glIsProgram ( GLuint program ) */
3682static jboolean
3683android_glIsProgram__I
3684  (JNIEnv *_env, jobject _this, jint program) {
3685    GLboolean _returnValue;
3686    _returnValue = glIsProgram(
3687        (GLuint)program
3688    );
3689    return _returnValue;
3690}
3691
3692/* GLboolean glIsRenderbuffer ( GLuint renderbuffer ) */
3693static jboolean
3694android_glIsRenderbuffer__I
3695  (JNIEnv *_env, jobject _this, jint renderbuffer) {
3696    GLboolean _returnValue;
3697    _returnValue = glIsRenderbuffer(
3698        (GLuint)renderbuffer
3699    );
3700    return _returnValue;
3701}
3702
3703/* GLboolean glIsShader ( GLuint shader ) */
3704static jboolean
3705android_glIsShader__I
3706  (JNIEnv *_env, jobject _this, jint shader) {
3707    GLboolean _returnValue;
3708    _returnValue = glIsShader(
3709        (GLuint)shader
3710    );
3711    return _returnValue;
3712}
3713
3714/* GLboolean glIsTexture ( GLuint texture ) */
3715static jboolean
3716android_glIsTexture__I
3717  (JNIEnv *_env, jobject _this, jint texture) {
3718    GLboolean _returnValue;
3719    _returnValue = glIsTexture(
3720        (GLuint)texture
3721    );
3722    return _returnValue;
3723}
3724
3725/* void glLineWidth ( GLfloat width ) */
3726static void
3727android_glLineWidth__F
3728  (JNIEnv *_env, jobject _this, jfloat width) {
3729    glLineWidth(
3730        (GLfloat)width
3731    );
3732}
3733
3734/* void glLinkProgram ( GLuint program ) */
3735static void
3736android_glLinkProgram__I
3737  (JNIEnv *_env, jobject _this, jint program) {
3738    glLinkProgram(
3739        (GLuint)program
3740    );
3741}
3742
3743/* void glPixelStorei ( GLenum pname, GLint param ) */
3744static void
3745android_glPixelStorei__II
3746  (JNIEnv *_env, jobject _this, jint pname, jint param) {
3747    glPixelStorei(
3748        (GLenum)pname,
3749        (GLint)param
3750    );
3751}
3752
3753/* void glPolygonOffset ( GLfloat factor, GLfloat units ) */
3754static void
3755android_glPolygonOffset__FF
3756  (JNIEnv *_env, jobject _this, jfloat factor, jfloat units) {
3757    glPolygonOffset(
3758        (GLfloat)factor,
3759        (GLfloat)units
3760    );
3761}
3762
3763/* void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ) */
3764static void
3765android_glReadPixels__IIIIIILjava_nio_Buffer_2
3766  (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jobject pixels_buf) {
3767    jarray _array = (jarray) 0;
3768    jint _remaining;
3769    GLvoid *pixels = (GLvoid *) 0;
3770
3771    pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining);
3772    glReadPixels(
3773        (GLint)x,
3774        (GLint)y,
3775        (GLsizei)width,
3776        (GLsizei)height,
3777        (GLenum)format,
3778        (GLenum)type,
3779        (GLvoid *)pixels
3780    );
3781    if (_array) {
3782        releasePointer(_env, _array, pixels, JNI_TRUE);
3783    }
3784}
3785
3786/* void glReleaseShaderCompiler ( void ) */
3787static void
3788android_glReleaseShaderCompiler__
3789  (JNIEnv *_env, jobject _this) {
3790    glReleaseShaderCompiler();
3791}
3792
3793/* void glRenderbufferStorage ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height ) */
3794static void
3795android_glRenderbufferStorage__IIII
3796  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint width, jint height) {
3797    glRenderbufferStorage(
3798        (GLenum)target,
3799        (GLenum)internalformat,
3800        (GLsizei)width,
3801        (GLsizei)height
3802    );
3803}
3804
3805/* void glSampleCoverage ( GLclampf value, GLboolean invert ) */
3806static void
3807android_glSampleCoverage__FZ
3808  (JNIEnv *_env, jobject _this, jfloat value, jboolean invert) {
3809    glSampleCoverage(
3810        (GLclampf)value,
3811        (GLboolean)invert
3812    );
3813}
3814
3815/* void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height ) */
3816static void
3817android_glScissor__IIII
3818  (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
3819    glScissor(
3820        (GLint)x,
3821        (GLint)y,
3822        (GLsizei)width,
3823        (GLsizei)height
3824    );
3825}
3826
3827/* void glShaderBinary ( GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length ) */
3828static void
3829android_glShaderBinary__I_3IIILjava_nio_Buffer_2I
3830  (JNIEnv *_env, jobject _this, jint n, jintArray shaders_ref, jint offset, jint binaryformat, jobject binary_buf, jint length) {
3831    jint _exception = 0;
3832    const char * _exceptionType;
3833    const char * _exceptionMessage;
3834    jarray _array = (jarray) 0;
3835    GLuint *shaders_base = (GLuint *) 0;
3836    jint _shadersRemaining;
3837    GLuint *shaders = (GLuint *) 0;
3838    jint _binaryRemaining;
3839    GLvoid *binary = (GLvoid *) 0;
3840
3841    if (!shaders_ref) {
3842        _exception = 1;
3843        _exceptionType = "java/lang/IllegalArgumentException";
3844        _exceptionMessage = "shaders == null";
3845        goto exit;
3846    }
3847    if (offset < 0) {
3848        _exception = 1;
3849        _exceptionType = "java/lang/IllegalArgumentException";
3850        _exceptionMessage = "offset < 0";
3851        goto exit;
3852    }
3853    _shadersRemaining = _env->GetArrayLength(shaders_ref) - offset;
3854    shaders_base = (GLuint *)
3855        _env->GetPrimitiveArrayCritical(shaders_ref, (jboolean *)0);
3856    shaders = shaders_base + offset;
3857
3858    binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_binaryRemaining);
3859    glShaderBinary(
3860        (GLsizei)n,
3861        (GLuint *)shaders,
3862        (GLenum)binaryformat,
3863        (GLvoid *)binary,
3864        (GLsizei)length
3865    );
3866
3867exit:
3868    if (_array) {
3869        releasePointer(_env, _array, binary, JNI_FALSE);
3870    }
3871    if (shaders_base) {
3872        _env->ReleasePrimitiveArrayCritical(shaders_ref, shaders_base,
3873            JNI_ABORT);
3874    }
3875    if (_exception) {
3876        jniThrowException(_env, _exceptionType, _exceptionMessage);
3877    }
3878}
3879
3880/* void glShaderBinary ( GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length ) */
3881static void
3882android_glShaderBinary__ILjava_nio_IntBuffer_2ILjava_nio_Buffer_2I
3883  (JNIEnv *_env, jobject _this, jint n, jobject shaders_buf, jint binaryformat, jobject binary_buf, jint length) {
3884    jarray _shadersArray = (jarray) 0;
3885    jarray _binaryArray = (jarray) 0;
3886    jint _shadersRemaining;
3887    GLuint *shaders = (GLuint *) 0;
3888    jint _binaryRemaining;
3889    GLvoid *binary = (GLvoid *) 0;
3890
3891    shaders = (GLuint *)getPointer(_env, shaders_buf, &_shadersArray, &_shadersRemaining);
3892    binary = (GLvoid *)getPointer(_env, binary_buf, &_binaryArray, &_binaryRemaining);
3893    glShaderBinary(
3894        (GLsizei)n,
3895        (GLuint *)shaders,
3896        (GLenum)binaryformat,
3897        (GLvoid *)binary,
3898        (GLsizei)length
3899    );
3900    if (_shadersArray) {
3901        releasePointer(_env, _shadersArray, binary, JNI_FALSE);
3902    }
3903    if (_binaryArray) {
3904        releasePointer(_env, _binaryArray, shaders, JNI_FALSE);
3905    }
3906}
3907
3908
3909/* void glShaderSource ( GLuint shader, GLsizei count, const GLchar ** string, const GLint * length ) */
3910static
3911void
3912android_glShaderSource
3913    (JNIEnv *_env, jobject _this, jint shader, jstring string) {
3914
3915    if (!string) {
3916        jniThrowException(_env, "java/lang/IllegalArgumentException", "string == null");
3917        return;
3918    }
3919
3920    const char* nativeString = _env->GetStringUTFChars(string, 0);
3921    const char* strings[] = {nativeString};
3922    glShaderSource(shader, 1, strings, 0);
3923    _env->ReleaseStringUTFChars(string, nativeString);
3924}
3925/* void glStencilFunc ( GLenum func, GLint ref, GLuint mask ) */
3926static void
3927android_glStencilFunc__III
3928  (JNIEnv *_env, jobject _this, jint func, jint ref, jint mask) {
3929    glStencilFunc(
3930        (GLenum)func,
3931        (GLint)ref,
3932        (GLuint)mask
3933    );
3934}
3935
3936/* void glStencilFuncSeparate ( GLenum face, GLenum func, GLint ref, GLuint mask ) */
3937static void
3938android_glStencilFuncSeparate__IIII
3939  (JNIEnv *_env, jobject _this, jint face, jint func, jint ref, jint mask) {
3940    glStencilFuncSeparate(
3941        (GLenum)face,
3942        (GLenum)func,
3943        (GLint)ref,
3944        (GLuint)mask
3945    );
3946}
3947
3948/* void glStencilMask ( GLuint mask ) */
3949static void
3950android_glStencilMask__I
3951  (JNIEnv *_env, jobject _this, jint mask) {
3952    glStencilMask(
3953        (GLuint)mask
3954    );
3955}
3956
3957/* void glStencilMaskSeparate ( GLenum face, GLuint mask ) */
3958static void
3959android_glStencilMaskSeparate__II
3960  (JNIEnv *_env, jobject _this, jint face, jint mask) {
3961    glStencilMaskSeparate(
3962        (GLenum)face,
3963        (GLuint)mask
3964    );
3965}
3966
3967/* void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass ) */
3968static void
3969android_glStencilOp__III
3970  (JNIEnv *_env, jobject _this, jint fail, jint zfail, jint zpass) {
3971    glStencilOp(
3972        (GLenum)fail,
3973        (GLenum)zfail,
3974        (GLenum)zpass
3975    );
3976}
3977
3978/* void glStencilOpSeparate ( GLenum face, GLenum fail, GLenum zfail, GLenum zpass ) */
3979static void
3980android_glStencilOpSeparate__IIII
3981  (JNIEnv *_env, jobject _this, jint face, jint fail, jint zfail, jint zpass) {
3982    glStencilOpSeparate(
3983        (GLenum)face,
3984        (GLenum)fail,
3985        (GLenum)zfail,
3986        (GLenum)zpass
3987    );
3988}
3989
3990/* void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
3991static void
3992android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
3993  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint format, jint type, jobject pixels_buf) {
3994    jarray _array = (jarray) 0;
3995    jint _remaining;
3996    GLvoid *pixels = (GLvoid *) 0;
3997
3998    if (pixels_buf) {
3999        pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining);
4000    }
4001    glTexImage2D(
4002        (GLenum)target,
4003        (GLint)level,
4004        (GLint)internalformat,
4005        (GLsizei)width,
4006        (GLsizei)height,
4007        (GLint)border,
4008        (GLenum)format,
4009        (GLenum)type,
4010        (GLvoid *)pixels
4011    );
4012    if (_array) {
4013        releasePointer(_env, _array, pixels, JNI_FALSE);
4014    }
4015}
4016
4017/* void glTexParameterf ( GLenum target, GLenum pname, GLfloat param ) */
4018static void
4019android_glTexParameterf__IIF
4020  (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
4021    glTexParameterf(
4022        (GLenum)target,
4023        (GLenum)pname,
4024        (GLfloat)param
4025    );
4026}
4027
4028/* void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) */
4029static void
4030android_glTexParameterfv__II_3FI
4031  (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
4032    jint _exception = 0;
4033    const char * _exceptionType;
4034    const char * _exceptionMessage;
4035    GLfloat *params_base = (GLfloat *) 0;
4036    jint _remaining;
4037    GLfloat *params = (GLfloat *) 0;
4038
4039    if (!params_ref) {
4040        _exception = 1;
4041        _exceptionType = "java/lang/IllegalArgumentException";
4042        _exceptionMessage = "params == null";
4043        goto exit;
4044    }
4045    if (offset < 0) {
4046        _exception = 1;
4047        _exceptionType = "java/lang/IllegalArgumentException";
4048        _exceptionMessage = "offset < 0";
4049        goto exit;
4050    }
4051    _remaining = _env->GetArrayLength(params_ref) - offset;
4052    if (_remaining < 1) {
4053        _exception = 1;
4054        _exceptionType = "java/lang/IllegalArgumentException";
4055        _exceptionMessage = "length - offset < 1 < needed";
4056        goto exit;
4057    }
4058    params_base = (GLfloat *)
4059        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
4060    params = params_base + offset;
4061
4062    glTexParameterfv(
4063        (GLenum)target,
4064        (GLenum)pname,
4065        (GLfloat *)params
4066    );
4067
4068exit:
4069    if (params_base) {
4070        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
4071            JNI_ABORT);
4072    }
4073    if (_exception) {
4074        jniThrowException(_env, _exceptionType, _exceptionMessage);
4075    }
4076}
4077
4078/* void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) */
4079static void
4080android_glTexParameterfv__IILjava_nio_FloatBuffer_2
4081  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
4082    jint _exception = 0;
4083    const char * _exceptionType;
4084    const char * _exceptionMessage;
4085    jarray _array = (jarray) 0;
4086    jint _remaining;
4087    GLfloat *params = (GLfloat *) 0;
4088
4089    params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
4090    if (_remaining < 1) {
4091        _exception = 1;
4092        _exceptionType = "java/lang/IllegalArgumentException";
4093        _exceptionMessage = "remaining() < 1 < needed";
4094        goto exit;
4095    }
4096    glTexParameterfv(
4097        (GLenum)target,
4098        (GLenum)pname,
4099        (GLfloat *)params
4100    );
4101
4102exit:
4103    if (_array) {
4104        releasePointer(_env, _array, params, JNI_FALSE);
4105    }
4106    if (_exception) {
4107        jniThrowException(_env, _exceptionType, _exceptionMessage);
4108    }
4109}
4110
4111/* void glTexParameteri ( GLenum target, GLenum pname, GLint param ) */
4112static void
4113android_glTexParameteri__III
4114  (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
4115    glTexParameteri(
4116        (GLenum)target,
4117        (GLenum)pname,
4118        (GLint)param
4119    );
4120}
4121
4122/* void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) */
4123static void
4124android_glTexParameteriv__II_3II
4125  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
4126    jint _exception = 0;
4127    const char * _exceptionType;
4128    const char * _exceptionMessage;
4129    GLint *params_base = (GLint *) 0;
4130    jint _remaining;
4131    GLint *params = (GLint *) 0;
4132
4133    if (!params_ref) {
4134        _exception = 1;
4135        _exceptionType = "java/lang/IllegalArgumentException";
4136        _exceptionMessage = "params == null";
4137        goto exit;
4138    }
4139    if (offset < 0) {
4140        _exception = 1;
4141        _exceptionType = "java/lang/IllegalArgumentException";
4142        _exceptionMessage = "offset < 0";
4143        goto exit;
4144    }
4145    _remaining = _env->GetArrayLength(params_ref) - offset;
4146    if (_remaining < 1) {
4147        _exception = 1;
4148        _exceptionType = "java/lang/IllegalArgumentException";
4149        _exceptionMessage = "length - offset < 1 < needed";
4150        goto exit;
4151    }
4152    params_base = (GLint *)
4153        _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
4154    params = params_base + offset;
4155
4156    glTexParameteriv(
4157        (GLenum)target,
4158        (GLenum)pname,
4159        (GLint *)params
4160    );
4161
4162exit:
4163    if (params_base) {
4164        _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
4165            JNI_ABORT);
4166    }
4167    if (_exception) {
4168        jniThrowException(_env, _exceptionType, _exceptionMessage);
4169    }
4170}
4171
4172/* void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) */
4173static void
4174android_glTexParameteriv__IILjava_nio_IntBuffer_2
4175  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
4176    jint _exception = 0;
4177    const char * _exceptionType;
4178    const char * _exceptionMessage;
4179    jarray _array = (jarray) 0;
4180    jint _remaining;
4181    GLint *params = (GLint *) 0;
4182
4183    params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
4184    if (_remaining < 1) {
4185        _exception = 1;
4186        _exceptionType = "java/lang/IllegalArgumentException";
4187        _exceptionMessage = "remaining() < 1 < needed";
4188        goto exit;
4189    }
4190    glTexParameteriv(
4191        (GLenum)target,
4192        (GLenum)pname,
4193        (GLint *)params
4194    );
4195
4196exit:
4197    if (_array) {
4198        releasePointer(_env, _array, params, JNI_FALSE);
4199    }
4200    if (_exception) {
4201        jniThrowException(_env, _exceptionType, _exceptionMessage);
4202    }
4203}
4204
4205/* void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ) */
4206static void
4207android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
4208  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint type, jobject pixels_buf) {
4209    jarray _array = (jarray) 0;
4210    jint _remaining;
4211    GLvoid *pixels = (GLvoid *) 0;
4212
4213    if (pixels_buf) {
4214        pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining);
4215    }
4216    glTexSubImage2D(
4217        (GLenum)target,
4218        (GLint)level,
4219        (GLint)xoffset,
4220        (GLint)yoffset,
4221        (GLsizei)width,
4222        (GLsizei)height,
4223        (GLenum)format,
4224        (GLenum)type,
4225        (GLvoid *)pixels
4226    );
4227    if (_array) {
4228        releasePointer(_env, _array, pixels, JNI_FALSE);
4229    }
4230}
4231
4232/* void glUniform1f ( GLint location, GLfloat x ) */
4233static void
4234android_glUniform1f__IF
4235  (JNIEnv *_env, jobject _this, jint location, jfloat x) {
4236    glUniform1f(
4237        (GLint)location,
4238        (GLfloat)x
4239    );
4240}
4241
4242/* void glUniform1fv ( GLint location, GLsizei count, const GLfloat *v ) */
4243static void
4244android_glUniform1fv__II_3FI
4245  (JNIEnv *_env, jobject _this, jint location, jint count, jfloatArray v_ref, jint offset) {
4246    jint _exception = 0;
4247    const char * _exceptionType;
4248    const char * _exceptionMessage;
4249    GLfloat *v_base = (GLfloat *) 0;
4250    jint _remaining;
4251    GLfloat *v = (GLfloat *) 0;
4252
4253    if (!v_ref) {
4254        _exception = 1;
4255        _exceptionType = "java/lang/IllegalArgumentException";
4256        _exceptionMessage = "v == null";
4257        goto exit;
4258    }
4259    if (offset < 0) {
4260        _exception = 1;
4261        _exceptionType = "java/lang/IllegalArgumentException";
4262        _exceptionMessage = "offset < 0";
4263        goto exit;
4264    }
4265    _remaining = _env->GetArrayLength(v_ref) - offset;
4266    v_base = (GLfloat *)
4267        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4268    v = v_base + offset;
4269
4270    glUniform1fv(
4271        (GLint)location,
4272        (GLsizei)count,
4273        (GLfloat *)v
4274    );
4275
4276exit:
4277    if (v_base) {
4278        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4279            JNI_ABORT);
4280    }
4281    if (_exception) {
4282        jniThrowException(_env, _exceptionType, _exceptionMessage);
4283    }
4284}
4285
4286/* void glUniform1fv ( GLint location, GLsizei count, const GLfloat *v ) */
4287static void
4288android_glUniform1fv__IILjava_nio_FloatBuffer_2
4289  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4290    jarray _array = (jarray) 0;
4291    jint _remaining;
4292    GLfloat *v = (GLfloat *) 0;
4293
4294    v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining);
4295    glUniform1fv(
4296        (GLint)location,
4297        (GLsizei)count,
4298        (GLfloat *)v
4299    );
4300    if (_array) {
4301        releasePointer(_env, _array, v, JNI_FALSE);
4302    }
4303}
4304
4305/* void glUniform1i ( GLint location, GLint x ) */
4306static void
4307android_glUniform1i__II
4308  (JNIEnv *_env, jobject _this, jint location, jint x) {
4309    glUniform1i(
4310        (GLint)location,
4311        (GLint)x
4312    );
4313}
4314
4315/* void glUniform1iv ( GLint location, GLsizei count, const GLint *v ) */
4316static void
4317android_glUniform1iv__II_3II
4318  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray v_ref, jint offset) {
4319    jint _exception = 0;
4320    const char * _exceptionType;
4321    const char * _exceptionMessage;
4322    GLint *v_base = (GLint *) 0;
4323    jint _remaining;
4324    GLint *v = (GLint *) 0;
4325
4326    if (!v_ref) {
4327        _exception = 1;
4328        _exceptionType = "java/lang/IllegalArgumentException";
4329        _exceptionMessage = "v == null";
4330        goto exit;
4331    }
4332    if (offset < 0) {
4333        _exception = 1;
4334        _exceptionType = "java/lang/IllegalArgumentException";
4335        _exceptionMessage = "offset < 0";
4336        goto exit;
4337    }
4338    _remaining = _env->GetArrayLength(v_ref) - offset;
4339    v_base = (GLint *)
4340        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4341    v = v_base + offset;
4342
4343    glUniform1iv(
4344        (GLint)location,
4345        (GLsizei)count,
4346        (GLint *)v
4347    );
4348
4349exit:
4350    if (v_base) {
4351        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4352            JNI_ABORT);
4353    }
4354    if (_exception) {
4355        jniThrowException(_env, _exceptionType, _exceptionMessage);
4356    }
4357}
4358
4359/* void glUniform1iv ( GLint location, GLsizei count, const GLint *v ) */
4360static void
4361android_glUniform1iv__IILjava_nio_IntBuffer_2
4362  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4363    jarray _array = (jarray) 0;
4364    jint _remaining;
4365    GLint *v = (GLint *) 0;
4366
4367    v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining);
4368    glUniform1iv(
4369        (GLint)location,
4370        (GLsizei)count,
4371        (GLint *)v
4372    );
4373    if (_array) {
4374        releasePointer(_env, _array, v, JNI_FALSE);
4375    }
4376}
4377
4378/* void glUniform2f ( GLint location, GLfloat x, GLfloat y ) */
4379static void
4380android_glUniform2f__IFF
4381  (JNIEnv *_env, jobject _this, jint location, jfloat x, jfloat y) {
4382    glUniform2f(
4383        (GLint)location,
4384        (GLfloat)x,
4385        (GLfloat)y
4386    );
4387}
4388
4389/* void glUniform2fv ( GLint location, GLsizei count, const GLfloat *v ) */
4390static void
4391android_glUniform2fv__II_3FI
4392  (JNIEnv *_env, jobject _this, jint location, jint count, jfloatArray v_ref, jint offset) {
4393    jint _exception = 0;
4394    const char * _exceptionType;
4395    const char * _exceptionMessage;
4396    GLfloat *v_base = (GLfloat *) 0;
4397    jint _remaining;
4398    GLfloat *v = (GLfloat *) 0;
4399
4400    if (!v_ref) {
4401        _exception = 1;
4402        _exceptionType = "java/lang/IllegalArgumentException";
4403        _exceptionMessage = "v == null";
4404        goto exit;
4405    }
4406    if (offset < 0) {
4407        _exception = 1;
4408        _exceptionType = "java/lang/IllegalArgumentException";
4409        _exceptionMessage = "offset < 0";
4410        goto exit;
4411    }
4412    _remaining = _env->GetArrayLength(v_ref) - offset;
4413    v_base = (GLfloat *)
4414        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4415    v = v_base + offset;
4416
4417    glUniform2fv(
4418        (GLint)location,
4419        (GLsizei)count,
4420        (GLfloat *)v
4421    );
4422
4423exit:
4424    if (v_base) {
4425        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4426            JNI_ABORT);
4427    }
4428    if (_exception) {
4429        jniThrowException(_env, _exceptionType, _exceptionMessage);
4430    }
4431}
4432
4433/* void glUniform2fv ( GLint location, GLsizei count, const GLfloat *v ) */
4434static void
4435android_glUniform2fv__IILjava_nio_FloatBuffer_2
4436  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4437    jarray _array = (jarray) 0;
4438    jint _remaining;
4439    GLfloat *v = (GLfloat *) 0;
4440
4441    v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining);
4442    glUniform2fv(
4443        (GLint)location,
4444        (GLsizei)count,
4445        (GLfloat *)v
4446    );
4447    if (_array) {
4448        releasePointer(_env, _array, v, JNI_FALSE);
4449    }
4450}
4451
4452/* void glUniform2i ( GLint location, GLint x, GLint y ) */
4453static void
4454android_glUniform2i__III
4455  (JNIEnv *_env, jobject _this, jint location, jint x, jint y) {
4456    glUniform2i(
4457        (GLint)location,
4458        (GLint)x,
4459        (GLint)y
4460    );
4461}
4462
4463/* void glUniform2iv ( GLint location, GLsizei count, const GLint *v ) */
4464static void
4465android_glUniform2iv__II_3II
4466  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray v_ref, jint offset) {
4467    jint _exception = 0;
4468    const char * _exceptionType;
4469    const char * _exceptionMessage;
4470    GLint *v_base = (GLint *) 0;
4471    jint _remaining;
4472    GLint *v = (GLint *) 0;
4473
4474    if (!v_ref) {
4475        _exception = 1;
4476        _exceptionType = "java/lang/IllegalArgumentException";
4477        _exceptionMessage = "v == null";
4478        goto exit;
4479    }
4480    if (offset < 0) {
4481        _exception = 1;
4482        _exceptionType = "java/lang/IllegalArgumentException";
4483        _exceptionMessage = "offset < 0";
4484        goto exit;
4485    }
4486    _remaining = _env->GetArrayLength(v_ref) - offset;
4487    v_base = (GLint *)
4488        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4489    v = v_base + offset;
4490
4491    glUniform2iv(
4492        (GLint)location,
4493        (GLsizei)count,
4494        (GLint *)v
4495    );
4496
4497exit:
4498    if (v_base) {
4499        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4500            JNI_ABORT);
4501    }
4502    if (_exception) {
4503        jniThrowException(_env, _exceptionType, _exceptionMessage);
4504    }
4505}
4506
4507/* void glUniform2iv ( GLint location, GLsizei count, const GLint *v ) */
4508static void
4509android_glUniform2iv__IILjava_nio_IntBuffer_2
4510  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4511    jarray _array = (jarray) 0;
4512    jint _remaining;
4513    GLint *v = (GLint *) 0;
4514
4515    v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining);
4516    glUniform2iv(
4517        (GLint)location,
4518        (GLsizei)count,
4519        (GLint *)v
4520    );
4521    if (_array) {
4522        releasePointer(_env, _array, v, JNI_FALSE);
4523    }
4524}
4525
4526/* void glUniform3f ( GLint location, GLfloat x, GLfloat y, GLfloat z ) */
4527static void
4528android_glUniform3f__IFFF
4529  (JNIEnv *_env, jobject _this, jint location, jfloat x, jfloat y, jfloat z) {
4530    glUniform3f(
4531        (GLint)location,
4532        (GLfloat)x,
4533        (GLfloat)y,
4534        (GLfloat)z
4535    );
4536}
4537
4538/* void glUniform3fv ( GLint location, GLsizei count, const GLfloat *v ) */
4539static void
4540android_glUniform3fv__II_3FI
4541  (JNIEnv *_env, jobject _this, jint location, jint count, jfloatArray v_ref, jint offset) {
4542    jint _exception = 0;
4543    const char * _exceptionType;
4544    const char * _exceptionMessage;
4545    GLfloat *v_base = (GLfloat *) 0;
4546    jint _remaining;
4547    GLfloat *v = (GLfloat *) 0;
4548
4549    if (!v_ref) {
4550        _exception = 1;
4551        _exceptionType = "java/lang/IllegalArgumentException";
4552        _exceptionMessage = "v == null";
4553        goto exit;
4554    }
4555    if (offset < 0) {
4556        _exception = 1;
4557        _exceptionType = "java/lang/IllegalArgumentException";
4558        _exceptionMessage = "offset < 0";
4559        goto exit;
4560    }
4561    _remaining = _env->GetArrayLength(v_ref) - offset;
4562    v_base = (GLfloat *)
4563        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4564    v = v_base + offset;
4565
4566    glUniform3fv(
4567        (GLint)location,
4568        (GLsizei)count,
4569        (GLfloat *)v
4570    );
4571
4572exit:
4573    if (v_base) {
4574        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4575            JNI_ABORT);
4576    }
4577    if (_exception) {
4578        jniThrowException(_env, _exceptionType, _exceptionMessage);
4579    }
4580}
4581
4582/* void glUniform3fv ( GLint location, GLsizei count, const GLfloat *v ) */
4583static void
4584android_glUniform3fv__IILjava_nio_FloatBuffer_2
4585  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4586    jarray _array = (jarray) 0;
4587    jint _remaining;
4588    GLfloat *v = (GLfloat *) 0;
4589
4590    v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining);
4591    glUniform3fv(
4592        (GLint)location,
4593        (GLsizei)count,
4594        (GLfloat *)v
4595    );
4596    if (_array) {
4597        releasePointer(_env, _array, v, JNI_FALSE);
4598    }
4599}
4600
4601/* void glUniform3i ( GLint location, GLint x, GLint y, GLint z ) */
4602static void
4603android_glUniform3i__IIII
4604  (JNIEnv *_env, jobject _this, jint location, jint x, jint y, jint z) {
4605    glUniform3i(
4606        (GLint)location,
4607        (GLint)x,
4608        (GLint)y,
4609        (GLint)z
4610    );
4611}
4612
4613/* void glUniform3iv ( GLint location, GLsizei count, const GLint *v ) */
4614static void
4615android_glUniform3iv__II_3II
4616  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray v_ref, jint offset) {
4617    jint _exception = 0;
4618    const char * _exceptionType;
4619    const char * _exceptionMessage;
4620    GLint *v_base = (GLint *) 0;
4621    jint _remaining;
4622    GLint *v = (GLint *) 0;
4623
4624    if (!v_ref) {
4625        _exception = 1;
4626        _exceptionType = "java/lang/IllegalArgumentException";
4627        _exceptionMessage = "v == null";
4628        goto exit;
4629    }
4630    if (offset < 0) {
4631        _exception = 1;
4632        _exceptionType = "java/lang/IllegalArgumentException";
4633        _exceptionMessage = "offset < 0";
4634        goto exit;
4635    }
4636    _remaining = _env->GetArrayLength(v_ref) - offset;
4637    v_base = (GLint *)
4638        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4639    v = v_base + offset;
4640
4641    glUniform3iv(
4642        (GLint)location,
4643        (GLsizei)count,
4644        (GLint *)v
4645    );
4646
4647exit:
4648    if (v_base) {
4649        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4650            JNI_ABORT);
4651    }
4652    if (_exception) {
4653        jniThrowException(_env, _exceptionType, _exceptionMessage);
4654    }
4655}
4656
4657/* void glUniform3iv ( GLint location, GLsizei count, const GLint *v ) */
4658static void
4659android_glUniform3iv__IILjava_nio_IntBuffer_2
4660  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4661    jarray _array = (jarray) 0;
4662    jint _remaining;
4663    GLint *v = (GLint *) 0;
4664
4665    v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining);
4666    glUniform3iv(
4667        (GLint)location,
4668        (GLsizei)count,
4669        (GLint *)v
4670    );
4671    if (_array) {
4672        releasePointer(_env, _array, v, JNI_FALSE);
4673    }
4674}
4675
4676/* void glUniform4f ( GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) */
4677static void
4678android_glUniform4f__IFFFF
4679  (JNIEnv *_env, jobject _this, jint location, jfloat x, jfloat y, jfloat z, jfloat w) {
4680    glUniform4f(
4681        (GLint)location,
4682        (GLfloat)x,
4683        (GLfloat)y,
4684        (GLfloat)z,
4685        (GLfloat)w
4686    );
4687}
4688
4689/* void glUniform4fv ( GLint location, GLsizei count, const GLfloat *v ) */
4690static void
4691android_glUniform4fv__II_3FI
4692  (JNIEnv *_env, jobject _this, jint location, jint count, jfloatArray v_ref, jint offset) {
4693    jint _exception = 0;
4694    const char * _exceptionType;
4695    const char * _exceptionMessage;
4696    GLfloat *v_base = (GLfloat *) 0;
4697    jint _remaining;
4698    GLfloat *v = (GLfloat *) 0;
4699
4700    if (!v_ref) {
4701        _exception = 1;
4702        _exceptionType = "java/lang/IllegalArgumentException";
4703        _exceptionMessage = "v == null";
4704        goto exit;
4705    }
4706    if (offset < 0) {
4707        _exception = 1;
4708        _exceptionType = "java/lang/IllegalArgumentException";
4709        _exceptionMessage = "offset < 0";
4710        goto exit;
4711    }
4712    _remaining = _env->GetArrayLength(v_ref) - offset;
4713    v_base = (GLfloat *)
4714        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4715    v = v_base + offset;
4716
4717    glUniform4fv(
4718        (GLint)location,
4719        (GLsizei)count,
4720        (GLfloat *)v
4721    );
4722
4723exit:
4724    if (v_base) {
4725        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4726            JNI_ABORT);
4727    }
4728    if (_exception) {
4729        jniThrowException(_env, _exceptionType, _exceptionMessage);
4730    }
4731}
4732
4733/* void glUniform4fv ( GLint location, GLsizei count, const GLfloat *v ) */
4734static void
4735android_glUniform4fv__IILjava_nio_FloatBuffer_2
4736  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4737    jarray _array = (jarray) 0;
4738    jint _remaining;
4739    GLfloat *v = (GLfloat *) 0;
4740
4741    v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining);
4742    glUniform4fv(
4743        (GLint)location,
4744        (GLsizei)count,
4745        (GLfloat *)v
4746    );
4747    if (_array) {
4748        releasePointer(_env, _array, v, JNI_FALSE);
4749    }
4750}
4751
4752/* void glUniform4i ( GLint location, GLint x, GLint y, GLint z, GLint w ) */
4753static void
4754android_glUniform4i__IIIII
4755  (JNIEnv *_env, jobject _this, jint location, jint x, jint y, jint z, jint w) {
4756    glUniform4i(
4757        (GLint)location,
4758        (GLint)x,
4759        (GLint)y,
4760        (GLint)z,
4761        (GLint)w
4762    );
4763}
4764
4765/* void glUniform4iv ( GLint location, GLsizei count, const GLint *v ) */
4766static void
4767android_glUniform4iv__II_3II
4768  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray v_ref, jint offset) {
4769    jint _exception = 0;
4770    const char * _exceptionType;
4771    const char * _exceptionMessage;
4772    GLint *v_base = (GLint *) 0;
4773    jint _remaining;
4774    GLint *v = (GLint *) 0;
4775
4776    if (!v_ref) {
4777        _exception = 1;
4778        _exceptionType = "java/lang/IllegalArgumentException";
4779        _exceptionMessage = "v == null";
4780        goto exit;
4781    }
4782    if (offset < 0) {
4783        _exception = 1;
4784        _exceptionType = "java/lang/IllegalArgumentException";
4785        _exceptionMessage = "offset < 0";
4786        goto exit;
4787    }
4788    _remaining = _env->GetArrayLength(v_ref) - offset;
4789    v_base = (GLint *)
4790        _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
4791    v = v_base + offset;
4792
4793    glUniform4iv(
4794        (GLint)location,
4795        (GLsizei)count,
4796        (GLint *)v
4797    );
4798
4799exit:
4800    if (v_base) {
4801        _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
4802            JNI_ABORT);
4803    }
4804    if (_exception) {
4805        jniThrowException(_env, _exceptionType, _exceptionMessage);
4806    }
4807}
4808
4809/* void glUniform4iv ( GLint location, GLsizei count, const GLint *v ) */
4810static void
4811android_glUniform4iv__IILjava_nio_IntBuffer_2
4812  (JNIEnv *_env, jobject _this, jint location, jint count, jobject v_buf) {
4813    jarray _array = (jarray) 0;
4814    jint _remaining;
4815    GLint *v = (GLint *) 0;
4816
4817    v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining);
4818    glUniform4iv(
4819        (GLint)location,
4820        (GLsizei)count,
4821        (GLint *)v
4822    );
4823    if (_array) {
4824        releasePointer(_env, _array, v, JNI_FALSE);
4825    }
4826}
4827
4828/* void glUniformMatrix2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
4829static void
4830android_glUniformMatrix2fv__IIZ_3FI
4831  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
4832    jint _exception = 0;
4833    const char * _exceptionType;
4834    const char * _exceptionMessage;
4835    GLfloat *value_base = (GLfloat *) 0;
4836    jint _remaining;
4837    GLfloat *value = (GLfloat *) 0;
4838
4839    if (!value_ref) {
4840        _exception = 1;
4841        _exceptionType = "java/lang/IllegalArgumentException";
4842        _exceptionMessage = "value == null";
4843        goto exit;
4844    }
4845    if (offset < 0) {
4846        _exception = 1;
4847        _exceptionType = "java/lang/IllegalArgumentException";
4848        _exceptionMessage = "offset < 0";
4849        goto exit;
4850    }
4851    _remaining = _env->GetArrayLength(value_ref) - offset;
4852    value_base = (GLfloat *)
4853        _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
4854    value = value_base + offset;
4855
4856    glUniformMatrix2fv(
4857        (GLint)location,
4858        (GLsizei)count,
4859        (GLboolean)transpose,
4860        (GLfloat *)value
4861    );
4862
4863exit:
4864    if (value_base) {
4865        _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
4866            JNI_ABORT);
4867    }
4868    if (_exception) {
4869        jniThrowException(_env, _exceptionType, _exceptionMessage);
4870    }
4871}
4872
4873/* void glUniformMatrix2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
4874static void
4875android_glUniformMatrix2fv__IIZLjava_nio_FloatBuffer_2
4876  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
4877    jarray _array = (jarray) 0;
4878    jint _remaining;
4879    GLfloat *value = (GLfloat *) 0;
4880
4881    value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining);
4882    glUniformMatrix2fv(
4883        (GLint)location,
4884        (GLsizei)count,
4885        (GLboolean)transpose,
4886        (GLfloat *)value
4887    );
4888    if (_array) {
4889        releasePointer(_env, _array, value, JNI_FALSE);
4890    }
4891}
4892
4893/* void glUniformMatrix3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
4894static void
4895android_glUniformMatrix3fv__IIZ_3FI
4896  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
4897    jint _exception = 0;
4898    const char * _exceptionType;
4899    const char * _exceptionMessage;
4900    GLfloat *value_base = (GLfloat *) 0;
4901    jint _remaining;
4902    GLfloat *value = (GLfloat *) 0;
4903
4904    if (!value_ref) {
4905        _exception = 1;
4906        _exceptionType = "java/lang/IllegalArgumentException";
4907        _exceptionMessage = "value == null";
4908        goto exit;
4909    }
4910    if (offset < 0) {
4911        _exception = 1;
4912        _exceptionType = "java/lang/IllegalArgumentException";
4913        _exceptionMessage = "offset < 0";
4914        goto exit;
4915    }
4916    _remaining = _env->GetArrayLength(value_ref) - offset;
4917    value_base = (GLfloat *)
4918        _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
4919    value = value_base + offset;
4920
4921    glUniformMatrix3fv(
4922        (GLint)location,
4923        (GLsizei)count,
4924        (GLboolean)transpose,
4925        (GLfloat *)value
4926    );
4927
4928exit:
4929    if (value_base) {
4930        _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
4931            JNI_ABORT);
4932    }
4933    if (_exception) {
4934        jniThrowException(_env, _exceptionType, _exceptionMessage);
4935    }
4936}
4937
4938/* void glUniformMatrix3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
4939static void
4940android_glUniformMatrix3fv__IIZLjava_nio_FloatBuffer_2
4941  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
4942    jarray _array = (jarray) 0;
4943    jint _remaining;
4944    GLfloat *value = (GLfloat *) 0;
4945
4946    value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining);
4947    glUniformMatrix3fv(
4948        (GLint)location,
4949        (GLsizei)count,
4950        (GLboolean)transpose,
4951        (GLfloat *)value
4952    );
4953    if (_array) {
4954        releasePointer(_env, _array, value, JNI_FALSE);
4955    }
4956}
4957
4958/* void glUniformMatrix4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
4959static void
4960android_glUniformMatrix4fv__IIZ_3FI
4961  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
4962    jint _exception = 0;
4963    const char * _exceptionType;
4964    const char * _exceptionMessage;
4965    GLfloat *value_base = (GLfloat *) 0;
4966    jint _remaining;
4967    GLfloat *value = (GLfloat *) 0;
4968
4969    if (!value_ref) {
4970        _exception = 1;
4971        _exceptionType = "java/lang/IllegalArgumentException";
4972        _exceptionMessage = "value == null";
4973        goto exit;
4974    }
4975    if (offset < 0) {
4976        _exception = 1;
4977        _exceptionType = "java/lang/IllegalArgumentException";
4978        _exceptionMessage = "offset < 0";
4979        goto exit;
4980    }
4981    _remaining = _env->GetArrayLength(value_ref) - offset;
4982    value_base = (GLfloat *)
4983        _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
4984    value = value_base + offset;
4985
4986    glUniformMatrix4fv(
4987        (GLint)location,
4988        (GLsizei)count,
4989        (GLboolean)transpose,
4990        (GLfloat *)value
4991    );
4992
4993exit:
4994    if (value_base) {
4995        _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
4996            JNI_ABORT);
4997    }
4998    if (_exception) {
4999        jniThrowException(_env, _exceptionType, _exceptionMessage);
5000    }
5001}
5002
5003/* void glUniformMatrix4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
5004static void
5005android_glUniformMatrix4fv__IIZLjava_nio_FloatBuffer_2
5006  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
5007    jarray _array = (jarray) 0;
5008    jint _remaining;
5009    GLfloat *value = (GLfloat *) 0;
5010
5011    value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining);
5012    glUniformMatrix4fv(
5013        (GLint)location,
5014        (GLsizei)count,
5015        (GLboolean)transpose,
5016        (GLfloat *)value
5017    );
5018    if (_array) {
5019        releasePointer(_env, _array, value, JNI_FALSE);
5020    }
5021}
5022
5023/* void glUseProgram ( GLuint program ) */
5024static void
5025android_glUseProgram__I
5026  (JNIEnv *_env, jobject _this, jint program) {
5027    glUseProgram(
5028        (GLuint)program
5029    );
5030}
5031
5032/* void glValidateProgram ( GLuint program ) */
5033static void
5034android_glValidateProgram__I
5035  (JNIEnv *_env, jobject _this, jint program) {
5036    glValidateProgram(
5037        (GLuint)program
5038    );
5039}
5040
5041/* void glVertexAttrib1f ( GLuint indx, GLfloat x ) */
5042static void
5043android_glVertexAttrib1f__IF
5044  (JNIEnv *_env, jobject _this, jint indx, jfloat x) {
5045    glVertexAttrib1f(
5046        (GLuint)indx,
5047        (GLfloat)x
5048    );
5049}
5050
5051/* void glVertexAttrib1fv ( GLuint indx, const GLfloat *values ) */
5052static void
5053android_glVertexAttrib1fv__I_3FI
5054  (JNIEnv *_env, jobject _this, jint indx, jfloatArray values_ref, jint offset) {
5055    jint _exception = 0;
5056    const char * _exceptionType;
5057    const char * _exceptionMessage;
5058    GLfloat *values_base = (GLfloat *) 0;
5059    jint _remaining;
5060    GLfloat *values = (GLfloat *) 0;
5061
5062    if (!values_ref) {
5063        _exception = 1;
5064        _exceptionType = "java/lang/IllegalArgumentException";
5065        _exceptionMessage = "values == null";
5066        goto exit;
5067    }
5068    if (offset < 0) {
5069        _exception = 1;
5070        _exceptionType = "java/lang/IllegalArgumentException";
5071        _exceptionMessage = "offset < 0";
5072        goto exit;
5073    }
5074    _remaining = _env->GetArrayLength(values_ref) - offset;
5075    values_base = (GLfloat *)
5076        _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
5077    values = values_base + offset;
5078
5079    glVertexAttrib1fv(
5080        (GLuint)indx,
5081        (GLfloat *)values
5082    );
5083
5084exit:
5085    if (values_base) {
5086        _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
5087            JNI_ABORT);
5088    }
5089    if (_exception) {
5090        jniThrowException(_env, _exceptionType, _exceptionMessage);
5091    }
5092}
5093
5094/* void glVertexAttrib1fv ( GLuint indx, const GLfloat *values ) */
5095static void
5096android_glVertexAttrib1fv__ILjava_nio_FloatBuffer_2
5097  (JNIEnv *_env, jobject _this, jint indx, jobject values_buf) {
5098    jarray _array = (jarray) 0;
5099    jint _remaining;
5100    GLfloat *values = (GLfloat *) 0;
5101
5102    values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining);
5103    glVertexAttrib1fv(
5104        (GLuint)indx,
5105        (GLfloat *)values
5106    );
5107    if (_array) {
5108        releasePointer(_env, _array, values, JNI_FALSE);
5109    }
5110}
5111
5112/* void glVertexAttrib2f ( GLuint indx, GLfloat x, GLfloat y ) */
5113static void
5114android_glVertexAttrib2f__IFF
5115  (JNIEnv *_env, jobject _this, jint indx, jfloat x, jfloat y) {
5116    glVertexAttrib2f(
5117        (GLuint)indx,
5118        (GLfloat)x,
5119        (GLfloat)y
5120    );
5121}
5122
5123/* void glVertexAttrib2fv ( GLuint indx, const GLfloat *values ) */
5124static void
5125android_glVertexAttrib2fv__I_3FI
5126  (JNIEnv *_env, jobject _this, jint indx, jfloatArray values_ref, jint offset) {
5127    jint _exception = 0;
5128    const char * _exceptionType;
5129    const char * _exceptionMessage;
5130    GLfloat *values_base = (GLfloat *) 0;
5131    jint _remaining;
5132    GLfloat *values = (GLfloat *) 0;
5133
5134    if (!values_ref) {
5135        _exception = 1;
5136        _exceptionType = "java/lang/IllegalArgumentException";
5137        _exceptionMessage = "values == null";
5138        goto exit;
5139    }
5140    if (offset < 0) {
5141        _exception = 1;
5142        _exceptionType = "java/lang/IllegalArgumentException";
5143        _exceptionMessage = "offset < 0";
5144        goto exit;
5145    }
5146    _remaining = _env->GetArrayLength(values_ref) - offset;
5147    values_base = (GLfloat *)
5148        _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
5149    values = values_base + offset;
5150
5151    glVertexAttrib2fv(
5152        (GLuint)indx,
5153        (GLfloat *)values
5154    );
5155
5156exit:
5157    if (values_base) {
5158        _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
5159            JNI_ABORT);
5160    }
5161    if (_exception) {
5162        jniThrowException(_env, _exceptionType, _exceptionMessage);
5163    }
5164}
5165
5166/* void glVertexAttrib2fv ( GLuint indx, const GLfloat *values ) */
5167static void
5168android_glVertexAttrib2fv__ILjava_nio_FloatBuffer_2
5169  (JNIEnv *_env, jobject _this, jint indx, jobject values_buf) {
5170    jarray _array = (jarray) 0;
5171    jint _remaining;
5172    GLfloat *values = (GLfloat *) 0;
5173
5174    values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining);
5175    glVertexAttrib2fv(
5176        (GLuint)indx,
5177        (GLfloat *)values
5178    );
5179    if (_array) {
5180        releasePointer(_env, _array, values, JNI_FALSE);
5181    }
5182}
5183
5184/* void glVertexAttrib3f ( GLuint indx, GLfloat x, GLfloat y, GLfloat z ) */
5185static void
5186android_glVertexAttrib3f__IFFF
5187  (JNIEnv *_env, jobject _this, jint indx, jfloat x, jfloat y, jfloat z) {
5188    glVertexAttrib3f(
5189        (GLuint)indx,
5190        (GLfloat)x,
5191        (GLfloat)y,
5192        (GLfloat)z
5193    );
5194}
5195
5196/* void glVertexAttrib3fv ( GLuint indx, const GLfloat *values ) */
5197static void
5198android_glVertexAttrib3fv__I_3FI
5199  (JNIEnv *_env, jobject _this, jint indx, jfloatArray values_ref, jint offset) {
5200    jint _exception = 0;
5201    const char * _exceptionType;
5202    const char * _exceptionMessage;
5203    GLfloat *values_base = (GLfloat *) 0;
5204    jint _remaining;
5205    GLfloat *values = (GLfloat *) 0;
5206
5207    if (!values_ref) {
5208        _exception = 1;
5209        _exceptionType = "java/lang/IllegalArgumentException";
5210        _exceptionMessage = "values == null";
5211        goto exit;
5212    }
5213    if (offset < 0) {
5214        _exception = 1;
5215        _exceptionType = "java/lang/IllegalArgumentException";
5216        _exceptionMessage = "offset < 0";
5217        goto exit;
5218    }
5219    _remaining = _env->GetArrayLength(values_ref) - offset;
5220    values_base = (GLfloat *)
5221        _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
5222    values = values_base + offset;
5223
5224    glVertexAttrib3fv(
5225        (GLuint)indx,
5226        (GLfloat *)values
5227    );
5228
5229exit:
5230    if (values_base) {
5231        _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
5232            JNI_ABORT);
5233    }
5234    if (_exception) {
5235        jniThrowException(_env, _exceptionType, _exceptionMessage);
5236    }
5237}
5238
5239/* void glVertexAttrib3fv ( GLuint indx, const GLfloat *values ) */
5240static void
5241android_glVertexAttrib3fv__ILjava_nio_FloatBuffer_2
5242  (JNIEnv *_env, jobject _this, jint indx, jobject values_buf) {
5243    jarray _array = (jarray) 0;
5244    jint _remaining;
5245    GLfloat *values = (GLfloat *) 0;
5246
5247    values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining);
5248    glVertexAttrib3fv(
5249        (GLuint)indx,
5250        (GLfloat *)values
5251    );
5252    if (_array) {
5253        releasePointer(_env, _array, values, JNI_FALSE);
5254    }
5255}
5256
5257/* void glVertexAttrib4f ( GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w ) */
5258static void
5259android_glVertexAttrib4f__IFFFF
5260  (JNIEnv *_env, jobject _this, jint indx, jfloat x, jfloat y, jfloat z, jfloat w) {
5261    glVertexAttrib4f(
5262        (GLuint)indx,
5263        (GLfloat)x,
5264        (GLfloat)y,
5265        (GLfloat)z,
5266        (GLfloat)w
5267    );
5268}
5269
5270/* void glVertexAttrib4fv ( GLuint indx, const GLfloat *values ) */
5271static void
5272android_glVertexAttrib4fv__I_3FI
5273  (JNIEnv *_env, jobject _this, jint indx, jfloatArray values_ref, jint offset) {
5274    jint _exception = 0;
5275    const char * _exceptionType;
5276    const char * _exceptionMessage;
5277    GLfloat *values_base = (GLfloat *) 0;
5278    jint _remaining;
5279    GLfloat *values = (GLfloat *) 0;
5280
5281    if (!values_ref) {
5282        _exception = 1;
5283        _exceptionType = "java/lang/IllegalArgumentException";
5284        _exceptionMessage = "values == null";
5285        goto exit;
5286    }
5287    if (offset < 0) {
5288        _exception = 1;
5289        _exceptionType = "java/lang/IllegalArgumentException";
5290        _exceptionMessage = "offset < 0";
5291        goto exit;
5292    }
5293    _remaining = _env->GetArrayLength(values_ref) - offset;
5294    values_base = (GLfloat *)
5295        _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
5296    values = values_base + offset;
5297
5298    glVertexAttrib4fv(
5299        (GLuint)indx,
5300        (GLfloat *)values
5301    );
5302
5303exit:
5304    if (values_base) {
5305        _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
5306            JNI_ABORT);
5307    }
5308    if (_exception) {
5309        jniThrowException(_env, _exceptionType, _exceptionMessage);
5310    }
5311}
5312
5313/* void glVertexAttrib4fv ( GLuint indx, const GLfloat *values ) */
5314static void
5315android_glVertexAttrib4fv__ILjava_nio_FloatBuffer_2
5316  (JNIEnv *_env, jobject _this, jint indx, jobject values_buf) {
5317    jarray _array = (jarray) 0;
5318    jint _remaining;
5319    GLfloat *values = (GLfloat *) 0;
5320
5321    values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining);
5322    glVertexAttrib4fv(
5323        (GLuint)indx,
5324        (GLfloat *)values
5325    );
5326    if (_array) {
5327        releasePointer(_env, _array, values, JNI_FALSE);
5328    }
5329}
5330
5331/* void glVertexAttribPointer ( GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLint offset ) */
5332static void
5333android_glVertexAttribPointer__IIIZII
5334  (JNIEnv *_env, jobject _this, jint indx, jint size, jint type, jboolean normalized, jint stride, jint offset) {
5335    glVertexAttribPointer(
5336        (GLuint)indx,
5337        (GLint)size,
5338        (GLenum)type,
5339        (GLboolean)normalized,
5340        (GLsizei)stride,
5341        (const GLvoid *)offset
5342    );
5343}
5344
5345/* void glVertexAttribPointer ( GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *ptr ) */
5346static void
5347android_glVertexAttribPointerBounds__IIIZILjava_nio_Buffer_2I
5348  (JNIEnv *_env, jobject _this, jint indx, jint size, jint type, jboolean normalized, jint stride, jobject ptr_buf, jint remaining) {
5349    jarray _array = (jarray) 0;
5350    jint _remaining;
5351    GLvoid *ptr = (GLvoid *) 0;
5352
5353    if (ptr_buf) {
5354        ptr = (GLvoid *) getDirectBufferPointer(_env, ptr_buf);
5355        if ( ! ptr ) {
5356            return;
5357        }
5358    }
5359    glVertexAttribPointerBounds(
5360        (GLuint)indx,
5361        (GLint)size,
5362        (GLenum)type,
5363        (GLboolean)normalized,
5364        (GLsizei)stride,
5365        (GLvoid *)ptr,
5366        (GLsizei)remaining
5367    );
5368}
5369
5370/* void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ) */
5371static void
5372android_glViewport__IIII
5373  (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
5374    glViewport(
5375        (GLint)x,
5376        (GLint)y,
5377        (GLsizei)width,
5378        (GLsizei)height
5379    );
5380}
5381
5382static const char *classPathName = "android/opengl/GLES20";
5383
5384static JNINativeMethod methods[] = {
5385{"_nativeClassInit", "()V", (void*)nativeClassInit },
5386{"glActiveTexture", "(I)V", (void *) android_glActiveTexture__I },
5387{"glAttachShader", "(II)V", (void *) android_glAttachShader__II },
5388{"glBindAttribLocation", "(IILjava/lang/String;)V", (void *) android_glBindAttribLocation__IILjava_lang_String_2 },
5389{"glBindBuffer", "(II)V", (void *) android_glBindBuffer__II },
5390{"glBindFramebuffer", "(II)V", (void *) android_glBindFramebuffer__II },
5391{"glBindRenderbuffer", "(II)V", (void *) android_glBindRenderbuffer__II },
5392{"glBindTexture", "(II)V", (void *) android_glBindTexture__II },
5393{"glBlendColor", "(FFFF)V", (void *) android_glBlendColor__FFFF },
5394{"glBlendEquation", "(I)V", (void *) android_glBlendEquation__I },
5395{"glBlendEquationSeparate", "(II)V", (void *) android_glBlendEquationSeparate__II },
5396{"glBlendFunc", "(II)V", (void *) android_glBlendFunc__II },
5397{"glBlendFuncSeparate", "(IIII)V", (void *) android_glBlendFuncSeparate__IIII },
5398{"glBufferData", "(IILjava/nio/Buffer;I)V", (void *) android_glBufferData__IILjava_nio_Buffer_2I },
5399{"glBufferSubData", "(IIILjava/nio/Buffer;)V", (void *) android_glBufferSubData__IIILjava_nio_Buffer_2 },
5400{"glCheckFramebufferStatus", "(I)I", (void *) android_glCheckFramebufferStatus__I },
5401{"glClear", "(I)V", (void *) android_glClear__I },
5402{"glClearColor", "(FFFF)V", (void *) android_glClearColor__FFFF },
5403{"glClearDepthf", "(F)V", (void *) android_glClearDepthf__F },
5404{"glClearStencil", "(I)V", (void *) android_glClearStencil__I },
5405{"glColorMask", "(ZZZZ)V", (void *) android_glColorMask__ZZZZ },
5406{"glCompileShader", "(I)V", (void *) android_glCompileShader__I },
5407{"glCompressedTexImage2D", "(IIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2 },
5408{"glCompressedTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
5409{"glCopyTexImage2D", "(IIIIIIII)V", (void *) android_glCopyTexImage2D__IIIIIIII },
5410{"glCopyTexSubImage2D", "(IIIIIIII)V", (void *) android_glCopyTexSubImage2D__IIIIIIII },
5411{"glCreateProgram", "()I", (void *) android_glCreateProgram__ },
5412{"glCreateShader", "(I)I", (void *) android_glCreateShader__I },
5413{"glCullFace", "(I)V", (void *) android_glCullFace__I },
5414{"glDeleteBuffers", "(I[II)V", (void *) android_glDeleteBuffers__I_3II },
5415{"glDeleteBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteBuffers__ILjava_nio_IntBuffer_2 },
5416{"glDeleteFramebuffers", "(I[II)V", (void *) android_glDeleteFramebuffers__I_3II },
5417{"glDeleteFramebuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteFramebuffers__ILjava_nio_IntBuffer_2 },
5418{"glDeleteProgram", "(I)V", (void *) android_glDeleteProgram__I },
5419{"glDeleteRenderbuffers", "(I[II)V", (void *) android_glDeleteRenderbuffers__I_3II },
5420{"glDeleteRenderbuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteRenderbuffers__ILjava_nio_IntBuffer_2 },
5421{"glDeleteShader", "(I)V", (void *) android_glDeleteShader__I },
5422{"glDeleteTextures", "(I[II)V", (void *) android_glDeleteTextures__I_3II },
5423{"glDeleteTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTextures__ILjava_nio_IntBuffer_2 },
5424{"glDepthFunc", "(I)V", (void *) android_glDepthFunc__I },
5425{"glDepthMask", "(Z)V", (void *) android_glDepthMask__Z },
5426{"glDepthRangef", "(FF)V", (void *) android_glDepthRangef__FF },
5427{"glDetachShader", "(II)V", (void *) android_glDetachShader__II },
5428{"glDisable", "(I)V", (void *) android_glDisable__I },
5429{"glDisableVertexAttribArray", "(I)V", (void *) android_glDisableVertexAttribArray__I },
5430{"glDrawArrays", "(III)V", (void *) android_glDrawArrays__III },
5431{"glDrawElements", "(IIII)V", (void *) android_glDrawElements__IIII },
5432{"glDrawElements", "(IIILjava/nio/Buffer;)V", (void *) android_glDrawElements__IIILjava_nio_Buffer_2 },
5433{"glEnable", "(I)V", (void *) android_glEnable__I },
5434{"glEnableVertexAttribArray", "(I)V", (void *) android_glEnableVertexAttribArray__I },
5435{"glFinish", "()V", (void *) android_glFinish__ },
5436{"glFlush", "()V", (void *) android_glFlush__ },
5437{"glFramebufferRenderbuffer", "(IIII)V", (void *) android_glFramebufferRenderbuffer__IIII },
5438{"glFramebufferTexture2D", "(IIIII)V", (void *) android_glFramebufferTexture2D__IIIII },
5439{"glFrontFace", "(I)V", (void *) android_glFrontFace__I },
5440{"glGenBuffers", "(I[II)V", (void *) android_glGenBuffers__I_3II },
5441{"glGenBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenBuffers__ILjava_nio_IntBuffer_2 },
5442{"glGenerateMipmap", "(I)V", (void *) android_glGenerateMipmap__I },
5443{"glGenFramebuffers", "(I[II)V", (void *) android_glGenFramebuffers__I_3II },
5444{"glGenFramebuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenFramebuffers__ILjava_nio_IntBuffer_2 },
5445{"glGenRenderbuffers", "(I[II)V", (void *) android_glGenRenderbuffers__I_3II },
5446{"glGenRenderbuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenRenderbuffers__ILjava_nio_IntBuffer_2 },
5447{"glGenTextures", "(I[II)V", (void *) android_glGenTextures__I_3II },
5448{"glGenTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTextures__ILjava_nio_IntBuffer_2 },
5449{"glGetActiveAttrib", "(III[II[II[II[BI)V", (void *) android_glGetActiveAttrib__III_3II_3II_3II_3BI },
5450{"glGetActiveAttrib", "(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V", (void *) android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B },
5451{"glGetActiveUniform", "(III[II[II[II[BI)V", (void *) android_glGetActiveUniform__III_3II_3II_3II_3BI },
5452{"glGetActiveUniform", "(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V", (void *) android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B },
5453{"glGetAttachedShaders", "(II[II[II)V", (void *) android_glGetAttachedShaders__II_3II_3II },
5454{"glGetAttachedShaders", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetAttachedShaders__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
5455{"glGetAttribLocation", "(ILjava/lang/String;)I", (void *) android_glGetAttribLocation__ILjava_lang_String_2 },
5456{"glGetBooleanv", "(I[ZI)V", (void *) android_glGetBooleanv__I_3ZI },
5457{"glGetBooleanv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetBooleanv__ILjava_nio_IntBuffer_2 },
5458{"glGetBufferParameteriv", "(II[II)V", (void *) android_glGetBufferParameteriv__II_3II },
5459{"glGetBufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetBufferParameteriv__IILjava_nio_IntBuffer_2 },
5460{"glGetError", "()I", (void *) android_glGetError__ },
5461{"glGetFloatv", "(I[FI)V", (void *) android_glGetFloatv__I_3FI },
5462{"glGetFloatv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glGetFloatv__ILjava_nio_FloatBuffer_2 },
5463{"glGetFramebufferAttachmentParameteriv", "(III[II)V", (void *) android_glGetFramebufferAttachmentParameteriv__III_3II },
5464{"glGetFramebufferAttachmentParameteriv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetFramebufferAttachmentParameteriv__IIILjava_nio_IntBuffer_2 },
5465{"glGetIntegerv", "(I[II)V", (void *) android_glGetIntegerv__I_3II },
5466{"glGetIntegerv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetIntegerv__ILjava_nio_IntBuffer_2 },
5467{"glGetProgramiv", "(II[II)V", (void *) android_glGetProgramiv__II_3II },
5468{"glGetProgramiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetProgramiv__IILjava_nio_IntBuffer_2 },
5469{"glGetProgramInfoLog", "(I)Ljava/lang/String;", (void *) android_glGetProgramInfoLog },
5470{"glGetRenderbufferParameteriv", "(II[II)V", (void *) android_glGetRenderbufferParameteriv__II_3II },
5471{"glGetRenderbufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetRenderbufferParameteriv__IILjava_nio_IntBuffer_2 },
5472{"glGetShaderiv", "(II[II)V", (void *) android_glGetShaderiv__II_3II },
5473{"glGetShaderiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetShaderiv__IILjava_nio_IntBuffer_2 },
5474{"glGetShaderInfoLog", "(I)Ljava/lang/String;", (void *) android_glGetShaderInfoLog },
5475{"glGetShaderPrecisionFormat", "(II[II[II)V", (void *) android_glGetShaderPrecisionFormat__II_3II_3II },
5476{"glGetShaderPrecisionFormat", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetShaderPrecisionFormat__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
5477{"glGetShaderSource", "(II[II[BI)V", (void *) android_glGetShaderSource__II_3II_3BI },
5478{"glGetShaderSource", "(IILjava/nio/IntBuffer;B)V", (void *) android_glGetShaderSource__IILjava_nio_IntBuffer_2B },
5479{"glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString },
5480{"glGetTexParameterfv", "(II[FI)V", (void *) android_glGetTexParameterfv__II_3FI },
5481{"glGetTexParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetTexParameterfv__IILjava_nio_FloatBuffer_2 },
5482{"glGetTexParameteriv", "(II[II)V", (void *) android_glGetTexParameteriv__II_3II },
5483{"glGetTexParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameteriv__IILjava_nio_IntBuffer_2 },
5484{"glGetUniformfv", "(II[FI)V", (void *) android_glGetUniformfv__II_3FI },
5485{"glGetUniformfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetUniformfv__IILjava_nio_FloatBuffer_2 },
5486{"glGetUniformiv", "(II[II)V", (void *) android_glGetUniformiv__II_3II },
5487{"glGetUniformiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetUniformiv__IILjava_nio_IntBuffer_2 },
5488{"glGetUniformLocation", "(ILjava/lang/String;)I", (void *) android_glGetUniformLocation__ILjava_lang_String_2 },
5489{"glGetVertexAttribfv", "(II[FI)V", (void *) android_glGetVertexAttribfv__II_3FI },
5490{"glGetVertexAttribfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetVertexAttribfv__IILjava_nio_FloatBuffer_2 },
5491{"glGetVertexAttribiv", "(II[II)V", (void *) android_glGetVertexAttribiv__II_3II },
5492{"glGetVertexAttribiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribiv__IILjava_nio_IntBuffer_2 },
5493{"glHint", "(II)V", (void *) android_glHint__II },
5494{"glIsBuffer", "(I)Z", (void *) android_glIsBuffer__I },
5495{"glIsEnabled", "(I)Z", (void *) android_glIsEnabled__I },
5496{"glIsFramebuffer", "(I)Z", (void *) android_glIsFramebuffer__I },
5497{"glIsProgram", "(I)Z", (void *) android_glIsProgram__I },
5498{"glIsRenderbuffer", "(I)Z", (void *) android_glIsRenderbuffer__I },
5499{"glIsShader", "(I)Z", (void *) android_glIsShader__I },
5500{"glIsTexture", "(I)Z", (void *) android_glIsTexture__I },
5501{"glLineWidth", "(F)V", (void *) android_glLineWidth__F },
5502{"glLinkProgram", "(I)V", (void *) android_glLinkProgram__I },
5503{"glPixelStorei", "(II)V", (void *) android_glPixelStorei__II },
5504{"glPolygonOffset", "(FF)V", (void *) android_glPolygonOffset__FF },
5505{"glReadPixels", "(IIIIIILjava/nio/Buffer;)V", (void *) android_glReadPixels__IIIIIILjava_nio_Buffer_2 },
5506{"glReleaseShaderCompiler", "()V", (void *) android_glReleaseShaderCompiler__ },
5507{"glRenderbufferStorage", "(IIII)V", (void *) android_glRenderbufferStorage__IIII },
5508{"glSampleCoverage", "(FZ)V", (void *) android_glSampleCoverage__FZ },
5509{"glScissor", "(IIII)V", (void *) android_glScissor__IIII },
5510{"glShaderBinary", "(I[IIILjava/nio/Buffer;I)V", (void *) android_glShaderBinary__I_3IIILjava_nio_Buffer_2I },
5511{"glShaderBinary", "(ILjava/nio/IntBuffer;ILjava/nio/Buffer;I)V", (void *) android_glShaderBinary__ILjava_nio_IntBuffer_2ILjava_nio_Buffer_2I },
5512{"glShaderSource", "(ILjava/lang/String;)V", (void *) android_glShaderSource },
5513{"glStencilFunc", "(III)V", (void *) android_glStencilFunc__III },
5514{"glStencilFuncSeparate", "(IIII)V", (void *) android_glStencilFuncSeparate__IIII },
5515{"glStencilMask", "(I)V", (void *) android_glStencilMask__I },
5516{"glStencilMaskSeparate", "(II)V", (void *) android_glStencilMaskSeparate__II },
5517{"glStencilOp", "(III)V", (void *) android_glStencilOp__III },
5518{"glStencilOpSeparate", "(IIII)V", (void *) android_glStencilOpSeparate__IIII },
5519{"glTexImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2 },
5520{"glTexParameterf", "(IIF)V", (void *) android_glTexParameterf__IIF },
5521{"glTexParameterfv", "(II[FI)V", (void *) android_glTexParameterfv__II_3FI },
5522{"glTexParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexParameterfv__IILjava_nio_FloatBuffer_2 },
5523{"glTexParameteri", "(III)V", (void *) android_glTexParameteri__III },
5524{"glTexParameteriv", "(II[II)V", (void *) android_glTexParameteriv__II_3II },
5525{"glTexParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameteriv__IILjava_nio_IntBuffer_2 },
5526{"glTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
5527{"glUniform1f", "(IF)V", (void *) android_glUniform1f__IF },
5528{"glUniform1fv", "(II[FI)V", (void *) android_glUniform1fv__II_3FI },
5529{"glUniform1fv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glUniform1fv__IILjava_nio_FloatBuffer_2 },
5530{"glUniform1i", "(II)V", (void *) android_glUniform1i__II },
5531{"glUniform1iv", "(II[II)V", (void *) android_glUniform1iv__II_3II },
5532{"glUniform1iv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform1iv__IILjava_nio_IntBuffer_2 },
5533{"glUniform2f", "(IFF)V", (void *) android_glUniform2f__IFF },
5534{"glUniform2fv", "(II[FI)V", (void *) android_glUniform2fv__II_3FI },
5535{"glUniform2fv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glUniform2fv__IILjava_nio_FloatBuffer_2 },
5536{"glUniform2i", "(III)V", (void *) android_glUniform2i__III },
5537{"glUniform2iv", "(II[II)V", (void *) android_glUniform2iv__II_3II },
5538{"glUniform2iv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform2iv__IILjava_nio_IntBuffer_2 },
5539{"glUniform3f", "(IFFF)V", (void *) android_glUniform3f__IFFF },
5540{"glUniform3fv", "(II[FI)V", (void *) android_glUniform3fv__II_3FI },
5541{"glUniform3fv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glUniform3fv__IILjava_nio_FloatBuffer_2 },
5542{"glUniform3i", "(IIII)V", (void *) android_glUniform3i__IIII },
5543{"glUniform3iv", "(II[II)V", (void *) android_glUniform3iv__II_3II },
5544{"glUniform3iv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform3iv__IILjava_nio_IntBuffer_2 },
5545{"glUniform4f", "(IFFFF)V", (void *) android_glUniform4f__IFFFF },
5546{"glUniform4fv", "(II[FI)V", (void *) android_glUniform4fv__II_3FI },
5547{"glUniform4fv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glUniform4fv__IILjava_nio_FloatBuffer_2 },
5548{"glUniform4i", "(IIIII)V", (void *) android_glUniform4i__IIIII },
5549{"glUniform4iv", "(II[II)V", (void *) android_glUniform4iv__II_3II },
5550{"glUniform4iv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform4iv__IILjava_nio_IntBuffer_2 },
5551{"glUniformMatrix2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2fv__IIZ_3FI },
5552{"glUniformMatrix2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2fv__IIZLjava_nio_FloatBuffer_2 },
5553{"glUniformMatrix3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3fv__IIZ_3FI },
5554{"glUniformMatrix3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3fv__IIZLjava_nio_FloatBuffer_2 },
5555{"glUniformMatrix4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4fv__IIZ_3FI },
5556{"glUniformMatrix4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4fv__IIZLjava_nio_FloatBuffer_2 },
5557{"glUseProgram", "(I)V", (void *) android_glUseProgram__I },
5558{"glValidateProgram", "(I)V", (void *) android_glValidateProgram__I },
5559{"glVertexAttrib1f", "(IF)V", (void *) android_glVertexAttrib1f__IF },
5560{"glVertexAttrib1fv", "(I[FI)V", (void *) android_glVertexAttrib1fv__I_3FI },
5561{"glVertexAttrib1fv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glVertexAttrib1fv__ILjava_nio_FloatBuffer_2 },
5562{"glVertexAttrib2f", "(IFF)V", (void *) android_glVertexAttrib2f__IFF },
5563{"glVertexAttrib2fv", "(I[FI)V", (void *) android_glVertexAttrib2fv__I_3FI },
5564{"glVertexAttrib2fv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glVertexAttrib2fv__ILjava_nio_FloatBuffer_2 },
5565{"glVertexAttrib3f", "(IFFF)V", (void *) android_glVertexAttrib3f__IFFF },
5566{"glVertexAttrib3fv", "(I[FI)V", (void *) android_glVertexAttrib3fv__I_3FI },
5567{"glVertexAttrib3fv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glVertexAttrib3fv__ILjava_nio_FloatBuffer_2 },
5568{"glVertexAttrib4f", "(IFFFF)V", (void *) android_glVertexAttrib4f__IFFFF },
5569{"glVertexAttrib4fv", "(I[FI)V", (void *) android_glVertexAttrib4fv__I_3FI },
5570{"glVertexAttrib4fv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glVertexAttrib4fv__ILjava_nio_FloatBuffer_2 },
5571{"glVertexAttribPointer", "(IIIZII)V", (void *) android_glVertexAttribPointer__IIIZII },
5572{"glVertexAttribPointerBounds", "(IIIZILjava/nio/Buffer;I)V", (void *) android_glVertexAttribPointerBounds__IIIZILjava_nio_Buffer_2I },
5573{"glViewport", "(IIII)V", (void *) android_glViewport__IIII },
5574};
5575
5576int register_android_opengl_jni_GLES20(JNIEnv *_env)
5577{
5578    int err;
5579    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
5580    return err;
5581}
5582