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