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