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