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