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 <GLES/gl.h>
     24 #include <GLES/glext.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 glAlphaFunc ( GLenum func, GLclampf ref ) */
    467 static void
    468 android_glAlphaFunc__IF
    469   (JNIEnv *_env, jobject _this, jint func, jfloat ref) {
    470     glAlphaFunc(
    471         (GLenum)func,
    472         (GLclampf)ref
    473     );
    474 }
    475 
    476 /* void glAlphaFuncx ( GLenum func, GLclampx ref ) */
    477 static void
    478 android_glAlphaFuncx__II
    479   (JNIEnv *_env, jobject _this, jint func, jint ref) {
    480     glAlphaFuncx(
    481         (GLenum)func,
    482         (GLclampx)ref
    483     );
    484 }
    485 
    486 /* void glBindTexture ( GLenum target, GLuint texture ) */
    487 static void
    488 android_glBindTexture__II
    489   (JNIEnv *_env, jobject _this, jint target, jint texture) {
    490     glBindTexture(
    491         (GLenum)target,
    492         (GLuint)texture
    493     );
    494 }
    495 
    496 /* void glBlendFunc ( GLenum sfactor, GLenum dfactor ) */
    497 static void
    498 android_glBlendFunc__II
    499   (JNIEnv *_env, jobject _this, jint sfactor, jint dfactor) {
    500     glBlendFunc(
    501         (GLenum)sfactor,
    502         (GLenum)dfactor
    503     );
    504 }
    505 
    506 /* void glClear ( GLbitfield mask ) */
    507 static void
    508 android_glClear__I
    509   (JNIEnv *_env, jobject _this, jint mask) {
    510     glClear(
    511         (GLbitfield)mask
    512     );
    513 }
    514 
    515 /* void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) */
    516 static void
    517 android_glClearColor__FFFF
    518   (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
    519     glClearColor(
    520         (GLclampf)red,
    521         (GLclampf)green,
    522         (GLclampf)blue,
    523         (GLclampf)alpha
    524     );
    525 }
    526 
    527 /* void glClearColorx ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha ) */
    528 static void
    529 android_glClearColorx__IIII
    530   (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
    531     glClearColorx(
    532         (GLclampx)red,
    533         (GLclampx)green,
    534         (GLclampx)blue,
    535         (GLclampx)alpha
    536     );
    537 }
    538 
    539 /* void glClearDepthf ( GLclampf depth ) */
    540 static void
    541 android_glClearDepthf__F
    542   (JNIEnv *_env, jobject _this, jfloat depth) {
    543     glClearDepthf(
    544         (GLclampf)depth
    545     );
    546 }
    547 
    548 /* void glClearDepthx ( GLclampx depth ) */
    549 static void
    550 android_glClearDepthx__I
    551   (JNIEnv *_env, jobject _this, jint depth) {
    552     glClearDepthx(
    553         (GLclampx)depth
    554     );
    555 }
    556 
    557 /* void glClearStencil ( GLint s ) */
    558 static void
    559 android_glClearStencil__I
    560   (JNIEnv *_env, jobject _this, jint s) {
    561     glClearStencil(
    562         (GLint)s
    563     );
    564 }
    565 
    566 /* void glClientActiveTexture ( GLenum texture ) */
    567 static void
    568 android_glClientActiveTexture__I
    569   (JNIEnv *_env, jobject _this, jint texture) {
    570     glClientActiveTexture(
    571         (GLenum)texture
    572     );
    573 }
    574 
    575 /* void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) */
    576 static void
    577 android_glColor4f__FFFF
    578   (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
    579     glColor4f(
    580         (GLfloat)red,
    581         (GLfloat)green,
    582         (GLfloat)blue,
    583         (GLfloat)alpha
    584     );
    585 }
    586 
    587 /* void glColor4x ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha ) */
    588 static void
    589 android_glColor4x__IIII
    590   (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
    591     glColor4x(
    592         (GLfixed)red,
    593         (GLfixed)green,
    594         (GLfixed)blue,
    595         (GLfixed)alpha
    596     );
    597 }
    598 
    599 /* void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ) */
    600 static void
    601 android_glColorMask__ZZZZ
    602   (JNIEnv *_env, jobject _this, jboolean red, jboolean green, jboolean blue, jboolean alpha) {
    603     glColorMask(
    604         (GLboolean)red,
    605         (GLboolean)green,
    606         (GLboolean)blue,
    607         (GLboolean)alpha
    608     );
    609 }
    610 
    611 /* void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
    612 static void
    613 android_glColorPointerBounds__IIILjava_nio_Buffer_2I
    614   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
    615     jint _exception = 0;
    616     const char * _exceptionType = NULL;
    617     const char * _exceptionMessage = NULL;
    618     jarray _array = (jarray) 0;
    619     jint _bufferOffset = (jint) 0;
    620     jint _remaining;
    621     GLvoid *pointer = (GLvoid *) 0;
    622 
    623     if (pointer_buf) {
    624         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
    625         if ( ! pointer ) {
    626             return;
    627         }
    628     }
    629     glColorPointerBounds(
    630         (GLint)size,
    631         (GLenum)type,
    632         (GLsizei)stride,
    633         (GLvoid *)pointer,
    634         (GLsizei)remaining
    635     );
    636     if (_exception) {
    637         jniThrowException(_env, _exceptionType, _exceptionMessage);
    638     }
    639 }
    640 
    641 /* void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ) */
    642 static void
    643 android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
    644   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint imageSize, jobject data_buf) {
    645     jint _exception = 0;
    646     const char * _exceptionType = NULL;
    647     const char * _exceptionMessage = NULL;
    648     jarray _array = (jarray) 0;
    649     jint _bufferOffset = (jint) 0;
    650     jint _remaining;
    651     GLvoid *data = (GLvoid *) 0;
    652 
    653     if (!data_buf) {
    654         _exception = 1;
    655         _exceptionType = "java/lang/IllegalArgumentException";
    656         _exceptionMessage = "data == null";
    657         goto exit;
    658     }
    659     data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    660     if (data == NULL) {
    661         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    662         data = (GLvoid *) (_dataBase + _bufferOffset);
    663     }
    664     glCompressedTexImage2D(
    665         (GLenum)target,
    666         (GLint)level,
    667         (GLenum)internalformat,
    668         (GLsizei)width,
    669         (GLsizei)height,
    670         (GLint)border,
    671         (GLsizei)imageSize,
    672         (GLvoid *)data
    673     );
    674 
    675 exit:
    676     if (_array) {
    677         releasePointer(_env, _array, data, JNI_FALSE);
    678     }
    679     if (_exception) {
    680         jniThrowException(_env, _exceptionType, _exceptionMessage);
    681     }
    682 }
    683 
    684 /* void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ) */
    685 static void
    686 android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
    687   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint imageSize, jobject data_buf) {
    688     jint _exception = 0;
    689     const char * _exceptionType = NULL;
    690     const char * _exceptionMessage = NULL;
    691     jarray _array = (jarray) 0;
    692     jint _bufferOffset = (jint) 0;
    693     jint _remaining;
    694     GLvoid *data = (GLvoid *) 0;
    695 
    696     if (!data_buf) {
    697         _exception = 1;
    698         _exceptionType = "java/lang/IllegalArgumentException";
    699         _exceptionMessage = "data == null";
    700         goto exit;
    701     }
    702     data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    703     if (data == NULL) {
    704         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    705         data = (GLvoid *) (_dataBase + _bufferOffset);
    706     }
    707     glCompressedTexSubImage2D(
    708         (GLenum)target,
    709         (GLint)level,
    710         (GLint)xoffset,
    711         (GLint)yoffset,
    712         (GLsizei)width,
    713         (GLsizei)height,
    714         (GLenum)format,
    715         (GLsizei)imageSize,
    716         (GLvoid *)data
    717     );
    718 
    719 exit:
    720     if (_array) {
    721         releasePointer(_env, _array, data, JNI_FALSE);
    722     }
    723     if (_exception) {
    724         jniThrowException(_env, _exceptionType, _exceptionMessage);
    725     }
    726 }
    727 
    728 /* void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) */
    729 static void
    730 android_glCopyTexImage2D__IIIIIIII
    731   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint x, jint y, jint width, jint height, jint border) {
    732     glCopyTexImage2D(
    733         (GLenum)target,
    734         (GLint)level,
    735         (GLenum)internalformat,
    736         (GLint)x,
    737         (GLint)y,
    738         (GLsizei)width,
    739         (GLsizei)height,
    740         (GLint)border
    741     );
    742 }
    743 
    744 /* void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
    745 static void
    746 android_glCopyTexSubImage2D__IIIIIIII
    747   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint x, jint y, jint width, jint height) {
    748     glCopyTexSubImage2D(
    749         (GLenum)target,
    750         (GLint)level,
    751         (GLint)xoffset,
    752         (GLint)yoffset,
    753         (GLint)x,
    754         (GLint)y,
    755         (GLsizei)width,
    756         (GLsizei)height
    757     );
    758 }
    759 
    760 /* void glCullFace ( GLenum mode ) */
    761 static void
    762 android_glCullFace__I
    763   (JNIEnv *_env, jobject _this, jint mode) {
    764     glCullFace(
    765         (GLenum)mode
    766     );
    767 }
    768 
    769 /* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
    770 static void
    771 android_glDeleteTextures__I_3II
    772   (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
    773     jint _exception = 0;
    774     const char * _exceptionType = NULL;
    775     const char * _exceptionMessage = NULL;
    776     GLuint *textures_base = (GLuint *) 0;
    777     jint _remaining;
    778     GLuint *textures = (GLuint *) 0;
    779 
    780     if (!textures_ref) {
    781         _exception = 1;
    782         _exceptionType = "java/lang/IllegalArgumentException";
    783         _exceptionMessage = "textures == null";
    784         goto exit;
    785     }
    786     if (offset < 0) {
    787         _exception = 1;
    788         _exceptionType = "java/lang/IllegalArgumentException";
    789         _exceptionMessage = "offset < 0";
    790         goto exit;
    791     }
    792     _remaining = _env->GetArrayLength(textures_ref) - offset;
    793     if (_remaining < n) {
    794         _exception = 1;
    795         _exceptionType = "java/lang/IllegalArgumentException";
    796         _exceptionMessage = "length - offset < n < needed";
    797         goto exit;
    798     }
    799     textures_base = (GLuint *)
    800         _env->GetIntArrayElements(textures_ref, (jboolean *)0);
    801     textures = textures_base + offset;
    802 
    803     glDeleteTextures(
    804         (GLsizei)n,
    805         (GLuint *)textures
    806     );
    807 
    808 exit:
    809     if (textures_base) {
    810         _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
    811             JNI_ABORT);
    812     }
    813     if (_exception) {
    814         jniThrowException(_env, _exceptionType, _exceptionMessage);
    815     }
    816 }
    817 
    818 /* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
    819 static void
    820 android_glDeleteTextures__ILjava_nio_IntBuffer_2
    821   (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
    822     jint _exception = 0;
    823     const char * _exceptionType = NULL;
    824     const char * _exceptionMessage = NULL;
    825     jintArray _array = (jintArray) 0;
    826     jint _bufferOffset = (jint) 0;
    827     jint _remaining;
    828     GLuint *textures = (GLuint *) 0;
    829 
    830     if (!textures_buf) {
    831         _exception = 1;
    832         _exceptionType = "java/lang/IllegalArgumentException";
    833         _exceptionMessage = "textures == null";
    834         goto exit;
    835     }
    836     textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    837     if (_remaining < n) {
    838         _exception = 1;
    839         _exceptionType = "java/lang/IllegalArgumentException";
    840         _exceptionMessage = "remaining() < n < needed";
    841         goto exit;
    842     }
    843     if (textures == NULL) {
    844         char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    845         textures = (GLuint *) (_texturesBase + _bufferOffset);
    846     }
    847     glDeleteTextures(
    848         (GLsizei)n,
    849         (GLuint *)textures
    850     );
    851 
    852 exit:
    853     if (_array) {
    854         _env->ReleaseIntArrayElements(_array, (jint*)textures, JNI_ABORT);
    855     }
    856     if (_exception) {
    857         jniThrowException(_env, _exceptionType, _exceptionMessage);
    858     }
    859 }
    860 
    861 /* void glDepthFunc ( GLenum func ) */
    862 static void
    863 android_glDepthFunc__I
    864   (JNIEnv *_env, jobject _this, jint func) {
    865     glDepthFunc(
    866         (GLenum)func
    867     );
    868 }
    869 
    870 /* void glDepthMask ( GLboolean flag ) */
    871 static void
    872 android_glDepthMask__Z
    873   (JNIEnv *_env, jobject _this, jboolean flag) {
    874     glDepthMask(
    875         (GLboolean)flag
    876     );
    877 }
    878 
    879 /* void glDepthRangef ( GLclampf zNear, GLclampf zFar ) */
    880 static void
    881 android_glDepthRangef__FF
    882   (JNIEnv *_env, jobject _this, jfloat zNear, jfloat zFar) {
    883     glDepthRangef(
    884         (GLclampf)zNear,
    885         (GLclampf)zFar
    886     );
    887 }
    888 
    889 /* void glDepthRangex ( GLclampx zNear, GLclampx zFar ) */
    890 static void
    891 android_glDepthRangex__II
    892   (JNIEnv *_env, jobject _this, jint zNear, jint zFar) {
    893     glDepthRangex(
    894         (GLclampx)zNear,
    895         (GLclampx)zFar
    896     );
    897 }
    898 
    899 /* void glDisable ( GLenum cap ) */
    900 static void
    901 android_glDisable__I
    902   (JNIEnv *_env, jobject _this, jint cap) {
    903     glDisable(
    904         (GLenum)cap
    905     );
    906 }
    907 
    908 /* void glDisableClientState ( GLenum array ) */
    909 static void
    910 android_glDisableClientState__I
    911   (JNIEnv *_env, jobject _this, jint array) {
    912     glDisableClientState(
    913         (GLenum)array
    914     );
    915 }
    916 
    917 /* void glDrawArrays ( GLenum mode, GLint first, GLsizei count ) */
    918 static void
    919 android_glDrawArrays__III
    920   (JNIEnv *_env, jobject _this, jint mode, jint first, jint count) {
    921     glDrawArrays(
    922         (GLenum)mode,
    923         (GLint)first,
    924         (GLsizei)count
    925     );
    926 }
    927 
    928 /* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) */
    929 static void
    930 android_glDrawElements__IIILjava_nio_Buffer_2
    931   (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf) {
    932     jint _exception = 0;
    933     const char * _exceptionType = NULL;
    934     const char * _exceptionMessage = NULL;
    935     jarray _array = (jarray) 0;
    936     jint _bufferOffset = (jint) 0;
    937     jint _remaining;
    938     GLvoid *indices = (GLvoid *) 0;
    939 
    940     if (!indices_buf) {
    941         _exception = 1;
    942         _exceptionType = "java/lang/IllegalArgumentException";
    943         _exceptionMessage = "indices == null";
    944         goto exit;
    945     }
    946     indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    947     if (_remaining < count) {
    948         _exception = 1;
    949         _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
    950         _exceptionMessage = "remaining() < count < needed";
    951         goto exit;
    952     }
    953     if (indices == NULL) {
    954         char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    955         indices = (GLvoid *) (_indicesBase + _bufferOffset);
    956     }
    957     glDrawElements(
    958         (GLenum)mode,
    959         (GLsizei)count,
    960         (GLenum)type,
    961         (GLvoid *)indices
    962     );
    963 
    964 exit:
    965     if (_array) {
    966         releasePointer(_env, _array, indices, JNI_FALSE);
    967     }
    968     if (_exception) {
    969         jniThrowException(_env, _exceptionType, _exceptionMessage);
    970     }
    971 }
    972 
    973 /* void glEnable ( GLenum cap ) */
    974 static void
    975 android_glEnable__I
    976   (JNIEnv *_env, jobject _this, jint cap) {
    977     glEnable(
    978         (GLenum)cap
    979     );
    980 }
    981 
    982 /* void glEnableClientState ( GLenum array ) */
    983 static void
    984 android_glEnableClientState__I
    985   (JNIEnv *_env, jobject _this, jint array) {
    986     glEnableClientState(
    987         (GLenum)array
    988     );
    989 }
    990 
    991 /* void glFinish ( void ) */
    992 static void
    993 android_glFinish__
    994   (JNIEnv *_env, jobject _this) {
    995     glFinish();
    996 }
    997 
    998 /* void glFlush ( void ) */
    999 static void
   1000 android_glFlush__
   1001   (JNIEnv *_env, jobject _this) {
   1002     glFlush();
   1003 }
   1004 
   1005 /* void glFogf ( GLenum pname, GLfloat param ) */
   1006 static void
   1007 android_glFogf__IF
   1008   (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
   1009     glFogf(
   1010         (GLenum)pname,
   1011         (GLfloat)param
   1012     );
   1013 }
   1014 
   1015 /* void glFogfv ( GLenum pname, const GLfloat *params ) */
   1016 static void
   1017 android_glFogfv__I_3FI
   1018   (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
   1019     jint _exception = 0;
   1020     const char * _exceptionType = NULL;
   1021     const char * _exceptionMessage = NULL;
   1022     GLfloat *params_base = (GLfloat *) 0;
   1023     jint _remaining;
   1024     GLfloat *params = (GLfloat *) 0;
   1025 
   1026     if (!params_ref) {
   1027         _exception = 1;
   1028         _exceptionType = "java/lang/IllegalArgumentException";
   1029         _exceptionMessage = "params == null";
   1030         goto exit;
   1031     }
   1032     if (offset < 0) {
   1033         _exception = 1;
   1034         _exceptionType = "java/lang/IllegalArgumentException";
   1035         _exceptionMessage = "offset < 0";
   1036         goto exit;
   1037     }
   1038     _remaining = _env->GetArrayLength(params_ref) - offset;
   1039     int _needed;
   1040     switch (pname) {
   1041 #if defined(GL_FOG_COLOR)
   1042         case GL_FOG_COLOR:
   1043 #endif // defined(GL_FOG_COLOR)
   1044             _needed = 4;
   1045             break;
   1046         default:
   1047             _needed = 1;
   1048             break;
   1049     }
   1050     if (_remaining < _needed) {
   1051         _exception = 1;
   1052         _exceptionType = "java/lang/IllegalArgumentException";
   1053         _exceptionMessage = "length - offset < needed";
   1054         goto exit;
   1055     }
   1056     params_base = (GLfloat *)
   1057         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1058     params = params_base + offset;
   1059 
   1060     glFogfv(
   1061         (GLenum)pname,
   1062         (GLfloat *)params
   1063     );
   1064 
   1065 exit:
   1066     if (params_base) {
   1067         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1068             JNI_ABORT);
   1069     }
   1070     if (_exception) {
   1071         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1072     }
   1073 }
   1074 
   1075 /* void glFogfv ( GLenum pname, const GLfloat *params ) */
   1076 static void
   1077 android_glFogfv__ILjava_nio_FloatBuffer_2
   1078   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1079     jint _exception = 0;
   1080     const char * _exceptionType = NULL;
   1081     const char * _exceptionMessage = NULL;
   1082     jfloatArray _array = (jfloatArray) 0;
   1083     jint _bufferOffset = (jint) 0;
   1084     jint _remaining;
   1085     GLfloat *params = (GLfloat *) 0;
   1086 
   1087     if (!params_buf) {
   1088         _exception = 1;
   1089         _exceptionType = "java/lang/IllegalArgumentException";
   1090         _exceptionMessage = "params == null";
   1091         goto exit;
   1092     }
   1093     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1094     int _needed;
   1095     switch (pname) {
   1096 #if defined(GL_FOG_COLOR)
   1097         case GL_FOG_COLOR:
   1098 #endif // defined(GL_FOG_COLOR)
   1099             _needed = 4;
   1100             break;
   1101         default:
   1102             _needed = 1;
   1103             break;
   1104     }
   1105     if (_remaining < _needed) {
   1106         _exception = 1;
   1107         _exceptionType = "java/lang/IllegalArgumentException";
   1108         _exceptionMessage = "remaining() < needed";
   1109         goto exit;
   1110     }
   1111     if (params == NULL) {
   1112         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1113         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1114     }
   1115     glFogfv(
   1116         (GLenum)pname,
   1117         (GLfloat *)params
   1118     );
   1119 
   1120 exit:
   1121     if (_array) {
   1122         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   1123     }
   1124     if (_exception) {
   1125         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1126     }
   1127 }
   1128 
   1129 /* void glFogx ( GLenum pname, GLfixed param ) */
   1130 static void
   1131 android_glFogx__II
   1132   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   1133     glFogx(
   1134         (GLenum)pname,
   1135         (GLfixed)param
   1136     );
   1137 }
   1138 
   1139 /* void glFogxv ( GLenum pname, const GLfixed *params ) */
   1140 static void
   1141 android_glFogxv__I_3II
   1142   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1143     jint _exception = 0;
   1144     const char * _exceptionType = NULL;
   1145     const char * _exceptionMessage = NULL;
   1146     GLfixed *params_base = (GLfixed *) 0;
   1147     jint _remaining;
   1148     GLfixed *params = (GLfixed *) 0;
   1149 
   1150     if (!params_ref) {
   1151         _exception = 1;
   1152         _exceptionType = "java/lang/IllegalArgumentException";
   1153         _exceptionMessage = "params == null";
   1154         goto exit;
   1155     }
   1156     if (offset < 0) {
   1157         _exception = 1;
   1158         _exceptionType = "java/lang/IllegalArgumentException";
   1159         _exceptionMessage = "offset < 0";
   1160         goto exit;
   1161     }
   1162     _remaining = _env->GetArrayLength(params_ref) - offset;
   1163     int _needed;
   1164     switch (pname) {
   1165 #if defined(GL_FOG_COLOR)
   1166         case GL_FOG_COLOR:
   1167 #endif // defined(GL_FOG_COLOR)
   1168             _needed = 4;
   1169             break;
   1170         default:
   1171             _needed = 1;
   1172             break;
   1173     }
   1174     if (_remaining < _needed) {
   1175         _exception = 1;
   1176         _exceptionType = "java/lang/IllegalArgumentException";
   1177         _exceptionMessage = "length - offset < needed";
   1178         goto exit;
   1179     }
   1180     params_base = (GLfixed *)
   1181         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1182     params = params_base + offset;
   1183 
   1184     glFogxv(
   1185         (GLenum)pname,
   1186         (GLfixed *)params
   1187     );
   1188 
   1189 exit:
   1190     if (params_base) {
   1191         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1192             JNI_ABORT);
   1193     }
   1194     if (_exception) {
   1195         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1196     }
   1197 }
   1198 
   1199 /* void glFogxv ( GLenum pname, const GLfixed *params ) */
   1200 static void
   1201 android_glFogxv__ILjava_nio_IntBuffer_2
   1202   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1203     jint _exception = 0;
   1204     const char * _exceptionType = NULL;
   1205     const char * _exceptionMessage = NULL;
   1206     jintArray _array = (jintArray) 0;
   1207     jint _bufferOffset = (jint) 0;
   1208     jint _remaining;
   1209     GLfixed *params = (GLfixed *) 0;
   1210 
   1211     if (!params_buf) {
   1212         _exception = 1;
   1213         _exceptionType = "java/lang/IllegalArgumentException";
   1214         _exceptionMessage = "params == null";
   1215         goto exit;
   1216     }
   1217     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1218     int _needed;
   1219     switch (pname) {
   1220 #if defined(GL_FOG_COLOR)
   1221         case GL_FOG_COLOR:
   1222 #endif // defined(GL_FOG_COLOR)
   1223             _needed = 4;
   1224             break;
   1225         default:
   1226             _needed = 1;
   1227             break;
   1228     }
   1229     if (_remaining < _needed) {
   1230         _exception = 1;
   1231         _exceptionType = "java/lang/IllegalArgumentException";
   1232         _exceptionMessage = "remaining() < needed";
   1233         goto exit;
   1234     }
   1235     if (params == NULL) {
   1236         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1237         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1238     }
   1239     glFogxv(
   1240         (GLenum)pname,
   1241         (GLfixed *)params
   1242     );
   1243 
   1244 exit:
   1245     if (_array) {
   1246         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1247     }
   1248     if (_exception) {
   1249         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1250     }
   1251 }
   1252 
   1253 /* void glFrontFace ( GLenum mode ) */
   1254 static void
   1255 android_glFrontFace__I
   1256   (JNIEnv *_env, jobject _this, jint mode) {
   1257     glFrontFace(
   1258         (GLenum)mode
   1259     );
   1260 }
   1261 
   1262 /* void glFrustumf ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
   1263 static void
   1264 android_glFrustumf__FFFFFF
   1265   (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
   1266     glFrustumf(
   1267         (GLfloat)left,
   1268         (GLfloat)right,
   1269         (GLfloat)bottom,
   1270         (GLfloat)top,
   1271         (GLfloat)zNear,
   1272         (GLfloat)zFar
   1273     );
   1274 }
   1275 
   1276 /* void glFrustumx ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
   1277 static void
   1278 android_glFrustumx__IIIIII
   1279   (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
   1280     glFrustumx(
   1281         (GLfixed)left,
   1282         (GLfixed)right,
   1283         (GLfixed)bottom,
   1284         (GLfixed)top,
   1285         (GLfixed)zNear,
   1286         (GLfixed)zFar
   1287     );
   1288 }
   1289 
   1290 /* void glGenTextures ( GLsizei n, GLuint *textures ) */
   1291 static void
   1292 android_glGenTextures__I_3II
   1293   (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
   1294     jint _exception = 0;
   1295     const char * _exceptionType = NULL;
   1296     const char * _exceptionMessage = NULL;
   1297     GLuint *textures_base = (GLuint *) 0;
   1298     jint _remaining;
   1299     GLuint *textures = (GLuint *) 0;
   1300 
   1301     if (!textures_ref) {
   1302         _exception = 1;
   1303         _exceptionType = "java/lang/IllegalArgumentException";
   1304         _exceptionMessage = "textures == null";
   1305         goto exit;
   1306     }
   1307     if (offset < 0) {
   1308         _exception = 1;
   1309         _exceptionType = "java/lang/IllegalArgumentException";
   1310         _exceptionMessage = "offset < 0";
   1311         goto exit;
   1312     }
   1313     _remaining = _env->GetArrayLength(textures_ref) - offset;
   1314     if (_remaining < n) {
   1315         _exception = 1;
   1316         _exceptionType = "java/lang/IllegalArgumentException";
   1317         _exceptionMessage = "length - offset < n < needed";
   1318         goto exit;
   1319     }
   1320     textures_base = (GLuint *)
   1321         _env->GetIntArrayElements(textures_ref, (jboolean *)0);
   1322     textures = textures_base + offset;
   1323 
   1324     glGenTextures(
   1325         (GLsizei)n,
   1326         (GLuint *)textures
   1327     );
   1328 
   1329 exit:
   1330     if (textures_base) {
   1331         _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
   1332             _exception ? JNI_ABORT: 0);
   1333     }
   1334     if (_exception) {
   1335         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1336     }
   1337 }
   1338 
   1339 /* void glGenTextures ( GLsizei n, GLuint *textures ) */
   1340 static void
   1341 android_glGenTextures__ILjava_nio_IntBuffer_2
   1342   (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
   1343     jint _exception = 0;
   1344     const char * _exceptionType = NULL;
   1345     const char * _exceptionMessage = NULL;
   1346     jintArray _array = (jintArray) 0;
   1347     jint _bufferOffset = (jint) 0;
   1348     jint _remaining;
   1349     GLuint *textures = (GLuint *) 0;
   1350 
   1351     if (!textures_buf) {
   1352         _exception = 1;
   1353         _exceptionType = "java/lang/IllegalArgumentException";
   1354         _exceptionMessage = "textures == null";
   1355         goto exit;
   1356     }
   1357     textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1358     if (_remaining < n) {
   1359         _exception = 1;
   1360         _exceptionType = "java/lang/IllegalArgumentException";
   1361         _exceptionMessage = "remaining() < n < needed";
   1362         goto exit;
   1363     }
   1364     if (textures == NULL) {
   1365         char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1366         textures = (GLuint *) (_texturesBase + _bufferOffset);
   1367     }
   1368     glGenTextures(
   1369         (GLsizei)n,
   1370         (GLuint *)textures
   1371     );
   1372 
   1373 exit:
   1374     if (_array) {
   1375         _env->ReleaseIntArrayElements(_array, (jint*)textures, _exception ? JNI_ABORT : 0);
   1376     }
   1377     if (_exception) {
   1378         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1379     }
   1380 }
   1381 
   1382 /* GLenum glGetError ( void ) */
   1383 static jint
   1384 android_glGetError__
   1385   (JNIEnv *_env, jobject _this) {
   1386     GLenum _returnValue;
   1387     _returnValue = glGetError();
   1388     return (jint)_returnValue;
   1389 }
   1390 
   1391 /* void glGetIntegerv ( GLenum pname, GLint *params ) */
   1392 static void
   1393 android_glGetIntegerv__I_3II
   1394   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1395     get<jintArray, IntArrayGetter, jint*, IntArrayReleaser, GLint, glGetIntegerv>(
   1396         _env, _this, pname, params_ref, offset);
   1397 }
   1398 
   1399 /* void glGetIntegerv ( GLenum pname, GLint *params ) */
   1400 static void
   1401 android_glGetIntegerv__ILjava_nio_IntBuffer_2
   1402   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1403     getarray<GLint, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetIntegerv>(
   1404         _env, _this, pname, params_buf);
   1405 }
   1406 /* const GLubyte * glGetString ( GLenum name ) */
   1407 static jstring android_glGetString(JNIEnv* _env, jobject, jint name) {
   1408     const char* chars = (const char*) glGetString((GLenum) name);
   1409     return _env->NewStringUTF(chars);
   1410 }
   1411 /* void glHint ( GLenum target, GLenum mode ) */
   1412 static void
   1413 android_glHint__II
   1414   (JNIEnv *_env, jobject _this, jint target, jint mode) {
   1415     glHint(
   1416         (GLenum)target,
   1417         (GLenum)mode
   1418     );
   1419 }
   1420 
   1421 /* void glLightModelf ( GLenum pname, GLfloat param ) */
   1422 static void
   1423 android_glLightModelf__IF
   1424   (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
   1425     glLightModelf(
   1426         (GLenum)pname,
   1427         (GLfloat)param
   1428     );
   1429 }
   1430 
   1431 /* void glLightModelfv ( GLenum pname, const GLfloat *params ) */
   1432 static void
   1433 android_glLightModelfv__I_3FI
   1434   (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
   1435     jint _exception = 0;
   1436     const char * _exceptionType = NULL;
   1437     const char * _exceptionMessage = NULL;
   1438     GLfloat *params_base = (GLfloat *) 0;
   1439     jint _remaining;
   1440     GLfloat *params = (GLfloat *) 0;
   1441 
   1442     if (!params_ref) {
   1443         _exception = 1;
   1444         _exceptionType = "java/lang/IllegalArgumentException";
   1445         _exceptionMessage = "params == null";
   1446         goto exit;
   1447     }
   1448     if (offset < 0) {
   1449         _exception = 1;
   1450         _exceptionType = "java/lang/IllegalArgumentException";
   1451         _exceptionMessage = "offset < 0";
   1452         goto exit;
   1453     }
   1454     _remaining = _env->GetArrayLength(params_ref) - offset;
   1455     int _needed;
   1456     switch (pname) {
   1457 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1458         case GL_LIGHT_MODEL_AMBIENT:
   1459 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1460             _needed = 4;
   1461             break;
   1462         default:
   1463             _needed = 1;
   1464             break;
   1465     }
   1466     if (_remaining < _needed) {
   1467         _exception = 1;
   1468         _exceptionType = "java/lang/IllegalArgumentException";
   1469         _exceptionMessage = "length - offset < needed";
   1470         goto exit;
   1471     }
   1472     params_base = (GLfloat *)
   1473         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1474     params = params_base + offset;
   1475 
   1476     glLightModelfv(
   1477         (GLenum)pname,
   1478         (GLfloat *)params
   1479     );
   1480 
   1481 exit:
   1482     if (params_base) {
   1483         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1484             JNI_ABORT);
   1485     }
   1486     if (_exception) {
   1487         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1488     }
   1489 }
   1490 
   1491 /* void glLightModelfv ( GLenum pname, const GLfloat *params ) */
   1492 static void
   1493 android_glLightModelfv__ILjava_nio_FloatBuffer_2
   1494   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1495     jint _exception = 0;
   1496     const char * _exceptionType = NULL;
   1497     const char * _exceptionMessage = NULL;
   1498     jfloatArray _array = (jfloatArray) 0;
   1499     jint _bufferOffset = (jint) 0;
   1500     jint _remaining;
   1501     GLfloat *params = (GLfloat *) 0;
   1502 
   1503     if (!params_buf) {
   1504         _exception = 1;
   1505         _exceptionType = "java/lang/IllegalArgumentException";
   1506         _exceptionMessage = "params == null";
   1507         goto exit;
   1508     }
   1509     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1510     int _needed;
   1511     switch (pname) {
   1512 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1513         case GL_LIGHT_MODEL_AMBIENT:
   1514 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1515             _needed = 4;
   1516             break;
   1517         default:
   1518             _needed = 1;
   1519             break;
   1520     }
   1521     if (_remaining < _needed) {
   1522         _exception = 1;
   1523         _exceptionType = "java/lang/IllegalArgumentException";
   1524         _exceptionMessage = "remaining() < needed";
   1525         goto exit;
   1526     }
   1527     if (params == NULL) {
   1528         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1529         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1530     }
   1531     glLightModelfv(
   1532         (GLenum)pname,
   1533         (GLfloat *)params
   1534     );
   1535 
   1536 exit:
   1537     if (_array) {
   1538         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   1539     }
   1540     if (_exception) {
   1541         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1542     }
   1543 }
   1544 
   1545 /* void glLightModelx ( GLenum pname, GLfixed param ) */
   1546 static void
   1547 android_glLightModelx__II
   1548   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   1549     glLightModelx(
   1550         (GLenum)pname,
   1551         (GLfixed)param
   1552     );
   1553 }
   1554 
   1555 /* void glLightModelxv ( GLenum pname, const GLfixed *params ) */
   1556 static void
   1557 android_glLightModelxv__I_3II
   1558   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1559     jint _exception = 0;
   1560     const char * _exceptionType = NULL;
   1561     const char * _exceptionMessage = NULL;
   1562     GLfixed *params_base = (GLfixed *) 0;
   1563     jint _remaining;
   1564     GLfixed *params = (GLfixed *) 0;
   1565 
   1566     if (!params_ref) {
   1567         _exception = 1;
   1568         _exceptionType = "java/lang/IllegalArgumentException";
   1569         _exceptionMessage = "params == null";
   1570         goto exit;
   1571     }
   1572     if (offset < 0) {
   1573         _exception = 1;
   1574         _exceptionType = "java/lang/IllegalArgumentException";
   1575         _exceptionMessage = "offset < 0";
   1576         goto exit;
   1577     }
   1578     _remaining = _env->GetArrayLength(params_ref) - offset;
   1579     int _needed;
   1580     switch (pname) {
   1581 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1582         case GL_LIGHT_MODEL_AMBIENT:
   1583 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1584             _needed = 4;
   1585             break;
   1586         default:
   1587             _needed = 1;
   1588             break;
   1589     }
   1590     if (_remaining < _needed) {
   1591         _exception = 1;
   1592         _exceptionType = "java/lang/IllegalArgumentException";
   1593         _exceptionMessage = "length - offset < needed";
   1594         goto exit;
   1595     }
   1596     params_base = (GLfixed *)
   1597         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1598     params = params_base + offset;
   1599 
   1600     glLightModelxv(
   1601         (GLenum)pname,
   1602         (GLfixed *)params
   1603     );
   1604 
   1605 exit:
   1606     if (params_base) {
   1607         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1608             JNI_ABORT);
   1609     }
   1610     if (_exception) {
   1611         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1612     }
   1613 }
   1614 
   1615 /* void glLightModelxv ( GLenum pname, const GLfixed *params ) */
   1616 static void
   1617 android_glLightModelxv__ILjava_nio_IntBuffer_2
   1618   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1619     jint _exception = 0;
   1620     const char * _exceptionType = NULL;
   1621     const char * _exceptionMessage = NULL;
   1622     jintArray _array = (jintArray) 0;
   1623     jint _bufferOffset = (jint) 0;
   1624     jint _remaining;
   1625     GLfixed *params = (GLfixed *) 0;
   1626 
   1627     if (!params_buf) {
   1628         _exception = 1;
   1629         _exceptionType = "java/lang/IllegalArgumentException";
   1630         _exceptionMessage = "params == null";
   1631         goto exit;
   1632     }
   1633     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1634     int _needed;
   1635     switch (pname) {
   1636 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1637         case GL_LIGHT_MODEL_AMBIENT:
   1638 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1639             _needed = 4;
   1640             break;
   1641         default:
   1642             _needed = 1;
   1643             break;
   1644     }
   1645     if (_remaining < _needed) {
   1646         _exception = 1;
   1647         _exceptionType = "java/lang/IllegalArgumentException";
   1648         _exceptionMessage = "remaining() < needed";
   1649         goto exit;
   1650     }
   1651     if (params == NULL) {
   1652         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1653         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1654     }
   1655     glLightModelxv(
   1656         (GLenum)pname,
   1657         (GLfixed *)params
   1658     );
   1659 
   1660 exit:
   1661     if (_array) {
   1662         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1663     }
   1664     if (_exception) {
   1665         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1666     }
   1667 }
   1668 
   1669 /* void glLightf ( GLenum light, GLenum pname, GLfloat param ) */
   1670 static void
   1671 android_glLightf__IIF
   1672   (JNIEnv *_env, jobject _this, jint light, jint pname, jfloat param) {
   1673     glLightf(
   1674         (GLenum)light,
   1675         (GLenum)pname,
   1676         (GLfloat)param
   1677     );
   1678 }
   1679 
   1680 /* void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) */
   1681 static void
   1682 android_glLightfv__II_3FI
   1683   (JNIEnv *_env, jobject _this, jint light, jint pname, jfloatArray params_ref, jint offset) {
   1684     jint _exception = 0;
   1685     const char * _exceptionType = NULL;
   1686     const char * _exceptionMessage = NULL;
   1687     GLfloat *params_base = (GLfloat *) 0;
   1688     jint _remaining;
   1689     GLfloat *params = (GLfloat *) 0;
   1690 
   1691     if (!params_ref) {
   1692         _exception = 1;
   1693         _exceptionType = "java/lang/IllegalArgumentException";
   1694         _exceptionMessage = "params == null";
   1695         goto exit;
   1696     }
   1697     if (offset < 0) {
   1698         _exception = 1;
   1699         _exceptionType = "java/lang/IllegalArgumentException";
   1700         _exceptionMessage = "offset < 0";
   1701         goto exit;
   1702     }
   1703     _remaining = _env->GetArrayLength(params_ref) - offset;
   1704     int _needed;
   1705     switch (pname) {
   1706 #if defined(GL_SPOT_DIRECTION)
   1707         case GL_SPOT_DIRECTION:
   1708 #endif // defined(GL_SPOT_DIRECTION)
   1709             _needed = 3;
   1710             break;
   1711 #if defined(GL_AMBIENT)
   1712         case GL_AMBIENT:
   1713 #endif // defined(GL_AMBIENT)
   1714 #if defined(GL_DIFFUSE)
   1715         case GL_DIFFUSE:
   1716 #endif // defined(GL_DIFFUSE)
   1717 #if defined(GL_SPECULAR)
   1718         case GL_SPECULAR:
   1719 #endif // defined(GL_SPECULAR)
   1720 #if defined(GL_EMISSION)
   1721         case GL_EMISSION:
   1722 #endif // defined(GL_EMISSION)
   1723             _needed = 4;
   1724             break;
   1725         default:
   1726             _needed = 1;
   1727             break;
   1728     }
   1729     if (_remaining < _needed) {
   1730         _exception = 1;
   1731         _exceptionType = "java/lang/IllegalArgumentException";
   1732         _exceptionMessage = "length - offset < needed";
   1733         goto exit;
   1734     }
   1735     params_base = (GLfloat *)
   1736         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1737     params = params_base + offset;
   1738 
   1739     glLightfv(
   1740         (GLenum)light,
   1741         (GLenum)pname,
   1742         (GLfloat *)params
   1743     );
   1744 
   1745 exit:
   1746     if (params_base) {
   1747         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1748             JNI_ABORT);
   1749     }
   1750     if (_exception) {
   1751         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1752     }
   1753 }
   1754 
   1755 /* void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) */
   1756 static void
   1757 android_glLightfv__IILjava_nio_FloatBuffer_2
   1758   (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
   1759     jint _exception = 0;
   1760     const char * _exceptionType = NULL;
   1761     const char * _exceptionMessage = NULL;
   1762     jfloatArray _array = (jfloatArray) 0;
   1763     jint _bufferOffset = (jint) 0;
   1764     jint _remaining;
   1765     GLfloat *params = (GLfloat *) 0;
   1766 
   1767     if (!params_buf) {
   1768         _exception = 1;
   1769         _exceptionType = "java/lang/IllegalArgumentException";
   1770         _exceptionMessage = "params == null";
   1771         goto exit;
   1772     }
   1773     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1774     int _needed;
   1775     switch (pname) {
   1776 #if defined(GL_SPOT_DIRECTION)
   1777         case GL_SPOT_DIRECTION:
   1778 #endif // defined(GL_SPOT_DIRECTION)
   1779             _needed = 3;
   1780             break;
   1781 #if defined(GL_AMBIENT)
   1782         case GL_AMBIENT:
   1783 #endif // defined(GL_AMBIENT)
   1784 #if defined(GL_DIFFUSE)
   1785         case GL_DIFFUSE:
   1786 #endif // defined(GL_DIFFUSE)
   1787 #if defined(GL_SPECULAR)
   1788         case GL_SPECULAR:
   1789 #endif // defined(GL_SPECULAR)
   1790 #if defined(GL_EMISSION)
   1791         case GL_EMISSION:
   1792 #endif // defined(GL_EMISSION)
   1793             _needed = 4;
   1794             break;
   1795         default:
   1796             _needed = 1;
   1797             break;
   1798     }
   1799     if (_remaining < _needed) {
   1800         _exception = 1;
   1801         _exceptionType = "java/lang/IllegalArgumentException";
   1802         _exceptionMessage = "remaining() < needed";
   1803         goto exit;
   1804     }
   1805     if (params == NULL) {
   1806         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1807         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1808     }
   1809     glLightfv(
   1810         (GLenum)light,
   1811         (GLenum)pname,
   1812         (GLfloat *)params
   1813     );
   1814 
   1815 exit:
   1816     if (_array) {
   1817         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   1818     }
   1819     if (_exception) {
   1820         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1821     }
   1822 }
   1823 
   1824 /* void glLightx ( GLenum light, GLenum pname, GLfixed param ) */
   1825 static void
   1826 android_glLightx__III
   1827   (JNIEnv *_env, jobject _this, jint light, jint pname, jint param) {
   1828     glLightx(
   1829         (GLenum)light,
   1830         (GLenum)pname,
   1831         (GLfixed)param
   1832     );
   1833 }
   1834 
   1835 /* void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) */
   1836 static void
   1837 android_glLightxv__II_3II
   1838   (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
   1839     jint _exception = 0;
   1840     const char * _exceptionType = NULL;
   1841     const char * _exceptionMessage = NULL;
   1842     GLfixed *params_base = (GLfixed *) 0;
   1843     jint _remaining;
   1844     GLfixed *params = (GLfixed *) 0;
   1845 
   1846     if (!params_ref) {
   1847         _exception = 1;
   1848         _exceptionType = "java/lang/IllegalArgumentException";
   1849         _exceptionMessage = "params == null";
   1850         goto exit;
   1851     }
   1852     if (offset < 0) {
   1853         _exception = 1;
   1854         _exceptionType = "java/lang/IllegalArgumentException";
   1855         _exceptionMessage = "offset < 0";
   1856         goto exit;
   1857     }
   1858     _remaining = _env->GetArrayLength(params_ref) - offset;
   1859     int _needed;
   1860     switch (pname) {
   1861 #if defined(GL_SPOT_DIRECTION)
   1862         case GL_SPOT_DIRECTION:
   1863 #endif // defined(GL_SPOT_DIRECTION)
   1864             _needed = 3;
   1865             break;
   1866 #if defined(GL_AMBIENT)
   1867         case GL_AMBIENT:
   1868 #endif // defined(GL_AMBIENT)
   1869 #if defined(GL_DIFFUSE)
   1870         case GL_DIFFUSE:
   1871 #endif // defined(GL_DIFFUSE)
   1872 #if defined(GL_SPECULAR)
   1873         case GL_SPECULAR:
   1874 #endif // defined(GL_SPECULAR)
   1875 #if defined(GL_EMISSION)
   1876         case GL_EMISSION:
   1877 #endif // defined(GL_EMISSION)
   1878             _needed = 4;
   1879             break;
   1880         default:
   1881             _needed = 1;
   1882             break;
   1883     }
   1884     if (_remaining < _needed) {
   1885         _exception = 1;
   1886         _exceptionType = "java/lang/IllegalArgumentException";
   1887         _exceptionMessage = "length - offset < needed";
   1888         goto exit;
   1889     }
   1890     params_base = (GLfixed *)
   1891         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1892     params = params_base + offset;
   1893 
   1894     glLightxv(
   1895         (GLenum)light,
   1896         (GLenum)pname,
   1897         (GLfixed *)params
   1898     );
   1899 
   1900 exit:
   1901     if (params_base) {
   1902         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1903             JNI_ABORT);
   1904     }
   1905     if (_exception) {
   1906         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1907     }
   1908 }
   1909 
   1910 /* void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) */
   1911 static void
   1912 android_glLightxv__IILjava_nio_IntBuffer_2
   1913   (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
   1914     jint _exception = 0;
   1915     const char * _exceptionType = NULL;
   1916     const char * _exceptionMessage = NULL;
   1917     jintArray _array = (jintArray) 0;
   1918     jint _bufferOffset = (jint) 0;
   1919     jint _remaining;
   1920     GLfixed *params = (GLfixed *) 0;
   1921 
   1922     if (!params_buf) {
   1923         _exception = 1;
   1924         _exceptionType = "java/lang/IllegalArgumentException";
   1925         _exceptionMessage = "params == null";
   1926         goto exit;
   1927     }
   1928     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1929     int _needed;
   1930     switch (pname) {
   1931 #if defined(GL_SPOT_DIRECTION)
   1932         case GL_SPOT_DIRECTION:
   1933 #endif // defined(GL_SPOT_DIRECTION)
   1934             _needed = 3;
   1935             break;
   1936 #if defined(GL_AMBIENT)
   1937         case GL_AMBIENT:
   1938 #endif // defined(GL_AMBIENT)
   1939 #if defined(GL_DIFFUSE)
   1940         case GL_DIFFUSE:
   1941 #endif // defined(GL_DIFFUSE)
   1942 #if defined(GL_SPECULAR)
   1943         case GL_SPECULAR:
   1944 #endif // defined(GL_SPECULAR)
   1945 #if defined(GL_EMISSION)
   1946         case GL_EMISSION:
   1947 #endif // defined(GL_EMISSION)
   1948             _needed = 4;
   1949             break;
   1950         default:
   1951             _needed = 1;
   1952             break;
   1953     }
   1954     if (_remaining < _needed) {
   1955         _exception = 1;
   1956         _exceptionType = "java/lang/IllegalArgumentException";
   1957         _exceptionMessage = "remaining() < needed";
   1958         goto exit;
   1959     }
   1960     if (params == NULL) {
   1961         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1962         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1963     }
   1964     glLightxv(
   1965         (GLenum)light,
   1966         (GLenum)pname,
   1967         (GLfixed *)params
   1968     );
   1969 
   1970 exit:
   1971     if (_array) {
   1972         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1973     }
   1974     if (_exception) {
   1975         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1976     }
   1977 }
   1978 
   1979 /* void glLineWidth ( GLfloat width ) */
   1980 static void
   1981 android_glLineWidth__F
   1982   (JNIEnv *_env, jobject _this, jfloat width) {
   1983     glLineWidth(
   1984         (GLfloat)width
   1985     );
   1986 }
   1987 
   1988 /* void glLineWidthx ( GLfixed width ) */
   1989 static void
   1990 android_glLineWidthx__I
   1991   (JNIEnv *_env, jobject _this, jint width) {
   1992     glLineWidthx(
   1993         (GLfixed)width
   1994     );
   1995 }
   1996 
   1997 /* void glLoadIdentity ( void ) */
   1998 static void
   1999 android_glLoadIdentity__
   2000   (JNIEnv *_env, jobject _this) {
   2001     glLoadIdentity();
   2002 }
   2003 
   2004 /* void glLoadMatrixf ( const GLfloat *m ) */
   2005 static void
   2006 android_glLoadMatrixf___3FI
   2007   (JNIEnv *_env, jobject _this, jfloatArray m_ref, jint offset) {
   2008     jint _exception = 0;
   2009     const char * _exceptionType = NULL;
   2010     const char * _exceptionMessage = NULL;
   2011     GLfloat *m_base = (GLfloat *) 0;
   2012     jint _remaining;
   2013     GLfloat *m = (GLfloat *) 0;
   2014 
   2015     if (!m_ref) {
   2016         _exception = 1;
   2017         _exceptionType = "java/lang/IllegalArgumentException";
   2018         _exceptionMessage = "m == null";
   2019         goto exit;
   2020     }
   2021     if (offset < 0) {
   2022         _exception = 1;
   2023         _exceptionType = "java/lang/IllegalArgumentException";
   2024         _exceptionMessage = "offset < 0";
   2025         goto exit;
   2026     }
   2027     _remaining = _env->GetArrayLength(m_ref) - offset;
   2028     m_base = (GLfloat *)
   2029         _env->GetFloatArrayElements(m_ref, (jboolean *)0);
   2030     m = m_base + offset;
   2031 
   2032     glLoadMatrixf(
   2033         (GLfloat *)m
   2034     );
   2035 
   2036 exit:
   2037     if (m_base) {
   2038         _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
   2039             JNI_ABORT);
   2040     }
   2041     if (_exception) {
   2042         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2043     }
   2044 }
   2045 
   2046 /* void glLoadMatrixf ( const GLfloat *m ) */
   2047 static void
   2048 android_glLoadMatrixf__Ljava_nio_FloatBuffer_2
   2049   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2050     jint _exception = 0;
   2051     const char * _exceptionType = NULL;
   2052     const char * _exceptionMessage = NULL;
   2053     jfloatArray _array = (jfloatArray) 0;
   2054     jint _bufferOffset = (jint) 0;
   2055     jint _remaining;
   2056     GLfloat *m = (GLfloat *) 0;
   2057 
   2058     if (!m_buf) {
   2059         _exception = 1;
   2060         _exceptionType = "java/lang/IllegalArgumentException";
   2061         _exceptionMessage = "m == null";
   2062         goto exit;
   2063     }
   2064     m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2065     if (m == NULL) {
   2066         char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2067         m = (GLfloat *) (_mBase + _bufferOffset);
   2068     }
   2069     glLoadMatrixf(
   2070         (GLfloat *)m
   2071     );
   2072 
   2073 exit:
   2074     if (_array) {
   2075         _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
   2076     }
   2077     if (_exception) {
   2078         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2079     }
   2080 }
   2081 
   2082 /* void glLoadMatrixx ( const GLfixed *m ) */
   2083 static void
   2084 android_glLoadMatrixx___3II
   2085   (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
   2086     jint _exception = 0;
   2087     const char * _exceptionType = NULL;
   2088     const char * _exceptionMessage = NULL;
   2089     GLfixed *m_base = (GLfixed *) 0;
   2090     jint _remaining;
   2091     GLfixed *m = (GLfixed *) 0;
   2092 
   2093     if (!m_ref) {
   2094         _exception = 1;
   2095         _exceptionType = "java/lang/IllegalArgumentException";
   2096         _exceptionMessage = "m == null";
   2097         goto exit;
   2098     }
   2099     if (offset < 0) {
   2100         _exception = 1;
   2101         _exceptionType = "java/lang/IllegalArgumentException";
   2102         _exceptionMessage = "offset < 0";
   2103         goto exit;
   2104     }
   2105     _remaining = _env->GetArrayLength(m_ref) - offset;
   2106     m_base = (GLfixed *)
   2107         _env->GetIntArrayElements(m_ref, (jboolean *)0);
   2108     m = m_base + offset;
   2109 
   2110     glLoadMatrixx(
   2111         (GLfixed *)m
   2112     );
   2113 
   2114 exit:
   2115     if (m_base) {
   2116         _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
   2117             JNI_ABORT);
   2118     }
   2119     if (_exception) {
   2120         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2121     }
   2122 }
   2123 
   2124 /* void glLoadMatrixx ( const GLfixed *m ) */
   2125 static void
   2126 android_glLoadMatrixx__Ljava_nio_IntBuffer_2
   2127   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2128     jint _exception = 0;
   2129     const char * _exceptionType = NULL;
   2130     const char * _exceptionMessage = NULL;
   2131     jintArray _array = (jintArray) 0;
   2132     jint _bufferOffset = (jint) 0;
   2133     jint _remaining;
   2134     GLfixed *m = (GLfixed *) 0;
   2135 
   2136     if (!m_buf) {
   2137         _exception = 1;
   2138         _exceptionType = "java/lang/IllegalArgumentException";
   2139         _exceptionMessage = "m == null";
   2140         goto exit;
   2141     }
   2142     m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2143     if (m == NULL) {
   2144         char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2145         m = (GLfixed *) (_mBase + _bufferOffset);
   2146     }
   2147     glLoadMatrixx(
   2148         (GLfixed *)m
   2149     );
   2150 
   2151 exit:
   2152     if (_array) {
   2153         _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
   2154     }
   2155     if (_exception) {
   2156         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2157     }
   2158 }
   2159 
   2160 /* void glLogicOp ( GLenum opcode ) */
   2161 static void
   2162 android_glLogicOp__I
   2163   (JNIEnv *_env, jobject _this, jint opcode) {
   2164     glLogicOp(
   2165         (GLenum)opcode
   2166     );
   2167 }
   2168 
   2169 /* void glMaterialf ( GLenum face, GLenum pname, GLfloat param ) */
   2170 static void
   2171 android_glMaterialf__IIF
   2172   (JNIEnv *_env, jobject _this, jint face, jint pname, jfloat param) {
   2173     glMaterialf(
   2174         (GLenum)face,
   2175         (GLenum)pname,
   2176         (GLfloat)param
   2177     );
   2178 }
   2179 
   2180 /* void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) */
   2181 static void
   2182 android_glMaterialfv__II_3FI
   2183   (JNIEnv *_env, jobject _this, jint face, jint pname, jfloatArray params_ref, jint offset) {
   2184     jint _exception = 0;
   2185     const char * _exceptionType = NULL;
   2186     const char * _exceptionMessage = NULL;
   2187     GLfloat *params_base = (GLfloat *) 0;
   2188     jint _remaining;
   2189     GLfloat *params = (GLfloat *) 0;
   2190 
   2191     if (!params_ref) {
   2192         _exception = 1;
   2193         _exceptionType = "java/lang/IllegalArgumentException";
   2194         _exceptionMessage = "params == null";
   2195         goto exit;
   2196     }
   2197     if (offset < 0) {
   2198         _exception = 1;
   2199         _exceptionType = "java/lang/IllegalArgumentException";
   2200         _exceptionMessage = "offset < 0";
   2201         goto exit;
   2202     }
   2203     _remaining = _env->GetArrayLength(params_ref) - offset;
   2204     int _needed;
   2205     switch (pname) {
   2206 #if defined(GL_AMBIENT)
   2207         case GL_AMBIENT:
   2208 #endif // defined(GL_AMBIENT)
   2209 #if defined(GL_DIFFUSE)
   2210         case GL_DIFFUSE:
   2211 #endif // defined(GL_DIFFUSE)
   2212 #if defined(GL_SPECULAR)
   2213         case GL_SPECULAR:
   2214 #endif // defined(GL_SPECULAR)
   2215 #if defined(GL_EMISSION)
   2216         case GL_EMISSION:
   2217 #endif // defined(GL_EMISSION)
   2218 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2219         case GL_AMBIENT_AND_DIFFUSE:
   2220 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2221             _needed = 4;
   2222             break;
   2223         default:
   2224             _needed = 1;
   2225             break;
   2226     }
   2227     if (_remaining < _needed) {
   2228         _exception = 1;
   2229         _exceptionType = "java/lang/IllegalArgumentException";
   2230         _exceptionMessage = "length - offset < needed";
   2231         goto exit;
   2232     }
   2233     params_base = (GLfloat *)
   2234         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   2235     params = params_base + offset;
   2236 
   2237     glMaterialfv(
   2238         (GLenum)face,
   2239         (GLenum)pname,
   2240         (GLfloat *)params
   2241     );
   2242 
   2243 exit:
   2244     if (params_base) {
   2245         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   2246             JNI_ABORT);
   2247     }
   2248     if (_exception) {
   2249         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2250     }
   2251 }
   2252 
   2253 /* void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) */
   2254 static void
   2255 android_glMaterialfv__IILjava_nio_FloatBuffer_2
   2256   (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
   2257     jint _exception = 0;
   2258     const char * _exceptionType = NULL;
   2259     const char * _exceptionMessage = NULL;
   2260     jfloatArray _array = (jfloatArray) 0;
   2261     jint _bufferOffset = (jint) 0;
   2262     jint _remaining;
   2263     GLfloat *params = (GLfloat *) 0;
   2264 
   2265     if (!params_buf) {
   2266         _exception = 1;
   2267         _exceptionType = "java/lang/IllegalArgumentException";
   2268         _exceptionMessage = "params == null";
   2269         goto exit;
   2270     }
   2271     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2272     int _needed;
   2273     switch (pname) {
   2274 #if defined(GL_AMBIENT)
   2275         case GL_AMBIENT:
   2276 #endif // defined(GL_AMBIENT)
   2277 #if defined(GL_DIFFUSE)
   2278         case GL_DIFFUSE:
   2279 #endif // defined(GL_DIFFUSE)
   2280 #if defined(GL_SPECULAR)
   2281         case GL_SPECULAR:
   2282 #endif // defined(GL_SPECULAR)
   2283 #if defined(GL_EMISSION)
   2284         case GL_EMISSION:
   2285 #endif // defined(GL_EMISSION)
   2286 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2287         case GL_AMBIENT_AND_DIFFUSE:
   2288 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2289             _needed = 4;
   2290             break;
   2291         default:
   2292             _needed = 1;
   2293             break;
   2294     }
   2295     if (_remaining < _needed) {
   2296         _exception = 1;
   2297         _exceptionType = "java/lang/IllegalArgumentException";
   2298         _exceptionMessage = "remaining() < needed";
   2299         goto exit;
   2300     }
   2301     if (params == NULL) {
   2302         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2303         params = (GLfloat *) (_paramsBase + _bufferOffset);
   2304     }
   2305     glMaterialfv(
   2306         (GLenum)face,
   2307         (GLenum)pname,
   2308         (GLfloat *)params
   2309     );
   2310 
   2311 exit:
   2312     if (_array) {
   2313         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   2314     }
   2315     if (_exception) {
   2316         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2317     }
   2318 }
   2319 
   2320 /* void glMaterialx ( GLenum face, GLenum pname, GLfixed param ) */
   2321 static void
   2322 android_glMaterialx__III
   2323   (JNIEnv *_env, jobject _this, jint face, jint pname, jint param) {
   2324     glMaterialx(
   2325         (GLenum)face,
   2326         (GLenum)pname,
   2327         (GLfixed)param
   2328     );
   2329 }
   2330 
   2331 /* void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) */
   2332 static void
   2333 android_glMaterialxv__II_3II
   2334   (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
   2335     jint _exception = 0;
   2336     const char * _exceptionType = NULL;
   2337     const char * _exceptionMessage = NULL;
   2338     GLfixed *params_base = (GLfixed *) 0;
   2339     jint _remaining;
   2340     GLfixed *params = (GLfixed *) 0;
   2341 
   2342     if (!params_ref) {
   2343         _exception = 1;
   2344         _exceptionType = "java/lang/IllegalArgumentException";
   2345         _exceptionMessage = "params == null";
   2346         goto exit;
   2347     }
   2348     if (offset < 0) {
   2349         _exception = 1;
   2350         _exceptionType = "java/lang/IllegalArgumentException";
   2351         _exceptionMessage = "offset < 0";
   2352         goto exit;
   2353     }
   2354     _remaining = _env->GetArrayLength(params_ref) - offset;
   2355     int _needed;
   2356     switch (pname) {
   2357 #if defined(GL_AMBIENT)
   2358         case GL_AMBIENT:
   2359 #endif // defined(GL_AMBIENT)
   2360 #if defined(GL_DIFFUSE)
   2361         case GL_DIFFUSE:
   2362 #endif // defined(GL_DIFFUSE)
   2363 #if defined(GL_SPECULAR)
   2364         case GL_SPECULAR:
   2365 #endif // defined(GL_SPECULAR)
   2366 #if defined(GL_EMISSION)
   2367         case GL_EMISSION:
   2368 #endif // defined(GL_EMISSION)
   2369 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2370         case GL_AMBIENT_AND_DIFFUSE:
   2371 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2372             _needed = 4;
   2373             break;
   2374         default:
   2375             _needed = 1;
   2376             break;
   2377     }
   2378     if (_remaining < _needed) {
   2379         _exception = 1;
   2380         _exceptionType = "java/lang/IllegalArgumentException";
   2381         _exceptionMessage = "length - offset < needed";
   2382         goto exit;
   2383     }
   2384     params_base = (GLfixed *)
   2385         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2386     params = params_base + offset;
   2387 
   2388     glMaterialxv(
   2389         (GLenum)face,
   2390         (GLenum)pname,
   2391         (GLfixed *)params
   2392     );
   2393 
   2394 exit:
   2395     if (params_base) {
   2396         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2397             JNI_ABORT);
   2398     }
   2399     if (_exception) {
   2400         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2401     }
   2402 }
   2403 
   2404 /* void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) */
   2405 static void
   2406 android_glMaterialxv__IILjava_nio_IntBuffer_2
   2407   (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
   2408     jint _exception = 0;
   2409     const char * _exceptionType = NULL;
   2410     const char * _exceptionMessage = NULL;
   2411     jintArray _array = (jintArray) 0;
   2412     jint _bufferOffset = (jint) 0;
   2413     jint _remaining;
   2414     GLfixed *params = (GLfixed *) 0;
   2415 
   2416     if (!params_buf) {
   2417         _exception = 1;
   2418         _exceptionType = "java/lang/IllegalArgumentException";
   2419         _exceptionMessage = "params == null";
   2420         goto exit;
   2421     }
   2422     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2423     int _needed;
   2424     switch (pname) {
   2425 #if defined(GL_AMBIENT)
   2426         case GL_AMBIENT:
   2427 #endif // defined(GL_AMBIENT)
   2428 #if defined(GL_DIFFUSE)
   2429         case GL_DIFFUSE:
   2430 #endif // defined(GL_DIFFUSE)
   2431 #if defined(GL_SPECULAR)
   2432         case GL_SPECULAR:
   2433 #endif // defined(GL_SPECULAR)
   2434 #if defined(GL_EMISSION)
   2435         case GL_EMISSION:
   2436 #endif // defined(GL_EMISSION)
   2437 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2438         case GL_AMBIENT_AND_DIFFUSE:
   2439 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2440             _needed = 4;
   2441             break;
   2442         default:
   2443             _needed = 1;
   2444             break;
   2445     }
   2446     if (_remaining < _needed) {
   2447         _exception = 1;
   2448         _exceptionType = "java/lang/IllegalArgumentException";
   2449         _exceptionMessage = "remaining() < needed";
   2450         goto exit;
   2451     }
   2452     if (params == NULL) {
   2453         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2454         params = (GLfixed *) (_paramsBase + _bufferOffset);
   2455     }
   2456     glMaterialxv(
   2457         (GLenum)face,
   2458         (GLenum)pname,
   2459         (GLfixed *)params
   2460     );
   2461 
   2462 exit:
   2463     if (_array) {
   2464         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   2465     }
   2466     if (_exception) {
   2467         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2468     }
   2469 }
   2470 
   2471 /* void glMatrixMode ( GLenum mode ) */
   2472 static void
   2473 android_glMatrixMode__I
   2474   (JNIEnv *_env, jobject _this, jint mode) {
   2475     glMatrixMode(
   2476         (GLenum)mode
   2477     );
   2478 }
   2479 
   2480 /* void glMultMatrixf ( const GLfloat *m ) */
   2481 static void
   2482 android_glMultMatrixf___3FI
   2483   (JNIEnv *_env, jobject _this, jfloatArray m_ref, jint offset) {
   2484     jint _exception = 0;
   2485     const char * _exceptionType = NULL;
   2486     const char * _exceptionMessage = NULL;
   2487     GLfloat *m_base = (GLfloat *) 0;
   2488     jint _remaining;
   2489     GLfloat *m = (GLfloat *) 0;
   2490 
   2491     if (!m_ref) {
   2492         _exception = 1;
   2493         _exceptionType = "java/lang/IllegalArgumentException";
   2494         _exceptionMessage = "m == null";
   2495         goto exit;
   2496     }
   2497     if (offset < 0) {
   2498         _exception = 1;
   2499         _exceptionType = "java/lang/IllegalArgumentException";
   2500         _exceptionMessage = "offset < 0";
   2501         goto exit;
   2502     }
   2503     _remaining = _env->GetArrayLength(m_ref) - offset;
   2504     m_base = (GLfloat *)
   2505         _env->GetFloatArrayElements(m_ref, (jboolean *)0);
   2506     m = m_base + offset;
   2507 
   2508     glMultMatrixf(
   2509         (GLfloat *)m
   2510     );
   2511 
   2512 exit:
   2513     if (m_base) {
   2514         _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
   2515             JNI_ABORT);
   2516     }
   2517     if (_exception) {
   2518         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2519     }
   2520 }
   2521 
   2522 /* void glMultMatrixf ( const GLfloat *m ) */
   2523 static void
   2524 android_glMultMatrixf__Ljava_nio_FloatBuffer_2
   2525   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2526     jint _exception = 0;
   2527     const char * _exceptionType = NULL;
   2528     const char * _exceptionMessage = NULL;
   2529     jfloatArray _array = (jfloatArray) 0;
   2530     jint _bufferOffset = (jint) 0;
   2531     jint _remaining;
   2532     GLfloat *m = (GLfloat *) 0;
   2533 
   2534     if (!m_buf) {
   2535         _exception = 1;
   2536         _exceptionType = "java/lang/IllegalArgumentException";
   2537         _exceptionMessage = "m == null";
   2538         goto exit;
   2539     }
   2540     m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2541     if (m == NULL) {
   2542         char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2543         m = (GLfloat *) (_mBase + _bufferOffset);
   2544     }
   2545     glMultMatrixf(
   2546         (GLfloat *)m
   2547     );
   2548 
   2549 exit:
   2550     if (_array) {
   2551         _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
   2552     }
   2553     if (_exception) {
   2554         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2555     }
   2556 }
   2557 
   2558 /* void glMultMatrixx ( const GLfixed *m ) */
   2559 static void
   2560 android_glMultMatrixx___3II
   2561   (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
   2562     jint _exception = 0;
   2563     const char * _exceptionType = NULL;
   2564     const char * _exceptionMessage = NULL;
   2565     GLfixed *m_base = (GLfixed *) 0;
   2566     jint _remaining;
   2567     GLfixed *m = (GLfixed *) 0;
   2568 
   2569     if (!m_ref) {
   2570         _exception = 1;
   2571         _exceptionType = "java/lang/IllegalArgumentException";
   2572         _exceptionMessage = "m == null";
   2573         goto exit;
   2574     }
   2575     if (offset < 0) {
   2576         _exception = 1;
   2577         _exceptionType = "java/lang/IllegalArgumentException";
   2578         _exceptionMessage = "offset < 0";
   2579         goto exit;
   2580     }
   2581     _remaining = _env->GetArrayLength(m_ref) - offset;
   2582     m_base = (GLfixed *)
   2583         _env->GetIntArrayElements(m_ref, (jboolean *)0);
   2584     m = m_base + offset;
   2585 
   2586     glMultMatrixx(
   2587         (GLfixed *)m
   2588     );
   2589 
   2590 exit:
   2591     if (m_base) {
   2592         _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
   2593             JNI_ABORT);
   2594     }
   2595     if (_exception) {
   2596         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2597     }
   2598 }
   2599 
   2600 /* void glMultMatrixx ( const GLfixed *m ) */
   2601 static void
   2602 android_glMultMatrixx__Ljava_nio_IntBuffer_2
   2603   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2604     jint _exception = 0;
   2605     const char * _exceptionType = NULL;
   2606     const char * _exceptionMessage = NULL;
   2607     jintArray _array = (jintArray) 0;
   2608     jint _bufferOffset = (jint) 0;
   2609     jint _remaining;
   2610     GLfixed *m = (GLfixed *) 0;
   2611 
   2612     if (!m_buf) {
   2613         _exception = 1;
   2614         _exceptionType = "java/lang/IllegalArgumentException";
   2615         _exceptionMessage = "m == null";
   2616         goto exit;
   2617     }
   2618     m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2619     if (m == NULL) {
   2620         char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2621         m = (GLfixed *) (_mBase + _bufferOffset);
   2622     }
   2623     glMultMatrixx(
   2624         (GLfixed *)m
   2625     );
   2626 
   2627 exit:
   2628     if (_array) {
   2629         _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
   2630     }
   2631     if (_exception) {
   2632         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2633     }
   2634 }
   2635 
   2636 /* void glMultiTexCoord4f ( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ) */
   2637 static void
   2638 android_glMultiTexCoord4f__IFFFF
   2639   (JNIEnv *_env, jobject _this, jint target, jfloat s, jfloat t, jfloat r, jfloat q) {
   2640     glMultiTexCoord4f(
   2641         (GLenum)target,
   2642         (GLfloat)s,
   2643         (GLfloat)t,
   2644         (GLfloat)r,
   2645         (GLfloat)q
   2646     );
   2647 }
   2648 
   2649 /* void glMultiTexCoord4x ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q ) */
   2650 static void
   2651 android_glMultiTexCoord4x__IIIII
   2652   (JNIEnv *_env, jobject _this, jint target, jint s, jint t, jint r, jint q) {
   2653     glMultiTexCoord4x(
   2654         (GLenum)target,
   2655         (GLfixed)s,
   2656         (GLfixed)t,
   2657         (GLfixed)r,
   2658         (GLfixed)q
   2659     );
   2660 }
   2661 
   2662 /* void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz ) */
   2663 static void
   2664 android_glNormal3f__FFF
   2665   (JNIEnv *_env, jobject _this, jfloat nx, jfloat ny, jfloat nz) {
   2666     glNormal3f(
   2667         (GLfloat)nx,
   2668         (GLfloat)ny,
   2669         (GLfloat)nz
   2670     );
   2671 }
   2672 
   2673 /* void glNormal3x ( GLfixed nx, GLfixed ny, GLfixed nz ) */
   2674 static void
   2675 android_glNormal3x__III
   2676   (JNIEnv *_env, jobject _this, jint nx, jint ny, jint nz) {
   2677     glNormal3x(
   2678         (GLfixed)nx,
   2679         (GLfixed)ny,
   2680         (GLfixed)nz
   2681     );
   2682 }
   2683 
   2684 /* void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
   2685 static void
   2686 android_glNormalPointerBounds__IILjava_nio_Buffer_2I
   2687   (JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf, jint remaining) {
   2688     jint _exception = 0;
   2689     const char * _exceptionType = NULL;
   2690     const char * _exceptionMessage = NULL;
   2691     jarray _array = (jarray) 0;
   2692     jint _bufferOffset = (jint) 0;
   2693     jint _remaining;
   2694     GLvoid *pointer = (GLvoid *) 0;
   2695 
   2696     if (pointer_buf) {
   2697         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   2698         if ( ! pointer ) {
   2699             return;
   2700         }
   2701     }
   2702     glNormalPointerBounds(
   2703         (GLenum)type,
   2704         (GLsizei)stride,
   2705         (GLvoid *)pointer,
   2706         (GLsizei)remaining
   2707     );
   2708     if (_exception) {
   2709         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2710     }
   2711 }
   2712 
   2713 /* void glOrthof ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
   2714 static void
   2715 android_glOrthof__FFFFFF
   2716   (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
   2717     glOrthof(
   2718         (GLfloat)left,
   2719         (GLfloat)right,
   2720         (GLfloat)bottom,
   2721         (GLfloat)top,
   2722         (GLfloat)zNear,
   2723         (GLfloat)zFar
   2724     );
   2725 }
   2726 
   2727 /* void glOrthox ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
   2728 static void
   2729 android_glOrthox__IIIIII
   2730   (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
   2731     glOrthox(
   2732         (GLfixed)left,
   2733         (GLfixed)right,
   2734         (GLfixed)bottom,
   2735         (GLfixed)top,
   2736         (GLfixed)zNear,
   2737         (GLfixed)zFar
   2738     );
   2739 }
   2740 
   2741 /* void glPixelStorei ( GLenum pname, GLint param ) */
   2742 static void
   2743 android_glPixelStorei__II
   2744   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   2745     glPixelStorei(
   2746         (GLenum)pname,
   2747         (GLint)param
   2748     );
   2749 }
   2750 
   2751 /* void glPointSize ( GLfloat size ) */
   2752 static void
   2753 android_glPointSize__F
   2754   (JNIEnv *_env, jobject _this, jfloat size) {
   2755     glPointSize(
   2756         (GLfloat)size
   2757     );
   2758 }
   2759 
   2760 /* void glPointSizex ( GLfixed size ) */
   2761 static void
   2762 android_glPointSizex__I
   2763   (JNIEnv *_env, jobject _this, jint size) {
   2764     glPointSizex(
   2765         (GLfixed)size
   2766     );
   2767 }
   2768 
   2769 /* void glPolygonOffset ( GLfloat factor, GLfloat units ) */
   2770 static void
   2771 android_glPolygonOffset__FF
   2772   (JNIEnv *_env, jobject _this, jfloat factor, jfloat units) {
   2773     glPolygonOffset(
   2774         (GLfloat)factor,
   2775         (GLfloat)units
   2776     );
   2777 }
   2778 
   2779 /* void glPolygonOffsetx ( GLfixed factor, GLfixed units ) */
   2780 static void
   2781 android_glPolygonOffsetx__II
   2782   (JNIEnv *_env, jobject _this, jint factor, jint units) {
   2783     glPolygonOffsetx(
   2784         (GLfixed)factor,
   2785         (GLfixed)units
   2786     );
   2787 }
   2788 
   2789 /* void glPopMatrix ( void ) */
   2790 static void
   2791 android_glPopMatrix__
   2792   (JNIEnv *_env, jobject _this) {
   2793     glPopMatrix();
   2794 }
   2795 
   2796 /* void glPushMatrix ( void ) */
   2797 static void
   2798 android_glPushMatrix__
   2799   (JNIEnv *_env, jobject _this) {
   2800     glPushMatrix();
   2801 }
   2802 
   2803 /* void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ) */
   2804 static void
   2805 android_glReadPixels__IIIIIILjava_nio_Buffer_2
   2806   (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jobject pixels_buf) {
   2807     jint _exception = 0;
   2808     const char * _exceptionType = NULL;
   2809     const char * _exceptionMessage = NULL;
   2810     jarray _array = (jarray) 0;
   2811     jint _bufferOffset = (jint) 0;
   2812     jint _remaining;
   2813     GLvoid *pixels = (GLvoid *) 0;
   2814 
   2815     if (!pixels_buf) {
   2816         _exception = 1;
   2817         _exceptionType = "java/lang/IllegalArgumentException";
   2818         _exceptionMessage = "pixels == null";
   2819         goto exit;
   2820     }
   2821     pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2822     if (pixels == NULL) {
   2823         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
   2824         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
   2825     }
   2826     glReadPixels(
   2827         (GLint)x,
   2828         (GLint)y,
   2829         (GLsizei)width,
   2830         (GLsizei)height,
   2831         (GLenum)format,
   2832         (GLenum)type,
   2833         (GLvoid *)pixels
   2834     );
   2835 
   2836 exit:
   2837     if (_array) {
   2838         releasePointer(_env, _array, pixels, _exception ? JNI_FALSE : JNI_TRUE);
   2839     }
   2840     if (_exception) {
   2841         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2842     }
   2843 }
   2844 
   2845 /* void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ) */
   2846 static void
   2847 android_glRotatef__FFFF
   2848   (JNIEnv *_env, jobject _this, jfloat angle, jfloat x, jfloat y, jfloat z) {
   2849     glRotatef(
   2850         (GLfloat)angle,
   2851         (GLfloat)x,
   2852         (GLfloat)y,
   2853         (GLfloat)z
   2854     );
   2855 }
   2856 
   2857 /* void glRotatex ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z ) */
   2858 static void
   2859 android_glRotatex__IIII
   2860   (JNIEnv *_env, jobject _this, jint angle, jint x, jint y, jint z) {
   2861     glRotatex(
   2862         (GLfixed)angle,
   2863         (GLfixed)x,
   2864         (GLfixed)y,
   2865         (GLfixed)z
   2866     );
   2867 }
   2868 
   2869 /* void glSampleCoverage ( GLclampf value, GLboolean invert ) */
   2870 static void
   2871 android_glSampleCoverage__FZ
   2872   (JNIEnv *_env, jobject _this, jfloat value, jboolean invert) {
   2873     glSampleCoverage(
   2874         (GLclampf)value,
   2875         (GLboolean)invert
   2876     );
   2877 }
   2878 
   2879 /* void glSampleCoveragex ( GLclampx value, GLboolean invert ) */
   2880 static void
   2881 android_glSampleCoveragex__IZ
   2882   (JNIEnv *_env, jobject _this, jint value, jboolean invert) {
   2883     glSampleCoveragex(
   2884         (GLclampx)value,
   2885         (GLboolean)invert
   2886     );
   2887 }
   2888 
   2889 /* void glScalef ( GLfloat x, GLfloat y, GLfloat z ) */
   2890 static void
   2891 android_glScalef__FFF
   2892   (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z) {
   2893     glScalef(
   2894         (GLfloat)x,
   2895         (GLfloat)y,
   2896         (GLfloat)z
   2897     );
   2898 }
   2899 
   2900 /* void glScalex ( GLfixed x, GLfixed y, GLfixed z ) */
   2901 static void
   2902 android_glScalex__III
   2903   (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
   2904     glScalex(
   2905         (GLfixed)x,
   2906         (GLfixed)y,
   2907         (GLfixed)z
   2908     );
   2909 }
   2910 
   2911 /* void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height ) */
   2912 static void
   2913 android_glScissor__IIII
   2914   (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
   2915     glScissor(
   2916         (GLint)x,
   2917         (GLint)y,
   2918         (GLsizei)width,
   2919         (GLsizei)height
   2920     );
   2921 }
   2922 
   2923 /* void glShadeModel ( GLenum mode ) */
   2924 static void
   2925 android_glShadeModel__I
   2926   (JNIEnv *_env, jobject _this, jint mode) {
   2927     glShadeModel(
   2928         (GLenum)mode
   2929     );
   2930 }
   2931 
   2932 /* void glStencilFunc ( GLenum func, GLint ref, GLuint mask ) */
   2933 static void
   2934 android_glStencilFunc__III
   2935   (JNIEnv *_env, jobject _this, jint func, jint ref, jint mask) {
   2936     glStencilFunc(
   2937         (GLenum)func,
   2938         (GLint)ref,
   2939         (GLuint)mask
   2940     );
   2941 }
   2942 
   2943 /* void glStencilMask ( GLuint mask ) */
   2944 static void
   2945 android_glStencilMask__I
   2946   (JNIEnv *_env, jobject _this, jint mask) {
   2947     glStencilMask(
   2948         (GLuint)mask
   2949     );
   2950 }
   2951 
   2952 /* void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass ) */
   2953 static void
   2954 android_glStencilOp__III
   2955   (JNIEnv *_env, jobject _this, jint fail, jint zfail, jint zpass) {
   2956     glStencilOp(
   2957         (GLenum)fail,
   2958         (GLenum)zfail,
   2959         (GLenum)zpass
   2960     );
   2961 }
   2962 
   2963 /* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
   2964 static void
   2965 android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I
   2966   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
   2967     jint _exception = 0;
   2968     const char * _exceptionType = NULL;
   2969     const char * _exceptionMessage = NULL;
   2970     jarray _array = (jarray) 0;
   2971     jint _bufferOffset = (jint) 0;
   2972     jint _remaining;
   2973     GLvoid *pointer = (GLvoid *) 0;
   2974 
   2975     if (pointer_buf) {
   2976         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   2977         if ( ! pointer ) {
   2978             return;
   2979         }
   2980     }
   2981     glTexCoordPointerBounds(
   2982         (GLint)size,
   2983         (GLenum)type,
   2984         (GLsizei)stride,
   2985         (GLvoid *)pointer,
   2986         (GLsizei)remaining
   2987     );
   2988     if (_exception) {
   2989         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2990     }
   2991 }
   2992 
   2993 /* void glTexEnvf ( GLenum target, GLenum pname, GLfloat param ) */
   2994 static void
   2995 android_glTexEnvf__IIF
   2996   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
   2997     glTexEnvf(
   2998         (GLenum)target,
   2999         (GLenum)pname,
   3000         (GLfloat)param
   3001     );
   3002 }
   3003 
   3004 /* void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) */
   3005 static void
   3006 android_glTexEnvfv__II_3FI
   3007   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
   3008     jint _exception = 0;
   3009     const char * _exceptionType = NULL;
   3010     const char * _exceptionMessage = NULL;
   3011     GLfloat *params_base = (GLfloat *) 0;
   3012     jint _remaining;
   3013     GLfloat *params = (GLfloat *) 0;
   3014 
   3015     if (!params_ref) {
   3016         _exception = 1;
   3017         _exceptionType = "java/lang/IllegalArgumentException";
   3018         _exceptionMessage = "params == null";
   3019         goto exit;
   3020     }
   3021     if (offset < 0) {
   3022         _exception = 1;
   3023         _exceptionType = "java/lang/IllegalArgumentException";
   3024         _exceptionMessage = "offset < 0";
   3025         goto exit;
   3026     }
   3027     _remaining = _env->GetArrayLength(params_ref) - offset;
   3028     int _needed;
   3029     switch (pname) {
   3030 #if defined(GL_TEXTURE_ENV_COLOR)
   3031         case GL_TEXTURE_ENV_COLOR:
   3032 #endif // defined(GL_TEXTURE_ENV_COLOR)
   3033             _needed = 4;
   3034             break;
   3035         default:
   3036             _needed = 1;
   3037             break;
   3038     }
   3039     if (_remaining < _needed) {
   3040         _exception = 1;
   3041         _exceptionType = "java/lang/IllegalArgumentException";
   3042         _exceptionMessage = "length - offset < needed";
   3043         goto exit;
   3044     }
   3045     params_base = (GLfloat *)
   3046         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   3047     params = params_base + offset;
   3048 
   3049     glTexEnvfv(
   3050         (GLenum)target,
   3051         (GLenum)pname,
   3052         (GLfloat *)params
   3053     );
   3054 
   3055 exit:
   3056     if (params_base) {
   3057         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   3058             JNI_ABORT);
   3059     }
   3060     if (_exception) {
   3061         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3062     }
   3063 }
   3064 
   3065 /* void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) */
   3066 static void
   3067 android_glTexEnvfv__IILjava_nio_FloatBuffer_2
   3068   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   3069     jint _exception = 0;
   3070     const char * _exceptionType = NULL;
   3071     const char * _exceptionMessage = NULL;
   3072     jfloatArray _array = (jfloatArray) 0;
   3073     jint _bufferOffset = (jint) 0;
   3074     jint _remaining;
   3075     GLfloat *params = (GLfloat *) 0;
   3076 
   3077     if (!params_buf) {
   3078         _exception = 1;
   3079         _exceptionType = "java/lang/IllegalArgumentException";
   3080         _exceptionMessage = "params == null";
   3081         goto exit;
   3082     }
   3083     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3084     int _needed;
   3085     switch (pname) {
   3086 #if defined(GL_TEXTURE_ENV_COLOR)
   3087         case GL_TEXTURE_ENV_COLOR:
   3088 #endif // defined(GL_TEXTURE_ENV_COLOR)
   3089             _needed = 4;
   3090             break;
   3091         default:
   3092             _needed = 1;
   3093             break;
   3094     }
   3095     if (_remaining < _needed) {
   3096         _exception = 1;
   3097         _exceptionType = "java/lang/IllegalArgumentException";
   3098         _exceptionMessage = "remaining() < needed";
   3099         goto exit;
   3100     }
   3101     if (params == NULL) {
   3102         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   3103         params = (GLfloat *) (_paramsBase + _bufferOffset);
   3104     }
   3105     glTexEnvfv(
   3106         (GLenum)target,
   3107         (GLenum)pname,
   3108         (GLfloat *)params
   3109     );
   3110 
   3111 exit:
   3112     if (_array) {
   3113         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   3114     }
   3115     if (_exception) {
   3116         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3117     }
   3118 }
   3119 
   3120 /* void glTexEnvx ( GLenum target, GLenum pname, GLfixed param ) */
   3121 static void
   3122 android_glTexEnvx__III
   3123   (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
   3124     glTexEnvx(
   3125         (GLenum)target,
   3126         (GLenum)pname,
   3127         (GLfixed)param
   3128     );
   3129 }
   3130 
   3131 /* void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) */
   3132 static void
   3133 android_glTexEnvxv__II_3II
   3134   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   3135     jint _exception = 0;
   3136     const char * _exceptionType = NULL;
   3137     const char * _exceptionMessage = NULL;
   3138     GLfixed *params_base = (GLfixed *) 0;
   3139     jint _remaining;
   3140     GLfixed *params = (GLfixed *) 0;
   3141 
   3142     if (!params_ref) {
   3143         _exception = 1;
   3144         _exceptionType = "java/lang/IllegalArgumentException";
   3145         _exceptionMessage = "params == null";
   3146         goto exit;
   3147     }
   3148     if (offset < 0) {
   3149         _exception = 1;
   3150         _exceptionType = "java/lang/IllegalArgumentException";
   3151         _exceptionMessage = "offset < 0";
   3152         goto exit;
   3153     }
   3154     _remaining = _env->GetArrayLength(params_ref) - offset;
   3155     int _needed;
   3156     switch (pname) {
   3157 #if defined(GL_TEXTURE_ENV_COLOR)
   3158         case GL_TEXTURE_ENV_COLOR:
   3159 #endif // defined(GL_TEXTURE_ENV_COLOR)
   3160             _needed = 4;
   3161             break;
   3162         default:
   3163             _needed = 1;
   3164             break;
   3165     }
   3166     if (_remaining < _needed) {
   3167         _exception = 1;
   3168         _exceptionType = "java/lang/IllegalArgumentException";
   3169         _exceptionMessage = "length - offset < needed";
   3170         goto exit;
   3171     }
   3172     params_base = (GLfixed *)
   3173         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   3174     params = params_base + offset;
   3175 
   3176     glTexEnvxv(
   3177         (GLenum)target,
   3178         (GLenum)pname,
   3179         (GLfixed *)params
   3180     );
   3181 
   3182 exit:
   3183     if (params_base) {
   3184         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   3185             JNI_ABORT);
   3186     }
   3187     if (_exception) {
   3188         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3189     }
   3190 }
   3191 
   3192 /* void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) */
   3193 static void
   3194 android_glTexEnvxv__IILjava_nio_IntBuffer_2
   3195   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   3196     jint _exception = 0;
   3197     const char * _exceptionType = NULL;
   3198     const char * _exceptionMessage = NULL;
   3199     jintArray _array = (jintArray) 0;
   3200     jint _bufferOffset = (jint) 0;
   3201     jint _remaining;
   3202     GLfixed *params = (GLfixed *) 0;
   3203 
   3204     if (!params_buf) {
   3205         _exception = 1;
   3206         _exceptionType = "java/lang/IllegalArgumentException";
   3207         _exceptionMessage = "params == null";
   3208         goto exit;
   3209     }
   3210     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3211     int _needed;
   3212     switch (pname) {
   3213 #if defined(GL_TEXTURE_ENV_COLOR)
   3214         case GL_TEXTURE_ENV_COLOR:
   3215 #endif // defined(GL_TEXTURE_ENV_COLOR)
   3216             _needed = 4;
   3217             break;
   3218         default:
   3219             _needed = 1;
   3220             break;
   3221     }
   3222     if (_remaining < _needed) {
   3223         _exception = 1;
   3224         _exceptionType = "java/lang/IllegalArgumentException";
   3225         _exceptionMessage = "remaining() < needed";
   3226         goto exit;
   3227     }
   3228     if (params == NULL) {
   3229         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   3230         params = (GLfixed *) (_paramsBase + _bufferOffset);
   3231     }
   3232     glTexEnvxv(
   3233         (GLenum)target,
   3234         (GLenum)pname,
   3235         (GLfixed *)params
   3236     );
   3237 
   3238 exit:
   3239     if (_array) {
   3240         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   3241     }
   3242     if (_exception) {
   3243         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3244     }
   3245 }
   3246 
   3247 /* void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
   3248 static void
   3249 android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
   3250   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint format, jint type, jobject pixels_buf) {
   3251     jint _exception = 0;
   3252     const char * _exceptionType = NULL;
   3253     const char * _exceptionMessage = NULL;
   3254     jarray _array = (jarray) 0;
   3255     jint _bufferOffset = (jint) 0;
   3256     jint _remaining;
   3257     GLvoid *pixels = (GLvoid *) 0;
   3258 
   3259     if (pixels_buf) {
   3260         pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3261     }
   3262     if (pixels_buf && pixels == NULL) {
   3263         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
   3264         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
   3265     }
   3266     glTexImage2D(
   3267         (GLenum)target,
   3268         (GLint)level,
   3269         (GLint)internalformat,
   3270         (GLsizei)width,
   3271         (GLsizei)height,
   3272         (GLint)border,
   3273         (GLenum)format,
   3274         (GLenum)type,
   3275         (GLvoid *)pixels
   3276     );
   3277     if (_array) {
   3278         releasePointer(_env, _array, pixels, JNI_FALSE);
   3279     }
   3280     if (_exception) {
   3281         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3282     }
   3283 }
   3284 
   3285 /* void glTexParameterf ( GLenum target, GLenum pname, GLfloat param ) */
   3286 static void
   3287 android_glTexParameterf__IIF
   3288   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
   3289     glTexParameterf(
   3290         (GLenum)target,
   3291         (GLenum)pname,
   3292         (GLfloat)param
   3293     );
   3294 }
   3295 
   3296 /* void glTexParameterx ( GLenum target, GLenum pname, GLfixed param ) */
   3297 static void
   3298 android_glTexParameterx__III
   3299   (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
   3300     glTexParameterx(
   3301         (GLenum)target,
   3302         (GLenum)pname,
   3303         (GLfixed)param
   3304     );
   3305 }
   3306 
   3307 /* void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ) */
   3308 static void
   3309 android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
   3310   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint type, jobject pixels_buf) {
   3311     jint _exception = 0;
   3312     const char * _exceptionType = NULL;
   3313     const char * _exceptionMessage = NULL;
   3314     jarray _array = (jarray) 0;
   3315     jint _bufferOffset = (jint) 0;
   3316     jint _remaining;
   3317     GLvoid *pixels = (GLvoid *) 0;
   3318 
   3319     if (pixels_buf) {
   3320         pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3321     }
   3322     if (pixels_buf && pixels == NULL) {
   3323         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
   3324         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
   3325     }
   3326     glTexSubImage2D(
   3327         (GLenum)target,
   3328         (GLint)level,
   3329         (GLint)xoffset,
   3330         (GLint)yoffset,
   3331         (GLsizei)width,
   3332         (GLsizei)height,
   3333         (GLenum)format,
   3334         (GLenum)type,
   3335         (GLvoid *)pixels
   3336     );
   3337     if (_array) {
   3338         releasePointer(_env, _array, pixels, JNI_FALSE);
   3339     }
   3340     if (_exception) {
   3341         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3342     }
   3343 }
   3344 
   3345 /* void glTranslatef ( GLfloat x, GLfloat y, GLfloat z ) */
   3346 static void
   3347 android_glTranslatef__FFF
   3348   (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z) {
   3349     glTranslatef(
   3350         (GLfloat)x,
   3351         (GLfloat)y,
   3352         (GLfloat)z
   3353     );
   3354 }
   3355 
   3356 /* void glTranslatex ( GLfixed x, GLfixed y, GLfixed z ) */
   3357 static void
   3358 android_glTranslatex__III
   3359   (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
   3360     glTranslatex(
   3361         (GLfixed)x,
   3362         (GLfixed)y,
   3363         (GLfixed)z
   3364     );
   3365 }
   3366 
   3367 /* void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
   3368 static void
   3369 android_glVertexPointerBounds__IIILjava_nio_Buffer_2I
   3370   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
   3371     jint _exception = 0;
   3372     const char * _exceptionType = NULL;
   3373     const char * _exceptionMessage = NULL;
   3374     jarray _array = (jarray) 0;
   3375     jint _bufferOffset = (jint) 0;
   3376     jint _remaining;
   3377     GLvoid *pointer = (GLvoid *) 0;
   3378 
   3379     if (pointer_buf) {
   3380         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   3381         if ( ! pointer ) {
   3382             return;
   3383         }
   3384     }
   3385     glVertexPointerBounds(
   3386         (GLint)size,
   3387         (GLenum)type,
   3388         (GLsizei)stride,
   3389         (GLvoid *)pointer,
   3390         (GLsizei)remaining
   3391     );
   3392     if (_exception) {
   3393         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3394     }
   3395 }
   3396 
   3397 /* void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ) */
   3398 static void
   3399 android_glViewport__IIII
   3400   (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
   3401     glViewport(
   3402         (GLint)x,
   3403         (GLint)y,
   3404         (GLsizei)width,
   3405         (GLsizei)height
   3406     );
   3407 }
   3408 
   3409 static const char *classPathName = "android/opengl/GLES10";
   3410 
   3411 static const JNINativeMethod methods[] = {
   3412 {"_nativeClassInit", "()V", (void*)nativeClassInit },
   3413 {"glActiveTexture", "(I)V", (void *) android_glActiveTexture__I },
   3414 {"glAlphaFunc", "(IF)V", (void *) android_glAlphaFunc__IF },
   3415 {"glAlphaFuncx", "(II)V", (void *) android_glAlphaFuncx__II },
   3416 {"glBindTexture", "(II)V", (void *) android_glBindTexture__II },
   3417 {"glBlendFunc", "(II)V", (void *) android_glBlendFunc__II },
   3418 {"glClear", "(I)V", (void *) android_glClear__I },
   3419 {"glClearColor", "(FFFF)V", (void *) android_glClearColor__FFFF },
   3420 {"glClearColorx", "(IIII)V", (void *) android_glClearColorx__IIII },
   3421 {"glClearDepthf", "(F)V", (void *) android_glClearDepthf__F },
   3422 {"glClearDepthx", "(I)V", (void *) android_glClearDepthx__I },
   3423 {"glClearStencil", "(I)V", (void *) android_glClearStencil__I },
   3424 {"glClientActiveTexture", "(I)V", (void *) android_glClientActiveTexture__I },
   3425 {"glColor4f", "(FFFF)V", (void *) android_glColor4f__FFFF },
   3426 {"glColor4x", "(IIII)V", (void *) android_glColor4x__IIII },
   3427 {"glColorMask", "(ZZZZ)V", (void *) android_glColorMask__ZZZZ },
   3428 {"glColorPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glColorPointerBounds__IIILjava_nio_Buffer_2I },
   3429 {"glCompressedTexImage2D", "(IIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2 },
   3430 {"glCompressedTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
   3431 {"glCopyTexImage2D", "(IIIIIIII)V", (void *) android_glCopyTexImage2D__IIIIIIII },
   3432 {"glCopyTexSubImage2D", "(IIIIIIII)V", (void *) android_glCopyTexSubImage2D__IIIIIIII },
   3433 {"glCullFace", "(I)V", (void *) android_glCullFace__I },
   3434 {"glDeleteTextures", "(I[II)V", (void *) android_glDeleteTextures__I_3II },
   3435 {"glDeleteTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTextures__ILjava_nio_IntBuffer_2 },
   3436 {"glDepthFunc", "(I)V", (void *) android_glDepthFunc__I },
   3437 {"glDepthMask", "(Z)V", (void *) android_glDepthMask__Z },
   3438 {"glDepthRangef", "(FF)V", (void *) android_glDepthRangef__FF },
   3439 {"glDepthRangex", "(II)V", (void *) android_glDepthRangex__II },
   3440 {"glDisable", "(I)V", (void *) android_glDisable__I },
   3441 {"glDisableClientState", "(I)V", (void *) android_glDisableClientState__I },
   3442 {"glDrawArrays", "(III)V", (void *) android_glDrawArrays__III },
   3443 {"glDrawElements", "(IIILjava/nio/Buffer;)V", (void *) android_glDrawElements__IIILjava_nio_Buffer_2 },
   3444 {"glEnable", "(I)V", (void *) android_glEnable__I },
   3445 {"glEnableClientState", "(I)V", (void *) android_glEnableClientState__I },
   3446 {"glFinish", "()V", (void *) android_glFinish__ },
   3447 {"glFlush", "()V", (void *) android_glFlush__ },
   3448 {"glFogf", "(IF)V", (void *) android_glFogf__IF },
   3449 {"glFogfv", "(I[FI)V", (void *) android_glFogfv__I_3FI },
   3450 {"glFogfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glFogfv__ILjava_nio_FloatBuffer_2 },
   3451 {"glFogx", "(II)V", (void *) android_glFogx__II },
   3452 {"glFogxv", "(I[II)V", (void *) android_glFogxv__I_3II },
   3453 {"glFogxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glFogxv__ILjava_nio_IntBuffer_2 },
   3454 {"glFrontFace", "(I)V", (void *) android_glFrontFace__I },
   3455 {"glFrustumf", "(FFFFFF)V", (void *) android_glFrustumf__FFFFFF },
   3456 {"glFrustumx", "(IIIIII)V", (void *) android_glFrustumx__IIIIII },
   3457 {"glGenTextures", "(I[II)V", (void *) android_glGenTextures__I_3II },
   3458 {"glGenTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTextures__ILjava_nio_IntBuffer_2 },
   3459 {"glGetError", "()I", (void *) android_glGetError__ },
   3460 {"glGetIntegerv", "(I[II)V", (void *) android_glGetIntegerv__I_3II },
   3461 {"glGetIntegerv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetIntegerv__ILjava_nio_IntBuffer_2 },
   3462 {"glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString },
   3463 {"glHint", "(II)V", (void *) android_glHint__II },
   3464 {"glLightModelf", "(IF)V", (void *) android_glLightModelf__IF },
   3465 {"glLightModelfv", "(I[FI)V", (void *) android_glLightModelfv__I_3FI },
   3466 {"glLightModelfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glLightModelfv__ILjava_nio_FloatBuffer_2 },
   3467 {"glLightModelx", "(II)V", (void *) android_glLightModelx__II },
   3468 {"glLightModelxv", "(I[II)V", (void *) android_glLightModelxv__I_3II },
   3469 {"glLightModelxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glLightModelxv__ILjava_nio_IntBuffer_2 },
   3470 {"glLightf", "(IIF)V", (void *) android_glLightf__IIF },
   3471 {"glLightfv", "(II[FI)V", (void *) android_glLightfv__II_3FI },
   3472 {"glLightfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glLightfv__IILjava_nio_FloatBuffer_2 },
   3473 {"glLightx", "(III)V", (void *) android_glLightx__III },
   3474 {"glLightxv", "(II[II)V", (void *) android_glLightxv__II_3II },
   3475 {"glLightxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glLightxv__IILjava_nio_IntBuffer_2 },
   3476 {"glLineWidth", "(F)V", (void *) android_glLineWidth__F },
   3477 {"glLineWidthx", "(I)V", (void *) android_glLineWidthx__I },
   3478 {"glLoadIdentity", "()V", (void *) android_glLoadIdentity__ },
   3479 {"glLoadMatrixf", "([FI)V", (void *) android_glLoadMatrixf___3FI },
   3480 {"glLoadMatrixf", "(Ljava/nio/FloatBuffer;)V", (void *) android_glLoadMatrixf__Ljava_nio_FloatBuffer_2 },
   3481 {"glLoadMatrixx", "([II)V", (void *) android_glLoadMatrixx___3II },
   3482 {"glLoadMatrixx", "(Ljava/nio/IntBuffer;)V", (void *) android_glLoadMatrixx__Ljava_nio_IntBuffer_2 },
   3483 {"glLogicOp", "(I)V", (void *) android_glLogicOp__I },
   3484 {"glMaterialf", "(IIF)V", (void *) android_glMaterialf__IIF },
   3485 {"glMaterialfv", "(II[FI)V", (void *) android_glMaterialfv__II_3FI },
   3486 {"glMaterialfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glMaterialfv__IILjava_nio_FloatBuffer_2 },
   3487 {"glMaterialx", "(III)V", (void *) android_glMaterialx__III },
   3488 {"glMaterialxv", "(II[II)V", (void *) android_glMaterialxv__II_3II },
   3489 {"glMaterialxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glMaterialxv__IILjava_nio_IntBuffer_2 },
   3490 {"glMatrixMode", "(I)V", (void *) android_glMatrixMode__I },
   3491 {"glMultMatrixf", "([FI)V", (void *) android_glMultMatrixf___3FI },
   3492 {"glMultMatrixf", "(Ljava/nio/FloatBuffer;)V", (void *) android_glMultMatrixf__Ljava_nio_FloatBuffer_2 },
   3493 {"glMultMatrixx", "([II)V", (void *) android_glMultMatrixx___3II },
   3494 {"glMultMatrixx", "(Ljava/nio/IntBuffer;)V", (void *) android_glMultMatrixx__Ljava_nio_IntBuffer_2 },
   3495 {"glMultiTexCoord4f", "(IFFFF)V", (void *) android_glMultiTexCoord4f__IFFFF },
   3496 {"glMultiTexCoord4x", "(IIIII)V", (void *) android_glMultiTexCoord4x__IIIII },
   3497 {"glNormal3f", "(FFF)V", (void *) android_glNormal3f__FFF },
   3498 {"glNormal3x", "(III)V", (void *) android_glNormal3x__III },
   3499 {"glNormalPointerBounds", "(IILjava/nio/Buffer;I)V", (void *) android_glNormalPointerBounds__IILjava_nio_Buffer_2I },
   3500 {"glOrthof", "(FFFFFF)V", (void *) android_glOrthof__FFFFFF },
   3501 {"glOrthox", "(IIIIII)V", (void *) android_glOrthox__IIIIII },
   3502 {"glPixelStorei", "(II)V", (void *) android_glPixelStorei__II },
   3503 {"glPointSize", "(F)V", (void *) android_glPointSize__F },
   3504 {"glPointSizex", "(I)V", (void *) android_glPointSizex__I },
   3505 {"glPolygonOffset", "(FF)V", (void *) android_glPolygonOffset__FF },
   3506 {"glPolygonOffsetx", "(II)V", (void *) android_glPolygonOffsetx__II },
   3507 {"glPopMatrix", "()V", (void *) android_glPopMatrix__ },
   3508 {"glPushMatrix", "()V", (void *) android_glPushMatrix__ },
   3509 {"glReadPixels", "(IIIIIILjava/nio/Buffer;)V", (void *) android_glReadPixels__IIIIIILjava_nio_Buffer_2 },
   3510 {"glRotatef", "(FFFF)V", (void *) android_glRotatef__FFFF },
   3511 {"glRotatex", "(IIII)V", (void *) android_glRotatex__IIII },
   3512 {"glSampleCoverage", "(FZ)V", (void *) android_glSampleCoverage__FZ },
   3513 {"glSampleCoveragex", "(IZ)V", (void *) android_glSampleCoveragex__IZ },
   3514 {"glScalef", "(FFF)V", (void *) android_glScalef__FFF },
   3515 {"glScalex", "(III)V", (void *) android_glScalex__III },
   3516 {"glScissor", "(IIII)V", (void *) android_glScissor__IIII },
   3517 {"glShadeModel", "(I)V", (void *) android_glShadeModel__I },
   3518 {"glStencilFunc", "(III)V", (void *) android_glStencilFunc__III },
   3519 {"glStencilMask", "(I)V", (void *) android_glStencilMask__I },
   3520 {"glStencilOp", "(III)V", (void *) android_glStencilOp__III },
   3521 {"glTexCoordPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I },
   3522 {"glTexEnvf", "(IIF)V", (void *) android_glTexEnvf__IIF },
   3523 {"glTexEnvfv", "(II[FI)V", (void *) android_glTexEnvfv__II_3FI },
   3524 {"glTexEnvfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexEnvfv__IILjava_nio_FloatBuffer_2 },
   3525 {"glTexEnvx", "(III)V", (void *) android_glTexEnvx__III },
   3526 {"glTexEnvxv", "(II[II)V", (void *) android_glTexEnvxv__II_3II },
   3527 {"glTexEnvxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexEnvxv__IILjava_nio_IntBuffer_2 },
   3528 {"glTexImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2 },
   3529 {"glTexParameterf", "(IIF)V", (void *) android_glTexParameterf__IIF },
   3530 {"glTexParameterx", "(III)V", (void *) android_glTexParameterx__III },
   3531 {"glTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
   3532 {"glTranslatef", "(FFF)V", (void *) android_glTranslatef__FFF },
   3533 {"glTranslatex", "(III)V", (void *) android_glTranslatex__III },
   3534 {"glVertexPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glVertexPointerBounds__IIILjava_nio_Buffer_2I },
   3535 {"glViewport", "(IIII)V", (void *) android_glViewport__IIII },
   3536 };
   3537 
   3538 int register_android_opengl_jni_GLES10(JNIEnv *_env)
   3539 {
   3540     int err;
   3541     err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
   3542     return err;
   3543 }
   3544