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-but-set-variable"
     22 #pragma GCC diagnostic ignored "-Wunused-function"
     23 
     24 #include <GLES/gl.h>
     25 #include <GLES/glext.h>
     26 
     27 #include <jni.h>
     28 #include <JNIHelp.h>
     29 #include <android_runtime/AndroidRuntime.h>
     30 #include <utils/misc.h>
     31 #include <assert.h>
     32 
     33 static int initialized = 0;
     34 
     35 static jclass nioAccessClass;
     36 static jclass bufferClass;
     37 static jmethodID getBasePointerID;
     38 static jmethodID getBaseArrayID;
     39 static jmethodID getBaseArrayOffsetID;
     40 static jfieldID positionID;
     41 static jfieldID limitID;
     42 static jfieldID elementSizeShiftID;
     43 
     44 
     45 /* special calls implemented in Android's GLES wrapper used to more
     46  * efficiently bound-check passed arrays */
     47 extern "C" {
     48 #ifdef GL_VERSION_ES_CM_1_1
     49 GL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
     50         const GLvoid *ptr, GLsizei count);
     51 GL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
     52         const GLvoid *pointer, GLsizei count);
     53 GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
     54         GLsizei stride, const GLvoid *pointer, GLsizei count);
     55 GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
     56         GLsizei stride, const GLvoid *pointer, GLsizei count);
     57 GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
     58         GLsizei stride, const GLvoid *pointer, GLsizei count);
     59 GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
     60         GLsizei stride, const GLvoid *pointer, GLsizei count);
     61 GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
     62         GLsizei stride, const GLvoid *pointer, GLsizei count);
     63 #endif
     64 #ifdef GL_ES_VERSION_2_0
     65 static void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
     66         GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
     67     glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
     68 }
     69 #endif
     70 #ifdef GL_ES_VERSION_3_0
     71 static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
     72         GLsizei stride, const GLvoid *pointer, GLsizei count) {
     73     glVertexAttribIPointer(indx, size, type, stride, pointer);
     74 }
     75 #endif
     76 }
     77 
     78 /* Cache method IDs each time the class is loaded. */
     79 
     80 static void
     81 nativeClassInit(JNIEnv *_env, jclass glImplClass)
     82 {
     83     jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
     84     nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
     85 
     86     jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
     87     bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
     88 
     89     getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
     90             "getBasePointer", "(Ljava/nio/Buffer;)J");
     91     getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
     92             "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
     93     getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
     94             "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
     95 
     96     positionID = _env->GetFieldID(bufferClass, "position", "I");
     97     limitID = _env->GetFieldID(bufferClass, "limit", "I");
     98     elementSizeShiftID =
     99         _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
    100 }
    101 
    102 static void *
    103 getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
    104 {
    105     jint position;
    106     jint limit;
    107     jint elementSizeShift;
    108     jlong pointer;
    109 
    110     position = _env->GetIntField(buffer, positionID);
    111     limit = _env->GetIntField(buffer, limitID);
    112     elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
    113     *remaining = (limit - position) << elementSizeShift;
    114     pointer = _env->CallStaticLongMethod(nioAccessClass,
    115             getBasePointerID, buffer);
    116     if (pointer != 0L) {
    117         *array = NULL;
    118         return reinterpret_cast<void*>(pointer);
    119     }
    120 
    121     *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
    122             getBaseArrayID, buffer);
    123     *offset = _env->CallStaticIntMethod(nioAccessClass,
    124             getBaseArrayOffsetID, buffer);
    125 
    126     return NULL;
    127 }
    128 
    129 class ByteArrayGetter {
    130 public:
    131     static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
    132         return _env->GetByteArrayElements(array, is_copy);
    133     }
    134 };
    135 class BooleanArrayGetter {
    136 public:
    137     static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
    138         return _env->GetBooleanArrayElements(array, is_copy);
    139     }
    140 };
    141 class CharArrayGetter {
    142 public:
    143     static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
    144         return _env->GetCharArrayElements(array, is_copy);
    145     }
    146 };
    147 class ShortArrayGetter {
    148 public:
    149     static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
    150         return _env->GetShortArrayElements(array, is_copy);
    151     }
    152 };
    153 class IntArrayGetter {
    154 public:
    155     static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
    156         return _env->GetIntArrayElements(array, is_copy);
    157     }
    158 };
    159 class LongArrayGetter {
    160 public:
    161     static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
    162         return _env->GetLongArrayElements(array, is_copy);
    163     }
    164 };
    165 class FloatArrayGetter {
    166 public:
    167     static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
    168         return _env->GetFloatArrayElements(array, is_copy);
    169     }
    170 };
    171 class DoubleArrayGetter {
    172 public:
    173     static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
    174         return _env->GetDoubleArrayElements(array, is_copy);
    175     }
    176 };
    177 
    178 template<typename JTYPEARRAY, typename ARRAYGETTER>
    179 static void*
    180 getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
    181     return ARRAYGETTER::Get(_env, array, is_copy);
    182 }
    183 
    184 class ByteArrayReleaser {
    185 public:
    186     static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
    187         _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
    188     }
    189 };
    190 class BooleanArrayReleaser {
    191 public:
    192     static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
    193         _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
    194     }
    195 };
    196 class CharArrayReleaser {
    197 public:
    198     static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
    199         _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
    200     }
    201 };
    202 class ShortArrayReleaser {
    203 public:
    204     static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
    205         _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
    206     }
    207 };
    208 class IntArrayReleaser {
    209 public:
    210     static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
    211         _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
    212     }
    213 };
    214 class LongArrayReleaser {
    215 public:
    216     static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
    217         _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
    218     }
    219 };
    220 class FloatArrayReleaser {
    221 public:
    222     static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
    223         _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
    224     }
    225 };
    226 class DoubleArrayReleaser {
    227 public:
    228     static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
    229         _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
    230     }
    231 };
    232 
    233 template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
    234 static void
    235 releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
    236     ARRAYRELEASER::Release(_env, array, data, commit);
    237 }
    238 
    239 static void
    240 releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
    241 {
    242     _env->ReleasePrimitiveArrayCritical(array, data,
    243                        commit ? 0 : JNI_ABORT);
    244 }
    245 
    246 static void *
    247 getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
    248     char* buf = (char*) _env->GetDirectBufferAddress(buffer);
    249     if (buf) {
    250         jint position = _env->GetIntField(buffer, positionID);
    251         jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
    252         buf += position << elementSizeShift;
    253     } else {
    254         jniThrowException(_env, "java/lang/IllegalArgumentException",
    255                           "Must use a native order direct Buffer");
    256     }
    257     return (void*) buf;
    258 }
    259 
    260 // --------------------------------------------------------------------------
    261 
    262 /*
    263  * returns the number of values glGet returns for a given pname.
    264  *
    265  * The code below is written such that pnames requiring only one values
    266  * are the default (and are not explicitely tested for). This makes the
    267  * checking code much shorter/readable/efficient.
    268  *
    269  * This means that unknown pnames (e.g.: extensions) will default to 1. If
    270  * that unknown pname needs more than 1 value, then the validation check
    271  * is incomplete and the app may crash if it passed the wrong number params.
    272  */
    273 static int getNeededCount(GLint pname) {
    274     int needed = 1;
    275 #ifdef GL_ES_VERSION_2_0
    276     // GLES 2.x pnames
    277     switch (pname) {
    278         case GL_ALIASED_LINE_WIDTH_RANGE:
    279         case GL_ALIASED_POINT_SIZE_RANGE:
    280             needed = 2;
    281             break;
    282 
    283         case GL_BLEND_COLOR:
    284         case GL_COLOR_CLEAR_VALUE:
    285         case GL_COLOR_WRITEMASK:
    286         case GL_SCISSOR_BOX:
    287         case GL_VIEWPORT:
    288             needed = 4;
    289             break;
    290 
    291         case GL_COMPRESSED_TEXTURE_FORMATS:
    292             glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
    293             break;
    294 
    295         case GL_SHADER_BINARY_FORMATS:
    296             glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
    297             break;
    298     }
    299 #endif
    300 
    301 #ifdef GL_VERSION_ES_CM_1_1
    302     // GLES 1.x pnames
    303     switch (pname) {
    304         case GL_ALIASED_LINE_WIDTH_RANGE:
    305         case GL_ALIASED_POINT_SIZE_RANGE:
    306         case GL_DEPTH_RANGE:
    307         case GL_SMOOTH_LINE_WIDTH_RANGE:
    308         case GL_SMOOTH_POINT_SIZE_RANGE:
    309             needed = 2;
    310             break;
    311 
    312         case GL_CURRENT_NORMAL:
    313         case GL_POINT_DISTANCE_ATTENUATION:
    314             needed = 3;
    315             break;
    316 
    317         case GL_COLOR_CLEAR_VALUE:
    318         case GL_COLOR_WRITEMASK:
    319         case GL_CURRENT_COLOR:
    320         case GL_CURRENT_TEXTURE_COORDS:
    321         case GL_FOG_COLOR:
    322         case GL_LIGHT_MODEL_AMBIENT:
    323         case GL_SCISSOR_BOX:
    324         case GL_VIEWPORT:
    325             needed = 4;
    326             break;
    327 
    328         case GL_MODELVIEW_MATRIX:
    329         case GL_PROJECTION_MATRIX:
    330         case GL_TEXTURE_MATRIX:
    331             needed = 16;
    332             break;
    333 
    334         case GL_COMPRESSED_TEXTURE_FORMATS:
    335             glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
    336             break;
    337     }
    338 #endif
    339     return needed;
    340 }
    341 
    342 template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
    343           typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
    344 static void
    345 get
    346   (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
    347     jint _exception = 0;
    348     const char * _exceptionType;
    349     const char * _exceptionMessage;
    350     CTYPE *params_base = (CTYPE *) 0;
    351     jint _remaining;
    352     CTYPE *params = (CTYPE *) 0;
    353     int _needed = 0;
    354 
    355     if (!params_ref) {
    356         _exception = 1;
    357         _exceptionType = "java/lang/IllegalArgumentException";
    358         _exceptionMessage = "params == null";
    359         goto exit;
    360     }
    361     if (offset < 0) {
    362         _exception = 1;
    363         _exceptionType = "java/lang/IllegalArgumentException";
    364         _exceptionMessage = "offset < 0";
    365         goto exit;
    366     }
    367     _remaining = _env->GetArrayLength(params_ref) - offset;
    368     _needed = getNeededCount(pname);
    369     // if we didn't find this pname, we just assume the user passed
    370     // an array of the right size -- this might happen with extensions
    371     // or if we forget an enum here.
    372     if (_remaining < _needed) {
    373         _exception = 1;
    374         _exceptionType = "java/lang/IllegalArgumentException";
    375         _exceptionMessage = "length - offset < needed";
    376         goto exit;
    377     }
    378     params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
    379         _env, params_ref, (jboolean *)0);
    380     params = params_base + offset;
    381 
    382     GET(
    383         (GLenum)pname,
    384         (CTYPE *)params
    385     );
    386 
    387 exit:
    388     if (params_base) {
    389         releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
    390             _env, params_ref, params_base, !_exception);
    391     }
    392     if (_exception) {
    393         jniThrowException(_env, _exceptionType, _exceptionMessage);
    394     }
    395 }
    396 
    397 
    398 template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
    399           typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
    400 static void
    401 getarray
    402   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
    403     jint _exception = 0;
    404     const char * _exceptionType;
    405     const char * _exceptionMessage;
    406     JTYPEARRAY _array = (JTYPEARRAY) 0;
    407     jint _bufferOffset = (jint) 0;
    408     jint _remaining;
    409     CTYPE *params = (CTYPE *) 0;
    410     int _needed = 0;
    411 
    412     params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    413     _remaining /= sizeof(CTYPE);    // convert from bytes to item count
    414     _needed = getNeededCount(pname);
    415     // if we didn't find this pname, we just assume the user passed
    416     // an array of the right size -- this might happen with extensions
    417     // or if we forget an enum here.
    418     if (_needed>0 && _remaining < _needed) {
    419         _exception = 1;
    420         _exceptionType = "java/lang/IllegalArgumentException";
    421         _exceptionMessage = "remaining() < needed";
    422         goto exit;
    423     }
    424     if (params == NULL) {
    425         char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
    426             _env, _array, (jboolean *) 0);
    427         params = (CTYPE *) (_paramsBase + _bufferOffset);
    428     }
    429     GET(
    430         (GLenum)pname,
    431         (CTYPE *)params
    432     );
    433 
    434 exit:
    435     if (_array) {
    436         releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
    437             _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
    438     }
    439     if (_exception) {
    440         jniThrowException(_env, _exceptionType, _exceptionMessage);
    441     }
    442 }
    443 
    444 // --------------------------------------------------------------------------
    445 /* void glActiveTexture ( GLenum texture ) */
    446 static void
    447 android_glActiveTexture__I
    448   (JNIEnv *_env, jobject _this, jint texture) {
    449     glActiveTexture(
    450         (GLenum)texture
    451     );
    452 }
    453 
    454 /* void glAlphaFunc ( GLenum func, GLclampf ref ) */
    455 static void
    456 android_glAlphaFunc__IF
    457   (JNIEnv *_env, jobject _this, jint func, jfloat ref) {
    458     glAlphaFunc(
    459         (GLenum)func,
    460         (GLclampf)ref
    461     );
    462 }
    463 
    464 /* void glAlphaFuncx ( GLenum func, GLclampx ref ) */
    465 static void
    466 android_glAlphaFuncx__II
    467   (JNIEnv *_env, jobject _this, jint func, jint ref) {
    468     glAlphaFuncx(
    469         (GLenum)func,
    470         (GLclampx)ref
    471     );
    472 }
    473 
    474 /* void glBindTexture ( GLenum target, GLuint texture ) */
    475 static void
    476 android_glBindTexture__II
    477   (JNIEnv *_env, jobject _this, jint target, jint texture) {
    478     glBindTexture(
    479         (GLenum)target,
    480         (GLuint)texture
    481     );
    482 }
    483 
    484 /* void glBlendFunc ( GLenum sfactor, GLenum dfactor ) */
    485 static void
    486 android_glBlendFunc__II
    487   (JNIEnv *_env, jobject _this, jint sfactor, jint dfactor) {
    488     glBlendFunc(
    489         (GLenum)sfactor,
    490         (GLenum)dfactor
    491     );
    492 }
    493 
    494 /* void glClear ( GLbitfield mask ) */
    495 static void
    496 android_glClear__I
    497   (JNIEnv *_env, jobject _this, jint mask) {
    498     glClear(
    499         (GLbitfield)mask
    500     );
    501 }
    502 
    503 /* void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) */
    504 static void
    505 android_glClearColor__FFFF
    506   (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
    507     glClearColor(
    508         (GLclampf)red,
    509         (GLclampf)green,
    510         (GLclampf)blue,
    511         (GLclampf)alpha
    512     );
    513 }
    514 
    515 /* void glClearColorx ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha ) */
    516 static void
    517 android_glClearColorx__IIII
    518   (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
    519     glClearColorx(
    520         (GLclampx)red,
    521         (GLclampx)green,
    522         (GLclampx)blue,
    523         (GLclampx)alpha
    524     );
    525 }
    526 
    527 /* void glClearDepthf ( GLclampf depth ) */
    528 static void
    529 android_glClearDepthf__F
    530   (JNIEnv *_env, jobject _this, jfloat depth) {
    531     glClearDepthf(
    532         (GLclampf)depth
    533     );
    534 }
    535 
    536 /* void glClearDepthx ( GLclampx depth ) */
    537 static void
    538 android_glClearDepthx__I
    539   (JNIEnv *_env, jobject _this, jint depth) {
    540     glClearDepthx(
    541         (GLclampx)depth
    542     );
    543 }
    544 
    545 /* void glClearStencil ( GLint s ) */
    546 static void
    547 android_glClearStencil__I
    548   (JNIEnv *_env, jobject _this, jint s) {
    549     glClearStencil(
    550         (GLint)s
    551     );
    552 }
    553 
    554 /* void glClientActiveTexture ( GLenum texture ) */
    555 static void
    556 android_glClientActiveTexture__I
    557   (JNIEnv *_env, jobject _this, jint texture) {
    558     glClientActiveTexture(
    559         (GLenum)texture
    560     );
    561 }
    562 
    563 /* void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) */
    564 static void
    565 android_glColor4f__FFFF
    566   (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
    567     glColor4f(
    568         (GLfloat)red,
    569         (GLfloat)green,
    570         (GLfloat)blue,
    571         (GLfloat)alpha
    572     );
    573 }
    574 
    575 /* void glColor4x ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha ) */
    576 static void
    577 android_glColor4x__IIII
    578   (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
    579     glColor4x(
    580         (GLfixed)red,
    581         (GLfixed)green,
    582         (GLfixed)blue,
    583         (GLfixed)alpha
    584     );
    585 }
    586 
    587 /* void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ) */
    588 static void
    589 android_glColorMask__ZZZZ
    590   (JNIEnv *_env, jobject _this, jboolean red, jboolean green, jboolean blue, jboolean alpha) {
    591     glColorMask(
    592         (GLboolean)red,
    593         (GLboolean)green,
    594         (GLboolean)blue,
    595         (GLboolean)alpha
    596     );
    597 }
    598 
    599 /* void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
    600 static void
    601 android_glColorPointerBounds__IIILjava_nio_Buffer_2I
    602   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
    603     jarray _array = (jarray) 0;
    604     jint _bufferOffset = (jint) 0;
    605     jint _remaining;
    606     GLvoid *pointer = (GLvoid *) 0;
    607 
    608     if (pointer_buf) {
    609         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
    610         if ( ! pointer ) {
    611             return;
    612         }
    613     }
    614     glColorPointerBounds(
    615         (GLint)size,
    616         (GLenum)type,
    617         (GLsizei)stride,
    618         (GLvoid *)pointer,
    619         (GLsizei)remaining
    620     );
    621 }
    622 
    623 /* void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ) */
    624 static void
    625 android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
    626   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint imageSize, jobject data_buf) {
    627     jarray _array = (jarray) 0;
    628     jint _bufferOffset = (jint) 0;
    629     jint _remaining;
    630     GLvoid *data = (GLvoid *) 0;
    631 
    632     data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    633     if (data == NULL) {
    634         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    635         data = (GLvoid *) (_dataBase + _bufferOffset);
    636     }
    637     glCompressedTexImage2D(
    638         (GLenum)target,
    639         (GLint)level,
    640         (GLenum)internalformat,
    641         (GLsizei)width,
    642         (GLsizei)height,
    643         (GLint)border,
    644         (GLsizei)imageSize,
    645         (GLvoid *)data
    646     );
    647     if (_array) {
    648         releasePointer(_env, _array, data, JNI_FALSE);
    649     }
    650 }
    651 
    652 /* void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ) */
    653 static void
    654 android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
    655   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint imageSize, jobject data_buf) {
    656     jarray _array = (jarray) 0;
    657     jint _bufferOffset = (jint) 0;
    658     jint _remaining;
    659     GLvoid *data = (GLvoid *) 0;
    660 
    661     data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    662     if (data == NULL) {
    663         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    664         data = (GLvoid *) (_dataBase + _bufferOffset);
    665     }
    666     glCompressedTexSubImage2D(
    667         (GLenum)target,
    668         (GLint)level,
    669         (GLint)xoffset,
    670         (GLint)yoffset,
    671         (GLsizei)width,
    672         (GLsizei)height,
    673         (GLenum)format,
    674         (GLsizei)imageSize,
    675         (GLvoid *)data
    676     );
    677     if (_array) {
    678         releasePointer(_env, _array, data, JNI_FALSE);
    679     }
    680 }
    681 
    682 /* void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) */
    683 static void
    684 android_glCopyTexImage2D__IIIIIIII
    685   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint x, jint y, jint width, jint height, jint border) {
    686     glCopyTexImage2D(
    687         (GLenum)target,
    688         (GLint)level,
    689         (GLenum)internalformat,
    690         (GLint)x,
    691         (GLint)y,
    692         (GLsizei)width,
    693         (GLsizei)height,
    694         (GLint)border
    695     );
    696 }
    697 
    698 /* void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
    699 static void
    700 android_glCopyTexSubImage2D__IIIIIIII
    701   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint x, jint y, jint width, jint height) {
    702     glCopyTexSubImage2D(
    703         (GLenum)target,
    704         (GLint)level,
    705         (GLint)xoffset,
    706         (GLint)yoffset,
    707         (GLint)x,
    708         (GLint)y,
    709         (GLsizei)width,
    710         (GLsizei)height
    711     );
    712 }
    713 
    714 /* void glCullFace ( GLenum mode ) */
    715 static void
    716 android_glCullFace__I
    717   (JNIEnv *_env, jobject _this, jint mode) {
    718     glCullFace(
    719         (GLenum)mode
    720     );
    721 }
    722 
    723 /* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
    724 static void
    725 android_glDeleteTextures__I_3II
    726   (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
    727     jint _exception = 0;
    728     const char * _exceptionType = NULL;
    729     const char * _exceptionMessage = NULL;
    730     GLuint *textures_base = (GLuint *) 0;
    731     jint _remaining;
    732     GLuint *textures = (GLuint *) 0;
    733 
    734     if (!textures_ref) {
    735         _exception = 1;
    736         _exceptionType = "java/lang/IllegalArgumentException";
    737         _exceptionMessage = "textures == null";
    738         goto exit;
    739     }
    740     if (offset < 0) {
    741         _exception = 1;
    742         _exceptionType = "java/lang/IllegalArgumentException";
    743         _exceptionMessage = "offset < 0";
    744         goto exit;
    745     }
    746     _remaining = _env->GetArrayLength(textures_ref) - offset;
    747     if (_remaining < n) {
    748         _exception = 1;
    749         _exceptionType = "java/lang/IllegalArgumentException";
    750         _exceptionMessage = "length - offset < n < needed";
    751         goto exit;
    752     }
    753     textures_base = (GLuint *)
    754         _env->GetIntArrayElements(textures_ref, (jboolean *)0);
    755     textures = textures_base + offset;
    756 
    757     glDeleteTextures(
    758         (GLsizei)n,
    759         (GLuint *)textures
    760     );
    761 
    762 exit:
    763     if (textures_base) {
    764         _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
    765             JNI_ABORT);
    766     }
    767     if (_exception) {
    768         jniThrowException(_env, _exceptionType, _exceptionMessage);
    769     }
    770 }
    771 
    772 /* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
    773 static void
    774 android_glDeleteTextures__ILjava_nio_IntBuffer_2
    775   (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
    776     jint _exception = 0;
    777     const char * _exceptionType = NULL;
    778     const char * _exceptionMessage = NULL;
    779     jintArray _array = (jintArray) 0;
    780     jint _bufferOffset = (jint) 0;
    781     jint _remaining;
    782     GLuint *textures = (GLuint *) 0;
    783 
    784     textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    785     if (_remaining < n) {
    786         _exception = 1;
    787         _exceptionType = "java/lang/IllegalArgumentException";
    788         _exceptionMessage = "remaining() < n < needed";
    789         goto exit;
    790     }
    791     if (textures == NULL) {
    792         char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    793         textures = (GLuint *) (_texturesBase + _bufferOffset);
    794     }
    795     glDeleteTextures(
    796         (GLsizei)n,
    797         (GLuint *)textures
    798     );
    799 
    800 exit:
    801     if (_array) {
    802         _env->ReleaseIntArrayElements(_array, (jint*)textures, JNI_ABORT);
    803     }
    804     if (_exception) {
    805         jniThrowException(_env, _exceptionType, _exceptionMessage);
    806     }
    807 }
    808 
    809 /* void glDepthFunc ( GLenum func ) */
    810 static void
    811 android_glDepthFunc__I
    812   (JNIEnv *_env, jobject _this, jint func) {
    813     glDepthFunc(
    814         (GLenum)func
    815     );
    816 }
    817 
    818 /* void glDepthMask ( GLboolean flag ) */
    819 static void
    820 android_glDepthMask__Z
    821   (JNIEnv *_env, jobject _this, jboolean flag) {
    822     glDepthMask(
    823         (GLboolean)flag
    824     );
    825 }
    826 
    827 /* void glDepthRangef ( GLclampf zNear, GLclampf zFar ) */
    828 static void
    829 android_glDepthRangef__FF
    830   (JNIEnv *_env, jobject _this, jfloat zNear, jfloat zFar) {
    831     glDepthRangef(
    832         (GLclampf)zNear,
    833         (GLclampf)zFar
    834     );
    835 }
    836 
    837 /* void glDepthRangex ( GLclampx zNear, GLclampx zFar ) */
    838 static void
    839 android_glDepthRangex__II
    840   (JNIEnv *_env, jobject _this, jint zNear, jint zFar) {
    841     glDepthRangex(
    842         (GLclampx)zNear,
    843         (GLclampx)zFar
    844     );
    845 }
    846 
    847 /* void glDisable ( GLenum cap ) */
    848 static void
    849 android_glDisable__I
    850   (JNIEnv *_env, jobject _this, jint cap) {
    851     glDisable(
    852         (GLenum)cap
    853     );
    854 }
    855 
    856 /* void glDisableClientState ( GLenum array ) */
    857 static void
    858 android_glDisableClientState__I
    859   (JNIEnv *_env, jobject _this, jint array) {
    860     glDisableClientState(
    861         (GLenum)array
    862     );
    863 }
    864 
    865 /* void glDrawArrays ( GLenum mode, GLint first, GLsizei count ) */
    866 static void
    867 android_glDrawArrays__III
    868   (JNIEnv *_env, jobject _this, jint mode, jint first, jint count) {
    869     glDrawArrays(
    870         (GLenum)mode,
    871         (GLint)first,
    872         (GLsizei)count
    873     );
    874 }
    875 
    876 /* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) */
    877 static void
    878 android_glDrawElements__IIILjava_nio_Buffer_2
    879   (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf) {
    880     jint _exception = 0;
    881     const char * _exceptionType = NULL;
    882     const char * _exceptionMessage = NULL;
    883     jarray _array = (jarray) 0;
    884     jint _bufferOffset = (jint) 0;
    885     jint _remaining;
    886     GLvoid *indices = (GLvoid *) 0;
    887 
    888     indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    889     if (_remaining < count) {
    890         _exception = 1;
    891         _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
    892         _exceptionMessage = "remaining() < count < needed";
    893         goto exit;
    894     }
    895     if (indices == NULL) {
    896         char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    897         indices = (GLvoid *) (_indicesBase + _bufferOffset);
    898     }
    899     glDrawElements(
    900         (GLenum)mode,
    901         (GLsizei)count,
    902         (GLenum)type,
    903         (GLvoid *)indices
    904     );
    905 
    906 exit:
    907     if (_array) {
    908         releasePointer(_env, _array, indices, JNI_FALSE);
    909     }
    910     if (_exception) {
    911         jniThrowException(_env, _exceptionType, _exceptionMessage);
    912     }
    913 }
    914 
    915 /* void glEnable ( GLenum cap ) */
    916 static void
    917 android_glEnable__I
    918   (JNIEnv *_env, jobject _this, jint cap) {
    919     glEnable(
    920         (GLenum)cap
    921     );
    922 }
    923 
    924 /* void glEnableClientState ( GLenum array ) */
    925 static void
    926 android_glEnableClientState__I
    927   (JNIEnv *_env, jobject _this, jint array) {
    928     glEnableClientState(
    929         (GLenum)array
    930     );
    931 }
    932 
    933 /* void glFinish ( void ) */
    934 static void
    935 android_glFinish__
    936   (JNIEnv *_env, jobject _this) {
    937     glFinish();
    938 }
    939 
    940 /* void glFlush ( void ) */
    941 static void
    942 android_glFlush__
    943   (JNIEnv *_env, jobject _this) {
    944     glFlush();
    945 }
    946 
    947 /* void glFogf ( GLenum pname, GLfloat param ) */
    948 static void
    949 android_glFogf__IF
    950   (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
    951     glFogf(
    952         (GLenum)pname,
    953         (GLfloat)param
    954     );
    955 }
    956 
    957 /* void glFogfv ( GLenum pname, const GLfloat *params ) */
    958 static void
    959 android_glFogfv__I_3FI
    960   (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
    961     jint _exception = 0;
    962     const char * _exceptionType = NULL;
    963     const char * _exceptionMessage = NULL;
    964     GLfloat *params_base = (GLfloat *) 0;
    965     jint _remaining;
    966     GLfloat *params = (GLfloat *) 0;
    967 
    968     if (!params_ref) {
    969         _exception = 1;
    970         _exceptionType = "java/lang/IllegalArgumentException";
    971         _exceptionMessage = "params == null";
    972         goto exit;
    973     }
    974     if (offset < 0) {
    975         _exception = 1;
    976         _exceptionType = "java/lang/IllegalArgumentException";
    977         _exceptionMessage = "offset < 0";
    978         goto exit;
    979     }
    980     _remaining = _env->GetArrayLength(params_ref) - offset;
    981     int _needed;
    982     switch (pname) {
    983 #if defined(GL_FOG_COLOR)
    984         case GL_FOG_COLOR:
    985 #endif // defined(GL_FOG_COLOR)
    986             _needed = 4;
    987             break;
    988         default:
    989             _needed = 1;
    990             break;
    991     }
    992     if (_remaining < _needed) {
    993         _exception = 1;
    994         _exceptionType = "java/lang/IllegalArgumentException";
    995         _exceptionMessage = "length - offset < needed";
    996         goto exit;
    997     }
    998     params_base = (GLfloat *)
    999         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1000     params = params_base + offset;
   1001 
   1002     glFogfv(
   1003         (GLenum)pname,
   1004         (GLfloat *)params
   1005     );
   1006 
   1007 exit:
   1008     if (params_base) {
   1009         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1010             JNI_ABORT);
   1011     }
   1012     if (_exception) {
   1013         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1014     }
   1015 }
   1016 
   1017 /* void glFogfv ( GLenum pname, const GLfloat *params ) */
   1018 static void
   1019 android_glFogfv__ILjava_nio_FloatBuffer_2
   1020   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1021     jint _exception = 0;
   1022     const char * _exceptionType = NULL;
   1023     const char * _exceptionMessage = NULL;
   1024     jfloatArray _array = (jfloatArray) 0;
   1025     jint _bufferOffset = (jint) 0;
   1026     jint _remaining;
   1027     GLfloat *params = (GLfloat *) 0;
   1028 
   1029     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1030     int _needed;
   1031     switch (pname) {
   1032 #if defined(GL_FOG_COLOR)
   1033         case GL_FOG_COLOR:
   1034 #endif // defined(GL_FOG_COLOR)
   1035             _needed = 4;
   1036             break;
   1037         default:
   1038             _needed = 1;
   1039             break;
   1040     }
   1041     if (_remaining < _needed) {
   1042         _exception = 1;
   1043         _exceptionType = "java/lang/IllegalArgumentException";
   1044         _exceptionMessage = "remaining() < needed";
   1045         goto exit;
   1046     }
   1047     if (params == NULL) {
   1048         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1049         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1050     }
   1051     glFogfv(
   1052         (GLenum)pname,
   1053         (GLfloat *)params
   1054     );
   1055 
   1056 exit:
   1057     if (_array) {
   1058         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   1059     }
   1060     if (_exception) {
   1061         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1062     }
   1063 }
   1064 
   1065 /* void glFogx ( GLenum pname, GLfixed param ) */
   1066 static void
   1067 android_glFogx__II
   1068   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   1069     glFogx(
   1070         (GLenum)pname,
   1071         (GLfixed)param
   1072     );
   1073 }
   1074 
   1075 /* void glFogxv ( GLenum pname, const GLfixed *params ) */
   1076 static void
   1077 android_glFogxv__I_3II
   1078   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1079     jint _exception = 0;
   1080     const char * _exceptionType = NULL;
   1081     const char * _exceptionMessage = NULL;
   1082     GLfixed *params_base = (GLfixed *) 0;
   1083     jint _remaining;
   1084     GLfixed *params = (GLfixed *) 0;
   1085 
   1086     if (!params_ref) {
   1087         _exception = 1;
   1088         _exceptionType = "java/lang/IllegalArgumentException";
   1089         _exceptionMessage = "params == null";
   1090         goto exit;
   1091     }
   1092     if (offset < 0) {
   1093         _exception = 1;
   1094         _exceptionType = "java/lang/IllegalArgumentException";
   1095         _exceptionMessage = "offset < 0";
   1096         goto exit;
   1097     }
   1098     _remaining = _env->GetArrayLength(params_ref) - offset;
   1099     int _needed;
   1100     switch (pname) {
   1101 #if defined(GL_FOG_COLOR)
   1102         case GL_FOG_COLOR:
   1103 #endif // defined(GL_FOG_COLOR)
   1104             _needed = 4;
   1105             break;
   1106         default:
   1107             _needed = 1;
   1108             break;
   1109     }
   1110     if (_remaining < _needed) {
   1111         _exception = 1;
   1112         _exceptionType = "java/lang/IllegalArgumentException";
   1113         _exceptionMessage = "length - offset < needed";
   1114         goto exit;
   1115     }
   1116     params_base = (GLfixed *)
   1117         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1118     params = params_base + offset;
   1119 
   1120     glFogxv(
   1121         (GLenum)pname,
   1122         (GLfixed *)params
   1123     );
   1124 
   1125 exit:
   1126     if (params_base) {
   1127         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1128             JNI_ABORT);
   1129     }
   1130     if (_exception) {
   1131         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1132     }
   1133 }
   1134 
   1135 /* void glFogxv ( GLenum pname, const GLfixed *params ) */
   1136 static void
   1137 android_glFogxv__ILjava_nio_IntBuffer_2
   1138   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1139     jint _exception = 0;
   1140     const char * _exceptionType = NULL;
   1141     const char * _exceptionMessage = NULL;
   1142     jintArray _array = (jintArray) 0;
   1143     jint _bufferOffset = (jint) 0;
   1144     jint _remaining;
   1145     GLfixed *params = (GLfixed *) 0;
   1146 
   1147     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1148     int _needed;
   1149     switch (pname) {
   1150 #if defined(GL_FOG_COLOR)
   1151         case GL_FOG_COLOR:
   1152 #endif // defined(GL_FOG_COLOR)
   1153             _needed = 4;
   1154             break;
   1155         default:
   1156             _needed = 1;
   1157             break;
   1158     }
   1159     if (_remaining < _needed) {
   1160         _exception = 1;
   1161         _exceptionType = "java/lang/IllegalArgumentException";
   1162         _exceptionMessage = "remaining() < needed";
   1163         goto exit;
   1164     }
   1165     if (params == NULL) {
   1166         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1167         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1168     }
   1169     glFogxv(
   1170         (GLenum)pname,
   1171         (GLfixed *)params
   1172     );
   1173 
   1174 exit:
   1175     if (_array) {
   1176         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1177     }
   1178     if (_exception) {
   1179         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1180     }
   1181 }
   1182 
   1183 /* void glFrontFace ( GLenum mode ) */
   1184 static void
   1185 android_glFrontFace__I
   1186   (JNIEnv *_env, jobject _this, jint mode) {
   1187     glFrontFace(
   1188         (GLenum)mode
   1189     );
   1190 }
   1191 
   1192 /* void glFrustumf ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
   1193 static void
   1194 android_glFrustumf__FFFFFF
   1195   (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
   1196     glFrustumf(
   1197         (GLfloat)left,
   1198         (GLfloat)right,
   1199         (GLfloat)bottom,
   1200         (GLfloat)top,
   1201         (GLfloat)zNear,
   1202         (GLfloat)zFar
   1203     );
   1204 }
   1205 
   1206 /* void glFrustumx ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
   1207 static void
   1208 android_glFrustumx__IIIIII
   1209   (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
   1210     glFrustumx(
   1211         (GLfixed)left,
   1212         (GLfixed)right,
   1213         (GLfixed)bottom,
   1214         (GLfixed)top,
   1215         (GLfixed)zNear,
   1216         (GLfixed)zFar
   1217     );
   1218 }
   1219 
   1220 /* void glGenTextures ( GLsizei n, GLuint *textures ) */
   1221 static void
   1222 android_glGenTextures__I_3II
   1223   (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
   1224     jint _exception = 0;
   1225     const char * _exceptionType = NULL;
   1226     const char * _exceptionMessage = NULL;
   1227     GLuint *textures_base = (GLuint *) 0;
   1228     jint _remaining;
   1229     GLuint *textures = (GLuint *) 0;
   1230 
   1231     if (!textures_ref) {
   1232         _exception = 1;
   1233         _exceptionType = "java/lang/IllegalArgumentException";
   1234         _exceptionMessage = "textures == null";
   1235         goto exit;
   1236     }
   1237     if (offset < 0) {
   1238         _exception = 1;
   1239         _exceptionType = "java/lang/IllegalArgumentException";
   1240         _exceptionMessage = "offset < 0";
   1241         goto exit;
   1242     }
   1243     _remaining = _env->GetArrayLength(textures_ref) - offset;
   1244     if (_remaining < n) {
   1245         _exception = 1;
   1246         _exceptionType = "java/lang/IllegalArgumentException";
   1247         _exceptionMessage = "length - offset < n < needed";
   1248         goto exit;
   1249     }
   1250     textures_base = (GLuint *)
   1251         _env->GetIntArrayElements(textures_ref, (jboolean *)0);
   1252     textures = textures_base + offset;
   1253 
   1254     glGenTextures(
   1255         (GLsizei)n,
   1256         (GLuint *)textures
   1257     );
   1258 
   1259 exit:
   1260     if (textures_base) {
   1261         _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
   1262             _exception ? JNI_ABORT: 0);
   1263     }
   1264     if (_exception) {
   1265         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1266     }
   1267 }
   1268 
   1269 /* void glGenTextures ( GLsizei n, GLuint *textures ) */
   1270 static void
   1271 android_glGenTextures__ILjava_nio_IntBuffer_2
   1272   (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
   1273     jint _exception = 0;
   1274     const char * _exceptionType = NULL;
   1275     const char * _exceptionMessage = NULL;
   1276     jintArray _array = (jintArray) 0;
   1277     jint _bufferOffset = (jint) 0;
   1278     jint _remaining;
   1279     GLuint *textures = (GLuint *) 0;
   1280 
   1281     textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1282     if (_remaining < n) {
   1283         _exception = 1;
   1284         _exceptionType = "java/lang/IllegalArgumentException";
   1285         _exceptionMessage = "remaining() < n < needed";
   1286         goto exit;
   1287     }
   1288     if (textures == NULL) {
   1289         char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1290         textures = (GLuint *) (_texturesBase + _bufferOffset);
   1291     }
   1292     glGenTextures(
   1293         (GLsizei)n,
   1294         (GLuint *)textures
   1295     );
   1296 
   1297 exit:
   1298     if (_array) {
   1299         _env->ReleaseIntArrayElements(_array, (jint*)textures, _exception ? JNI_ABORT : 0);
   1300     }
   1301     if (_exception) {
   1302         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1303     }
   1304 }
   1305 
   1306 /* GLenum glGetError ( void ) */
   1307 static jint
   1308 android_glGetError__
   1309   (JNIEnv *_env, jobject _this) {
   1310     GLenum _returnValue;
   1311     _returnValue = glGetError();
   1312     return (jint)_returnValue;
   1313 }
   1314 
   1315 /* void glGetIntegerv ( GLenum pname, GLint *params ) */
   1316 static void
   1317 android_glGetIntegerv__I_3II
   1318   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1319     get<jintArray, IntArrayGetter, jint*, IntArrayReleaser, GLint, glGetIntegerv>(
   1320         _env, _this, pname, params_ref, offset);
   1321 }
   1322 
   1323 /* void glGetIntegerv ( GLenum pname, GLint *params ) */
   1324 static void
   1325 android_glGetIntegerv__ILjava_nio_IntBuffer_2
   1326   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1327     getarray<GLint, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetIntegerv>(
   1328         _env, _this, pname, params_buf);
   1329 }
   1330 /* const GLubyte * glGetString ( GLenum name ) */
   1331 static jstring android_glGetString(JNIEnv* _env, jobject, jint name) {
   1332     const char* chars = (const char*) glGetString((GLenum) name);
   1333     return _env->NewStringUTF(chars);
   1334 }
   1335 /* void glHint ( GLenum target, GLenum mode ) */
   1336 static void
   1337 android_glHint__II
   1338   (JNIEnv *_env, jobject _this, jint target, jint mode) {
   1339     glHint(
   1340         (GLenum)target,
   1341         (GLenum)mode
   1342     );
   1343 }
   1344 
   1345 /* void glLightModelf ( GLenum pname, GLfloat param ) */
   1346 static void
   1347 android_glLightModelf__IF
   1348   (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
   1349     glLightModelf(
   1350         (GLenum)pname,
   1351         (GLfloat)param
   1352     );
   1353 }
   1354 
   1355 /* void glLightModelfv ( GLenum pname, const GLfloat *params ) */
   1356 static void
   1357 android_glLightModelfv__I_3FI
   1358   (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
   1359     jint _exception = 0;
   1360     const char * _exceptionType = NULL;
   1361     const char * _exceptionMessage = NULL;
   1362     GLfloat *params_base = (GLfloat *) 0;
   1363     jint _remaining;
   1364     GLfloat *params = (GLfloat *) 0;
   1365 
   1366     if (!params_ref) {
   1367         _exception = 1;
   1368         _exceptionType = "java/lang/IllegalArgumentException";
   1369         _exceptionMessage = "params == null";
   1370         goto exit;
   1371     }
   1372     if (offset < 0) {
   1373         _exception = 1;
   1374         _exceptionType = "java/lang/IllegalArgumentException";
   1375         _exceptionMessage = "offset < 0";
   1376         goto exit;
   1377     }
   1378     _remaining = _env->GetArrayLength(params_ref) - offset;
   1379     int _needed;
   1380     switch (pname) {
   1381 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1382         case GL_LIGHT_MODEL_AMBIENT:
   1383 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1384             _needed = 4;
   1385             break;
   1386         default:
   1387             _needed = 1;
   1388             break;
   1389     }
   1390     if (_remaining < _needed) {
   1391         _exception = 1;
   1392         _exceptionType = "java/lang/IllegalArgumentException";
   1393         _exceptionMessage = "length - offset < needed";
   1394         goto exit;
   1395     }
   1396     params_base = (GLfloat *)
   1397         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1398     params = params_base + offset;
   1399 
   1400     glLightModelfv(
   1401         (GLenum)pname,
   1402         (GLfloat *)params
   1403     );
   1404 
   1405 exit:
   1406     if (params_base) {
   1407         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1408             JNI_ABORT);
   1409     }
   1410     if (_exception) {
   1411         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1412     }
   1413 }
   1414 
   1415 /* void glLightModelfv ( GLenum pname, const GLfloat *params ) */
   1416 static void
   1417 android_glLightModelfv__ILjava_nio_FloatBuffer_2
   1418   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1419     jint _exception = 0;
   1420     const char * _exceptionType = NULL;
   1421     const char * _exceptionMessage = NULL;
   1422     jfloatArray _array = (jfloatArray) 0;
   1423     jint _bufferOffset = (jint) 0;
   1424     jint _remaining;
   1425     GLfloat *params = (GLfloat *) 0;
   1426 
   1427     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1428     int _needed;
   1429     switch (pname) {
   1430 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1431         case GL_LIGHT_MODEL_AMBIENT:
   1432 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1433             _needed = 4;
   1434             break;
   1435         default:
   1436             _needed = 1;
   1437             break;
   1438     }
   1439     if (_remaining < _needed) {
   1440         _exception = 1;
   1441         _exceptionType = "java/lang/IllegalArgumentException";
   1442         _exceptionMessage = "remaining() < needed";
   1443         goto exit;
   1444     }
   1445     if (params == NULL) {
   1446         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1447         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1448     }
   1449     glLightModelfv(
   1450         (GLenum)pname,
   1451         (GLfloat *)params
   1452     );
   1453 
   1454 exit:
   1455     if (_array) {
   1456         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   1457     }
   1458     if (_exception) {
   1459         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1460     }
   1461 }
   1462 
   1463 /* void glLightModelx ( GLenum pname, GLfixed param ) */
   1464 static void
   1465 android_glLightModelx__II
   1466   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   1467     glLightModelx(
   1468         (GLenum)pname,
   1469         (GLfixed)param
   1470     );
   1471 }
   1472 
   1473 /* void glLightModelxv ( GLenum pname, const GLfixed *params ) */
   1474 static void
   1475 android_glLightModelxv__I_3II
   1476   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1477     jint _exception = 0;
   1478     const char * _exceptionType = NULL;
   1479     const char * _exceptionMessage = NULL;
   1480     GLfixed *params_base = (GLfixed *) 0;
   1481     jint _remaining;
   1482     GLfixed *params = (GLfixed *) 0;
   1483 
   1484     if (!params_ref) {
   1485         _exception = 1;
   1486         _exceptionType = "java/lang/IllegalArgumentException";
   1487         _exceptionMessage = "params == null";
   1488         goto exit;
   1489     }
   1490     if (offset < 0) {
   1491         _exception = 1;
   1492         _exceptionType = "java/lang/IllegalArgumentException";
   1493         _exceptionMessage = "offset < 0";
   1494         goto exit;
   1495     }
   1496     _remaining = _env->GetArrayLength(params_ref) - offset;
   1497     int _needed;
   1498     switch (pname) {
   1499 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1500         case GL_LIGHT_MODEL_AMBIENT:
   1501 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1502             _needed = 4;
   1503             break;
   1504         default:
   1505             _needed = 1;
   1506             break;
   1507     }
   1508     if (_remaining < _needed) {
   1509         _exception = 1;
   1510         _exceptionType = "java/lang/IllegalArgumentException";
   1511         _exceptionMessage = "length - offset < needed";
   1512         goto exit;
   1513     }
   1514     params_base = (GLfixed *)
   1515         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1516     params = params_base + offset;
   1517 
   1518     glLightModelxv(
   1519         (GLenum)pname,
   1520         (GLfixed *)params
   1521     );
   1522 
   1523 exit:
   1524     if (params_base) {
   1525         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1526             JNI_ABORT);
   1527     }
   1528     if (_exception) {
   1529         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1530     }
   1531 }
   1532 
   1533 /* void glLightModelxv ( GLenum pname, const GLfixed *params ) */
   1534 static void
   1535 android_glLightModelxv__ILjava_nio_IntBuffer_2
   1536   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1537     jint _exception = 0;
   1538     const char * _exceptionType = NULL;
   1539     const char * _exceptionMessage = NULL;
   1540     jintArray _array = (jintArray) 0;
   1541     jint _bufferOffset = (jint) 0;
   1542     jint _remaining;
   1543     GLfixed *params = (GLfixed *) 0;
   1544 
   1545     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1546     int _needed;
   1547     switch (pname) {
   1548 #if defined(GL_LIGHT_MODEL_AMBIENT)
   1549         case GL_LIGHT_MODEL_AMBIENT:
   1550 #endif // defined(GL_LIGHT_MODEL_AMBIENT)
   1551             _needed = 4;
   1552             break;
   1553         default:
   1554             _needed = 1;
   1555             break;
   1556     }
   1557     if (_remaining < _needed) {
   1558         _exception = 1;
   1559         _exceptionType = "java/lang/IllegalArgumentException";
   1560         _exceptionMessage = "remaining() < needed";
   1561         goto exit;
   1562     }
   1563     if (params == NULL) {
   1564         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1565         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1566     }
   1567     glLightModelxv(
   1568         (GLenum)pname,
   1569         (GLfixed *)params
   1570     );
   1571 
   1572 exit:
   1573     if (_array) {
   1574         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1575     }
   1576     if (_exception) {
   1577         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1578     }
   1579 }
   1580 
   1581 /* void glLightf ( GLenum light, GLenum pname, GLfloat param ) */
   1582 static void
   1583 android_glLightf__IIF
   1584   (JNIEnv *_env, jobject _this, jint light, jint pname, jfloat param) {
   1585     glLightf(
   1586         (GLenum)light,
   1587         (GLenum)pname,
   1588         (GLfloat)param
   1589     );
   1590 }
   1591 
   1592 /* void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) */
   1593 static void
   1594 android_glLightfv__II_3FI
   1595   (JNIEnv *_env, jobject _this, jint light, jint pname, jfloatArray params_ref, jint offset) {
   1596     jint _exception = 0;
   1597     const char * _exceptionType = NULL;
   1598     const char * _exceptionMessage = NULL;
   1599     GLfloat *params_base = (GLfloat *) 0;
   1600     jint _remaining;
   1601     GLfloat *params = (GLfloat *) 0;
   1602 
   1603     if (!params_ref) {
   1604         _exception = 1;
   1605         _exceptionType = "java/lang/IllegalArgumentException";
   1606         _exceptionMessage = "params == null";
   1607         goto exit;
   1608     }
   1609     if (offset < 0) {
   1610         _exception = 1;
   1611         _exceptionType = "java/lang/IllegalArgumentException";
   1612         _exceptionMessage = "offset < 0";
   1613         goto exit;
   1614     }
   1615     _remaining = _env->GetArrayLength(params_ref) - offset;
   1616     int _needed;
   1617     switch (pname) {
   1618 #if defined(GL_SPOT_DIRECTION)
   1619         case GL_SPOT_DIRECTION:
   1620 #endif // defined(GL_SPOT_DIRECTION)
   1621             _needed = 3;
   1622             break;
   1623 #if defined(GL_AMBIENT)
   1624         case GL_AMBIENT:
   1625 #endif // defined(GL_AMBIENT)
   1626 #if defined(GL_DIFFUSE)
   1627         case GL_DIFFUSE:
   1628 #endif // defined(GL_DIFFUSE)
   1629 #if defined(GL_SPECULAR)
   1630         case GL_SPECULAR:
   1631 #endif // defined(GL_SPECULAR)
   1632 #if defined(GL_EMISSION)
   1633         case GL_EMISSION:
   1634 #endif // defined(GL_EMISSION)
   1635             _needed = 4;
   1636             break;
   1637         default:
   1638             _needed = 1;
   1639             break;
   1640     }
   1641     if (_remaining < _needed) {
   1642         _exception = 1;
   1643         _exceptionType = "java/lang/IllegalArgumentException";
   1644         _exceptionMessage = "length - offset < needed";
   1645         goto exit;
   1646     }
   1647     params_base = (GLfloat *)
   1648         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1649     params = params_base + offset;
   1650 
   1651     glLightfv(
   1652         (GLenum)light,
   1653         (GLenum)pname,
   1654         (GLfloat *)params
   1655     );
   1656 
   1657 exit:
   1658     if (params_base) {
   1659         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1660             JNI_ABORT);
   1661     }
   1662     if (_exception) {
   1663         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1664     }
   1665 }
   1666 
   1667 /* void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) */
   1668 static void
   1669 android_glLightfv__IILjava_nio_FloatBuffer_2
   1670   (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
   1671     jint _exception = 0;
   1672     const char * _exceptionType = NULL;
   1673     const char * _exceptionMessage = NULL;
   1674     jfloatArray _array = (jfloatArray) 0;
   1675     jint _bufferOffset = (jint) 0;
   1676     jint _remaining;
   1677     GLfloat *params = (GLfloat *) 0;
   1678 
   1679     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1680     int _needed;
   1681     switch (pname) {
   1682 #if defined(GL_SPOT_DIRECTION)
   1683         case GL_SPOT_DIRECTION:
   1684 #endif // defined(GL_SPOT_DIRECTION)
   1685             _needed = 3;
   1686             break;
   1687 #if defined(GL_AMBIENT)
   1688         case GL_AMBIENT:
   1689 #endif // defined(GL_AMBIENT)
   1690 #if defined(GL_DIFFUSE)
   1691         case GL_DIFFUSE:
   1692 #endif // defined(GL_DIFFUSE)
   1693 #if defined(GL_SPECULAR)
   1694         case GL_SPECULAR:
   1695 #endif // defined(GL_SPECULAR)
   1696 #if defined(GL_EMISSION)
   1697         case GL_EMISSION:
   1698 #endif // defined(GL_EMISSION)
   1699             _needed = 4;
   1700             break;
   1701         default:
   1702             _needed = 1;
   1703             break;
   1704     }
   1705     if (_remaining < _needed) {
   1706         _exception = 1;
   1707         _exceptionType = "java/lang/IllegalArgumentException";
   1708         _exceptionMessage = "remaining() < needed";
   1709         goto exit;
   1710     }
   1711     if (params == NULL) {
   1712         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1713         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1714     }
   1715     glLightfv(
   1716         (GLenum)light,
   1717         (GLenum)pname,
   1718         (GLfloat *)params
   1719     );
   1720 
   1721 exit:
   1722     if (_array) {
   1723         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   1724     }
   1725     if (_exception) {
   1726         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1727     }
   1728 }
   1729 
   1730 /* void glLightx ( GLenum light, GLenum pname, GLfixed param ) */
   1731 static void
   1732 android_glLightx__III
   1733   (JNIEnv *_env, jobject _this, jint light, jint pname, jint param) {
   1734     glLightx(
   1735         (GLenum)light,
   1736         (GLenum)pname,
   1737         (GLfixed)param
   1738     );
   1739 }
   1740 
   1741 /* void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) */
   1742 static void
   1743 android_glLightxv__II_3II
   1744   (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
   1745     jint _exception = 0;
   1746     const char * _exceptionType = NULL;
   1747     const char * _exceptionMessage = NULL;
   1748     GLfixed *params_base = (GLfixed *) 0;
   1749     jint _remaining;
   1750     GLfixed *params = (GLfixed *) 0;
   1751 
   1752     if (!params_ref) {
   1753         _exception = 1;
   1754         _exceptionType = "java/lang/IllegalArgumentException";
   1755         _exceptionMessage = "params == null";
   1756         goto exit;
   1757     }
   1758     if (offset < 0) {
   1759         _exception = 1;
   1760         _exceptionType = "java/lang/IllegalArgumentException";
   1761         _exceptionMessage = "offset < 0";
   1762         goto exit;
   1763     }
   1764     _remaining = _env->GetArrayLength(params_ref) - offset;
   1765     int _needed;
   1766     switch (pname) {
   1767 #if defined(GL_SPOT_DIRECTION)
   1768         case GL_SPOT_DIRECTION:
   1769 #endif // defined(GL_SPOT_DIRECTION)
   1770             _needed = 3;
   1771             break;
   1772 #if defined(GL_AMBIENT)
   1773         case GL_AMBIENT:
   1774 #endif // defined(GL_AMBIENT)
   1775 #if defined(GL_DIFFUSE)
   1776         case GL_DIFFUSE:
   1777 #endif // defined(GL_DIFFUSE)
   1778 #if defined(GL_SPECULAR)
   1779         case GL_SPECULAR:
   1780 #endif // defined(GL_SPECULAR)
   1781 #if defined(GL_EMISSION)
   1782         case GL_EMISSION:
   1783 #endif // defined(GL_EMISSION)
   1784             _needed = 4;
   1785             break;
   1786         default:
   1787             _needed = 1;
   1788             break;
   1789     }
   1790     if (_remaining < _needed) {
   1791         _exception = 1;
   1792         _exceptionType = "java/lang/IllegalArgumentException";
   1793         _exceptionMessage = "length - offset < needed";
   1794         goto exit;
   1795     }
   1796     params_base = (GLfixed *)
   1797         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1798     params = params_base + offset;
   1799 
   1800     glLightxv(
   1801         (GLenum)light,
   1802         (GLenum)pname,
   1803         (GLfixed *)params
   1804     );
   1805 
   1806 exit:
   1807     if (params_base) {
   1808         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1809             JNI_ABORT);
   1810     }
   1811     if (_exception) {
   1812         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1813     }
   1814 }
   1815 
   1816 /* void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) */
   1817 static void
   1818 android_glLightxv__IILjava_nio_IntBuffer_2
   1819   (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
   1820     jint _exception = 0;
   1821     const char * _exceptionType = NULL;
   1822     const char * _exceptionMessage = NULL;
   1823     jintArray _array = (jintArray) 0;
   1824     jint _bufferOffset = (jint) 0;
   1825     jint _remaining;
   1826     GLfixed *params = (GLfixed *) 0;
   1827 
   1828     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1829     int _needed;
   1830     switch (pname) {
   1831 #if defined(GL_SPOT_DIRECTION)
   1832         case GL_SPOT_DIRECTION:
   1833 #endif // defined(GL_SPOT_DIRECTION)
   1834             _needed = 3;
   1835             break;
   1836 #if defined(GL_AMBIENT)
   1837         case GL_AMBIENT:
   1838 #endif // defined(GL_AMBIENT)
   1839 #if defined(GL_DIFFUSE)
   1840         case GL_DIFFUSE:
   1841 #endif // defined(GL_DIFFUSE)
   1842 #if defined(GL_SPECULAR)
   1843         case GL_SPECULAR:
   1844 #endif // defined(GL_SPECULAR)
   1845 #if defined(GL_EMISSION)
   1846         case GL_EMISSION:
   1847 #endif // defined(GL_EMISSION)
   1848             _needed = 4;
   1849             break;
   1850         default:
   1851             _needed = 1;
   1852             break;
   1853     }
   1854     if (_remaining < _needed) {
   1855         _exception = 1;
   1856         _exceptionType = "java/lang/IllegalArgumentException";
   1857         _exceptionMessage = "remaining() < needed";
   1858         goto exit;
   1859     }
   1860     if (params == NULL) {
   1861         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1862         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1863     }
   1864     glLightxv(
   1865         (GLenum)light,
   1866         (GLenum)pname,
   1867         (GLfixed *)params
   1868     );
   1869 
   1870 exit:
   1871     if (_array) {
   1872         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1873     }
   1874     if (_exception) {
   1875         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1876     }
   1877 }
   1878 
   1879 /* void glLineWidth ( GLfloat width ) */
   1880 static void
   1881 android_glLineWidth__F
   1882   (JNIEnv *_env, jobject _this, jfloat width) {
   1883     glLineWidth(
   1884         (GLfloat)width
   1885     );
   1886 }
   1887 
   1888 /* void glLineWidthx ( GLfixed width ) */
   1889 static void
   1890 android_glLineWidthx__I
   1891   (JNIEnv *_env, jobject _this, jint width) {
   1892     glLineWidthx(
   1893         (GLfixed)width
   1894     );
   1895 }
   1896 
   1897 /* void glLoadIdentity ( void ) */
   1898 static void
   1899 android_glLoadIdentity__
   1900   (JNIEnv *_env, jobject _this) {
   1901     glLoadIdentity();
   1902 }
   1903 
   1904 /* void glLoadMatrixf ( const GLfloat *m ) */
   1905 static void
   1906 android_glLoadMatrixf___3FI
   1907   (JNIEnv *_env, jobject _this, jfloatArray m_ref, jint offset) {
   1908     jint _exception = 0;
   1909     const char * _exceptionType = NULL;
   1910     const char * _exceptionMessage = NULL;
   1911     GLfloat *m_base = (GLfloat *) 0;
   1912     jint _remaining;
   1913     GLfloat *m = (GLfloat *) 0;
   1914 
   1915     if (!m_ref) {
   1916         _exception = 1;
   1917         _exceptionType = "java/lang/IllegalArgumentException";
   1918         _exceptionMessage = "m == null";
   1919         goto exit;
   1920     }
   1921     if (offset < 0) {
   1922         _exception = 1;
   1923         _exceptionType = "java/lang/IllegalArgumentException";
   1924         _exceptionMessage = "offset < 0";
   1925         goto exit;
   1926     }
   1927     _remaining = _env->GetArrayLength(m_ref) - offset;
   1928     m_base = (GLfloat *)
   1929         _env->GetFloatArrayElements(m_ref, (jboolean *)0);
   1930     m = m_base + offset;
   1931 
   1932     glLoadMatrixf(
   1933         (GLfloat *)m
   1934     );
   1935 
   1936 exit:
   1937     if (m_base) {
   1938         _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
   1939             JNI_ABORT);
   1940     }
   1941     if (_exception) {
   1942         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1943     }
   1944 }
   1945 
   1946 /* void glLoadMatrixf ( const GLfloat *m ) */
   1947 static void
   1948 android_glLoadMatrixf__Ljava_nio_FloatBuffer_2
   1949   (JNIEnv *_env, jobject _this, jobject m_buf) {
   1950     jfloatArray _array = (jfloatArray) 0;
   1951     jint _bufferOffset = (jint) 0;
   1952     jint _remaining;
   1953     GLfloat *m = (GLfloat *) 0;
   1954 
   1955     m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1956     if (m == NULL) {
   1957         char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1958         m = (GLfloat *) (_mBase + _bufferOffset);
   1959     }
   1960     glLoadMatrixf(
   1961         (GLfloat *)m
   1962     );
   1963     if (_array) {
   1964         _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
   1965     }
   1966 }
   1967 
   1968 /* void glLoadMatrixx ( const GLfixed *m ) */
   1969 static void
   1970 android_glLoadMatrixx___3II
   1971   (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
   1972     jint _exception = 0;
   1973     const char * _exceptionType = NULL;
   1974     const char * _exceptionMessage = NULL;
   1975     GLfixed *m_base = (GLfixed *) 0;
   1976     jint _remaining;
   1977     GLfixed *m = (GLfixed *) 0;
   1978 
   1979     if (!m_ref) {
   1980         _exception = 1;
   1981         _exceptionType = "java/lang/IllegalArgumentException";
   1982         _exceptionMessage = "m == null";
   1983         goto exit;
   1984     }
   1985     if (offset < 0) {
   1986         _exception = 1;
   1987         _exceptionType = "java/lang/IllegalArgumentException";
   1988         _exceptionMessage = "offset < 0";
   1989         goto exit;
   1990     }
   1991     _remaining = _env->GetArrayLength(m_ref) - offset;
   1992     m_base = (GLfixed *)
   1993         _env->GetIntArrayElements(m_ref, (jboolean *)0);
   1994     m = m_base + offset;
   1995 
   1996     glLoadMatrixx(
   1997         (GLfixed *)m
   1998     );
   1999 
   2000 exit:
   2001     if (m_base) {
   2002         _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
   2003             JNI_ABORT);
   2004     }
   2005     if (_exception) {
   2006         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2007     }
   2008 }
   2009 
   2010 /* void glLoadMatrixx ( const GLfixed *m ) */
   2011 static void
   2012 android_glLoadMatrixx__Ljava_nio_IntBuffer_2
   2013   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2014     jintArray _array = (jintArray) 0;
   2015     jint _bufferOffset = (jint) 0;
   2016     jint _remaining;
   2017     GLfixed *m = (GLfixed *) 0;
   2018 
   2019     m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2020     if (m == NULL) {
   2021         char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2022         m = (GLfixed *) (_mBase + _bufferOffset);
   2023     }
   2024     glLoadMatrixx(
   2025         (GLfixed *)m
   2026     );
   2027     if (_array) {
   2028         _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
   2029     }
   2030 }
   2031 
   2032 /* void glLogicOp ( GLenum opcode ) */
   2033 static void
   2034 android_glLogicOp__I
   2035   (JNIEnv *_env, jobject _this, jint opcode) {
   2036     glLogicOp(
   2037         (GLenum)opcode
   2038     );
   2039 }
   2040 
   2041 /* void glMaterialf ( GLenum face, GLenum pname, GLfloat param ) */
   2042 static void
   2043 android_glMaterialf__IIF
   2044   (JNIEnv *_env, jobject _this, jint face, jint pname, jfloat param) {
   2045     glMaterialf(
   2046         (GLenum)face,
   2047         (GLenum)pname,
   2048         (GLfloat)param
   2049     );
   2050 }
   2051 
   2052 /* void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) */
   2053 static void
   2054 android_glMaterialfv__II_3FI
   2055   (JNIEnv *_env, jobject _this, jint face, jint pname, jfloatArray params_ref, jint offset) {
   2056     jint _exception = 0;
   2057     const char * _exceptionType = NULL;
   2058     const char * _exceptionMessage = NULL;
   2059     GLfloat *params_base = (GLfloat *) 0;
   2060     jint _remaining;
   2061     GLfloat *params = (GLfloat *) 0;
   2062 
   2063     if (!params_ref) {
   2064         _exception = 1;
   2065         _exceptionType = "java/lang/IllegalArgumentException";
   2066         _exceptionMessage = "params == null";
   2067         goto exit;
   2068     }
   2069     if (offset < 0) {
   2070         _exception = 1;
   2071         _exceptionType = "java/lang/IllegalArgumentException";
   2072         _exceptionMessage = "offset < 0";
   2073         goto exit;
   2074     }
   2075     _remaining = _env->GetArrayLength(params_ref) - offset;
   2076     int _needed;
   2077     switch (pname) {
   2078 #if defined(GL_AMBIENT)
   2079         case GL_AMBIENT:
   2080 #endif // defined(GL_AMBIENT)
   2081 #if defined(GL_DIFFUSE)
   2082         case GL_DIFFUSE:
   2083 #endif // defined(GL_DIFFUSE)
   2084 #if defined(GL_SPECULAR)
   2085         case GL_SPECULAR:
   2086 #endif // defined(GL_SPECULAR)
   2087 #if defined(GL_EMISSION)
   2088         case GL_EMISSION:
   2089 #endif // defined(GL_EMISSION)
   2090 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2091         case GL_AMBIENT_AND_DIFFUSE:
   2092 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2093             _needed = 4;
   2094             break;
   2095         default:
   2096             _needed = 1;
   2097             break;
   2098     }
   2099     if (_remaining < _needed) {
   2100         _exception = 1;
   2101         _exceptionType = "java/lang/IllegalArgumentException";
   2102         _exceptionMessage = "length - offset < needed";
   2103         goto exit;
   2104     }
   2105     params_base = (GLfloat *)
   2106         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   2107     params = params_base + offset;
   2108 
   2109     glMaterialfv(
   2110         (GLenum)face,
   2111         (GLenum)pname,
   2112         (GLfloat *)params
   2113     );
   2114 
   2115 exit:
   2116     if (params_base) {
   2117         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   2118             JNI_ABORT);
   2119     }
   2120     if (_exception) {
   2121         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2122     }
   2123 }
   2124 
   2125 /* void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) */
   2126 static void
   2127 android_glMaterialfv__IILjava_nio_FloatBuffer_2
   2128   (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
   2129     jint _exception = 0;
   2130     const char * _exceptionType = NULL;
   2131     const char * _exceptionMessage = NULL;
   2132     jfloatArray _array = (jfloatArray) 0;
   2133     jint _bufferOffset = (jint) 0;
   2134     jint _remaining;
   2135     GLfloat *params = (GLfloat *) 0;
   2136 
   2137     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2138     int _needed;
   2139     switch (pname) {
   2140 #if defined(GL_AMBIENT)
   2141         case GL_AMBIENT:
   2142 #endif // defined(GL_AMBIENT)
   2143 #if defined(GL_DIFFUSE)
   2144         case GL_DIFFUSE:
   2145 #endif // defined(GL_DIFFUSE)
   2146 #if defined(GL_SPECULAR)
   2147         case GL_SPECULAR:
   2148 #endif // defined(GL_SPECULAR)
   2149 #if defined(GL_EMISSION)
   2150         case GL_EMISSION:
   2151 #endif // defined(GL_EMISSION)
   2152 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2153         case GL_AMBIENT_AND_DIFFUSE:
   2154 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2155             _needed = 4;
   2156             break;
   2157         default:
   2158             _needed = 1;
   2159             break;
   2160     }
   2161     if (_remaining < _needed) {
   2162         _exception = 1;
   2163         _exceptionType = "java/lang/IllegalArgumentException";
   2164         _exceptionMessage = "remaining() < needed";
   2165         goto exit;
   2166     }
   2167     if (params == NULL) {
   2168         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2169         params = (GLfloat *) (_paramsBase + _bufferOffset);
   2170     }
   2171     glMaterialfv(
   2172         (GLenum)face,
   2173         (GLenum)pname,
   2174         (GLfloat *)params
   2175     );
   2176 
   2177 exit:
   2178     if (_array) {
   2179         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   2180     }
   2181     if (_exception) {
   2182         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2183     }
   2184 }
   2185 
   2186 /* void glMaterialx ( GLenum face, GLenum pname, GLfixed param ) */
   2187 static void
   2188 android_glMaterialx__III
   2189   (JNIEnv *_env, jobject _this, jint face, jint pname, jint param) {
   2190     glMaterialx(
   2191         (GLenum)face,
   2192         (GLenum)pname,
   2193         (GLfixed)param
   2194     );
   2195 }
   2196 
   2197 /* void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) */
   2198 static void
   2199 android_glMaterialxv__II_3II
   2200   (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
   2201     jint _exception = 0;
   2202     const char * _exceptionType = NULL;
   2203     const char * _exceptionMessage = NULL;
   2204     GLfixed *params_base = (GLfixed *) 0;
   2205     jint _remaining;
   2206     GLfixed *params = (GLfixed *) 0;
   2207 
   2208     if (!params_ref) {
   2209         _exception = 1;
   2210         _exceptionType = "java/lang/IllegalArgumentException";
   2211         _exceptionMessage = "params == null";
   2212         goto exit;
   2213     }
   2214     if (offset < 0) {
   2215         _exception = 1;
   2216         _exceptionType = "java/lang/IllegalArgumentException";
   2217         _exceptionMessage = "offset < 0";
   2218         goto exit;
   2219     }
   2220     _remaining = _env->GetArrayLength(params_ref) - offset;
   2221     int _needed;
   2222     switch (pname) {
   2223 #if defined(GL_AMBIENT)
   2224         case GL_AMBIENT:
   2225 #endif // defined(GL_AMBIENT)
   2226 #if defined(GL_DIFFUSE)
   2227         case GL_DIFFUSE:
   2228 #endif // defined(GL_DIFFUSE)
   2229 #if defined(GL_SPECULAR)
   2230         case GL_SPECULAR:
   2231 #endif // defined(GL_SPECULAR)
   2232 #if defined(GL_EMISSION)
   2233         case GL_EMISSION:
   2234 #endif // defined(GL_EMISSION)
   2235 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2236         case GL_AMBIENT_AND_DIFFUSE:
   2237 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2238             _needed = 4;
   2239             break;
   2240         default:
   2241             _needed = 1;
   2242             break;
   2243     }
   2244     if (_remaining < _needed) {
   2245         _exception = 1;
   2246         _exceptionType = "java/lang/IllegalArgumentException";
   2247         _exceptionMessage = "length - offset < needed";
   2248         goto exit;
   2249     }
   2250     params_base = (GLfixed *)
   2251         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2252     params = params_base + offset;
   2253 
   2254     glMaterialxv(
   2255         (GLenum)face,
   2256         (GLenum)pname,
   2257         (GLfixed *)params
   2258     );
   2259 
   2260 exit:
   2261     if (params_base) {
   2262         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2263             JNI_ABORT);
   2264     }
   2265     if (_exception) {
   2266         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2267     }
   2268 }
   2269 
   2270 /* void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) */
   2271 static void
   2272 android_glMaterialxv__IILjava_nio_IntBuffer_2
   2273   (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
   2274     jint _exception = 0;
   2275     const char * _exceptionType = NULL;
   2276     const char * _exceptionMessage = NULL;
   2277     jintArray _array = (jintArray) 0;
   2278     jint _bufferOffset = (jint) 0;
   2279     jint _remaining;
   2280     GLfixed *params = (GLfixed *) 0;
   2281 
   2282     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2283     int _needed;
   2284     switch (pname) {
   2285 #if defined(GL_AMBIENT)
   2286         case GL_AMBIENT:
   2287 #endif // defined(GL_AMBIENT)
   2288 #if defined(GL_DIFFUSE)
   2289         case GL_DIFFUSE:
   2290 #endif // defined(GL_DIFFUSE)
   2291 #if defined(GL_SPECULAR)
   2292         case GL_SPECULAR:
   2293 #endif // defined(GL_SPECULAR)
   2294 #if defined(GL_EMISSION)
   2295         case GL_EMISSION:
   2296 #endif // defined(GL_EMISSION)
   2297 #if defined(GL_AMBIENT_AND_DIFFUSE)
   2298         case GL_AMBIENT_AND_DIFFUSE:
   2299 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   2300             _needed = 4;
   2301             break;
   2302         default:
   2303             _needed = 1;
   2304             break;
   2305     }
   2306     if (_remaining < _needed) {
   2307         _exception = 1;
   2308         _exceptionType = "java/lang/IllegalArgumentException";
   2309         _exceptionMessage = "remaining() < needed";
   2310         goto exit;
   2311     }
   2312     if (params == NULL) {
   2313         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2314         params = (GLfixed *) (_paramsBase + _bufferOffset);
   2315     }
   2316     glMaterialxv(
   2317         (GLenum)face,
   2318         (GLenum)pname,
   2319         (GLfixed *)params
   2320     );
   2321 
   2322 exit:
   2323     if (_array) {
   2324         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   2325     }
   2326     if (_exception) {
   2327         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2328     }
   2329 }
   2330 
   2331 /* void glMatrixMode ( GLenum mode ) */
   2332 static void
   2333 android_glMatrixMode__I
   2334   (JNIEnv *_env, jobject _this, jint mode) {
   2335     glMatrixMode(
   2336         (GLenum)mode
   2337     );
   2338 }
   2339 
   2340 /* void glMultMatrixf ( const GLfloat *m ) */
   2341 static void
   2342 android_glMultMatrixf___3FI
   2343   (JNIEnv *_env, jobject _this, jfloatArray m_ref, jint offset) {
   2344     jint _exception = 0;
   2345     const char * _exceptionType = NULL;
   2346     const char * _exceptionMessage = NULL;
   2347     GLfloat *m_base = (GLfloat *) 0;
   2348     jint _remaining;
   2349     GLfloat *m = (GLfloat *) 0;
   2350 
   2351     if (!m_ref) {
   2352         _exception = 1;
   2353         _exceptionType = "java/lang/IllegalArgumentException";
   2354         _exceptionMessage = "m == null";
   2355         goto exit;
   2356     }
   2357     if (offset < 0) {
   2358         _exception = 1;
   2359         _exceptionType = "java/lang/IllegalArgumentException";
   2360         _exceptionMessage = "offset < 0";
   2361         goto exit;
   2362     }
   2363     _remaining = _env->GetArrayLength(m_ref) - offset;
   2364     m_base = (GLfloat *)
   2365         _env->GetFloatArrayElements(m_ref, (jboolean *)0);
   2366     m = m_base + offset;
   2367 
   2368     glMultMatrixf(
   2369         (GLfloat *)m
   2370     );
   2371 
   2372 exit:
   2373     if (m_base) {
   2374         _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
   2375             JNI_ABORT);
   2376     }
   2377     if (_exception) {
   2378         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2379     }
   2380 }
   2381 
   2382 /* void glMultMatrixf ( const GLfloat *m ) */
   2383 static void
   2384 android_glMultMatrixf__Ljava_nio_FloatBuffer_2
   2385   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2386     jfloatArray _array = (jfloatArray) 0;
   2387     jint _bufferOffset = (jint) 0;
   2388     jint _remaining;
   2389     GLfloat *m = (GLfloat *) 0;
   2390 
   2391     m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2392     if (m == NULL) {
   2393         char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2394         m = (GLfloat *) (_mBase + _bufferOffset);
   2395     }
   2396     glMultMatrixf(
   2397         (GLfloat *)m
   2398     );
   2399     if (_array) {
   2400         _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
   2401     }
   2402 }
   2403 
   2404 /* void glMultMatrixx ( const GLfixed *m ) */
   2405 static void
   2406 android_glMultMatrixx___3II
   2407   (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
   2408     jint _exception = 0;
   2409     const char * _exceptionType = NULL;
   2410     const char * _exceptionMessage = NULL;
   2411     GLfixed *m_base = (GLfixed *) 0;
   2412     jint _remaining;
   2413     GLfixed *m = (GLfixed *) 0;
   2414 
   2415     if (!m_ref) {
   2416         _exception = 1;
   2417         _exceptionType = "java/lang/IllegalArgumentException";
   2418         _exceptionMessage = "m == null";
   2419         goto exit;
   2420     }
   2421     if (offset < 0) {
   2422         _exception = 1;
   2423         _exceptionType = "java/lang/IllegalArgumentException";
   2424         _exceptionMessage = "offset < 0";
   2425         goto exit;
   2426     }
   2427     _remaining = _env->GetArrayLength(m_ref) - offset;
   2428     m_base = (GLfixed *)
   2429         _env->GetIntArrayElements(m_ref, (jboolean *)0);
   2430     m = m_base + offset;
   2431 
   2432     glMultMatrixx(
   2433         (GLfixed *)m
   2434     );
   2435 
   2436 exit:
   2437     if (m_base) {
   2438         _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
   2439             JNI_ABORT);
   2440     }
   2441     if (_exception) {
   2442         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2443     }
   2444 }
   2445 
   2446 /* void glMultMatrixx ( const GLfixed *m ) */
   2447 static void
   2448 android_glMultMatrixx__Ljava_nio_IntBuffer_2
   2449   (JNIEnv *_env, jobject _this, jobject m_buf) {
   2450     jintArray _array = (jintArray) 0;
   2451     jint _bufferOffset = (jint) 0;
   2452     jint _remaining;
   2453     GLfixed *m = (GLfixed *) 0;
   2454 
   2455     m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2456     if (m == NULL) {
   2457         char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2458         m = (GLfixed *) (_mBase + _bufferOffset);
   2459     }
   2460     glMultMatrixx(
   2461         (GLfixed *)m
   2462     );
   2463     if (_array) {
   2464         _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
   2465     }
   2466 }
   2467 
   2468 /* void glMultiTexCoord4f ( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ) */
   2469 static void
   2470 android_glMultiTexCoord4f__IFFFF
   2471   (JNIEnv *_env, jobject _this, jint target, jfloat s, jfloat t, jfloat r, jfloat q) {
   2472     glMultiTexCoord4f(
   2473         (GLenum)target,
   2474         (GLfloat)s,
   2475         (GLfloat)t,
   2476         (GLfloat)r,
   2477         (GLfloat)q
   2478     );
   2479 }
   2480 
   2481 /* void glMultiTexCoord4x ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q ) */
   2482 static void
   2483 android_glMultiTexCoord4x__IIIII
   2484   (JNIEnv *_env, jobject _this, jint target, jint s, jint t, jint r, jint q) {
   2485     glMultiTexCoord4x(
   2486         (GLenum)target,
   2487         (GLfixed)s,
   2488         (GLfixed)t,
   2489         (GLfixed)r,
   2490         (GLfixed)q
   2491     );
   2492 }
   2493 
   2494 /* void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz ) */
   2495 static void
   2496 android_glNormal3f__FFF
   2497   (JNIEnv *_env, jobject _this, jfloat nx, jfloat ny, jfloat nz) {
   2498     glNormal3f(
   2499         (GLfloat)nx,
   2500         (GLfloat)ny,
   2501         (GLfloat)nz
   2502     );
   2503 }
   2504 
   2505 /* void glNormal3x ( GLfixed nx, GLfixed ny, GLfixed nz ) */
   2506 static void
   2507 android_glNormal3x__III
   2508   (JNIEnv *_env, jobject _this, jint nx, jint ny, jint nz) {
   2509     glNormal3x(
   2510         (GLfixed)nx,
   2511         (GLfixed)ny,
   2512         (GLfixed)nz
   2513     );
   2514 }
   2515 
   2516 /* void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
   2517 static void
   2518 android_glNormalPointerBounds__IILjava_nio_Buffer_2I
   2519   (JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf, jint remaining) {
   2520     jarray _array = (jarray) 0;
   2521     jint _bufferOffset = (jint) 0;
   2522     jint _remaining;
   2523     GLvoid *pointer = (GLvoid *) 0;
   2524 
   2525     if (pointer_buf) {
   2526         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   2527         if ( ! pointer ) {
   2528             return;
   2529         }
   2530     }
   2531     glNormalPointerBounds(
   2532         (GLenum)type,
   2533         (GLsizei)stride,
   2534         (GLvoid *)pointer,
   2535         (GLsizei)remaining
   2536     );
   2537 }
   2538 
   2539 /* void glOrthof ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
   2540 static void
   2541 android_glOrthof__FFFFFF
   2542   (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
   2543     glOrthof(
   2544         (GLfloat)left,
   2545         (GLfloat)right,
   2546         (GLfloat)bottom,
   2547         (GLfloat)top,
   2548         (GLfloat)zNear,
   2549         (GLfloat)zFar
   2550     );
   2551 }
   2552 
   2553 /* void glOrthox ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
   2554 static void
   2555 android_glOrthox__IIIIII
   2556   (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
   2557     glOrthox(
   2558         (GLfixed)left,
   2559         (GLfixed)right,
   2560         (GLfixed)bottom,
   2561         (GLfixed)top,
   2562         (GLfixed)zNear,
   2563         (GLfixed)zFar
   2564     );
   2565 }
   2566 
   2567 /* void glPixelStorei ( GLenum pname, GLint param ) */
   2568 static void
   2569 android_glPixelStorei__II
   2570   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   2571     glPixelStorei(
   2572         (GLenum)pname,
   2573         (GLint)param
   2574     );
   2575 }
   2576 
   2577 /* void glPointSize ( GLfloat size ) */
   2578 static void
   2579 android_glPointSize__F
   2580   (JNIEnv *_env, jobject _this, jfloat size) {
   2581     glPointSize(
   2582         (GLfloat)size
   2583     );
   2584 }
   2585 
   2586 /* void glPointSizex ( GLfixed size ) */
   2587 static void
   2588 android_glPointSizex__I
   2589   (JNIEnv *_env, jobject _this, jint size) {
   2590     glPointSizex(
   2591         (GLfixed)size
   2592     );
   2593 }
   2594 
   2595 /* void glPolygonOffset ( GLfloat factor, GLfloat units ) */
   2596 static void
   2597 android_glPolygonOffset__FF
   2598   (JNIEnv *_env, jobject _this, jfloat factor, jfloat units) {
   2599     glPolygonOffset(
   2600         (GLfloat)factor,
   2601         (GLfloat)units
   2602     );
   2603 }
   2604 
   2605 /* void glPolygonOffsetx ( GLfixed factor, GLfixed units ) */
   2606 static void
   2607 android_glPolygonOffsetx__II
   2608   (JNIEnv *_env, jobject _this, jint factor, jint units) {
   2609     glPolygonOffsetx(
   2610         (GLfixed)factor,
   2611         (GLfixed)units
   2612     );
   2613 }
   2614 
   2615 /* void glPopMatrix ( void ) */
   2616 static void
   2617 android_glPopMatrix__
   2618   (JNIEnv *_env, jobject _this) {
   2619     glPopMatrix();
   2620 }
   2621 
   2622 /* void glPushMatrix ( void ) */
   2623 static void
   2624 android_glPushMatrix__
   2625   (JNIEnv *_env, jobject _this) {
   2626     glPushMatrix();
   2627 }
   2628 
   2629 /* void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ) */
   2630 static void
   2631 android_glReadPixels__IIIIIILjava_nio_Buffer_2
   2632   (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jobject pixels_buf) {
   2633     jarray _array = (jarray) 0;
   2634     jint _bufferOffset = (jint) 0;
   2635     jint _remaining;
   2636     GLvoid *pixels = (GLvoid *) 0;
   2637 
   2638     pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2639     if (pixels == NULL) {
   2640         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
   2641         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
   2642     }
   2643     glReadPixels(
   2644         (GLint)x,
   2645         (GLint)y,
   2646         (GLsizei)width,
   2647         (GLsizei)height,
   2648         (GLenum)format,
   2649         (GLenum)type,
   2650         (GLvoid *)pixels
   2651     );
   2652     if (_array) {
   2653         releasePointer(_env, _array, pixels, JNI_TRUE);
   2654     }
   2655 }
   2656 
   2657 /* void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ) */
   2658 static void
   2659 android_glRotatef__FFFF
   2660   (JNIEnv *_env, jobject _this, jfloat angle, jfloat x, jfloat y, jfloat z) {
   2661     glRotatef(
   2662         (GLfloat)angle,
   2663         (GLfloat)x,
   2664         (GLfloat)y,
   2665         (GLfloat)z
   2666     );
   2667 }
   2668 
   2669 /* void glRotatex ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z ) */
   2670 static void
   2671 android_glRotatex__IIII
   2672   (JNIEnv *_env, jobject _this, jint angle, jint x, jint y, jint z) {
   2673     glRotatex(
   2674         (GLfixed)angle,
   2675         (GLfixed)x,
   2676         (GLfixed)y,
   2677         (GLfixed)z
   2678     );
   2679 }
   2680 
   2681 /* void glSampleCoverage ( GLclampf value, GLboolean invert ) */
   2682 static void
   2683 android_glSampleCoverage__FZ
   2684   (JNIEnv *_env, jobject _this, jfloat value, jboolean invert) {
   2685     glSampleCoverage(
   2686         (GLclampf)value,
   2687         (GLboolean)invert
   2688     );
   2689 }
   2690 
   2691 /* void glSampleCoveragex ( GLclampx value, GLboolean invert ) */
   2692 static void
   2693 android_glSampleCoveragex__IZ
   2694   (JNIEnv *_env, jobject _this, jint value, jboolean invert) {
   2695     glSampleCoveragex(
   2696         (GLclampx)value,
   2697         (GLboolean)invert
   2698     );
   2699 }
   2700 
   2701 /* void glScalef ( GLfloat x, GLfloat y, GLfloat z ) */
   2702 static void
   2703 android_glScalef__FFF
   2704   (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z) {
   2705     glScalef(
   2706         (GLfloat)x,
   2707         (GLfloat)y,
   2708         (GLfloat)z
   2709     );
   2710 }
   2711 
   2712 /* void glScalex ( GLfixed x, GLfixed y, GLfixed z ) */
   2713 static void
   2714 android_glScalex__III
   2715   (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
   2716     glScalex(
   2717         (GLfixed)x,
   2718         (GLfixed)y,
   2719         (GLfixed)z
   2720     );
   2721 }
   2722 
   2723 /* void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height ) */
   2724 static void
   2725 android_glScissor__IIII
   2726   (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
   2727     glScissor(
   2728         (GLint)x,
   2729         (GLint)y,
   2730         (GLsizei)width,
   2731         (GLsizei)height
   2732     );
   2733 }
   2734 
   2735 /* void glShadeModel ( GLenum mode ) */
   2736 static void
   2737 android_glShadeModel__I
   2738   (JNIEnv *_env, jobject _this, jint mode) {
   2739     glShadeModel(
   2740         (GLenum)mode
   2741     );
   2742 }
   2743 
   2744 /* void glStencilFunc ( GLenum func, GLint ref, GLuint mask ) */
   2745 static void
   2746 android_glStencilFunc__III
   2747   (JNIEnv *_env, jobject _this, jint func, jint ref, jint mask) {
   2748     glStencilFunc(
   2749         (GLenum)func,
   2750         (GLint)ref,
   2751         (GLuint)mask
   2752     );
   2753 }
   2754 
   2755 /* void glStencilMask ( GLuint mask ) */
   2756 static void
   2757 android_glStencilMask__I
   2758   (JNIEnv *_env, jobject _this, jint mask) {
   2759     glStencilMask(
   2760         (GLuint)mask
   2761     );
   2762 }
   2763 
   2764 /* void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass ) */
   2765 static void
   2766 android_glStencilOp__III
   2767   (JNIEnv *_env, jobject _this, jint fail, jint zfail, jint zpass) {
   2768     glStencilOp(
   2769         (GLenum)fail,
   2770         (GLenum)zfail,
   2771         (GLenum)zpass
   2772     );
   2773 }
   2774 
   2775 /* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
   2776 static void
   2777 android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I
   2778   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
   2779     jarray _array = (jarray) 0;
   2780     jint _bufferOffset = (jint) 0;
   2781     jint _remaining;
   2782     GLvoid *pointer = (GLvoid *) 0;
   2783 
   2784     if (pointer_buf) {
   2785         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   2786         if ( ! pointer ) {
   2787             return;
   2788         }
   2789     }
   2790     glTexCoordPointerBounds(
   2791         (GLint)size,
   2792         (GLenum)type,
   2793         (GLsizei)stride,
   2794         (GLvoid *)pointer,
   2795         (GLsizei)remaining
   2796     );
   2797 }
   2798 
   2799 /* void glTexEnvf ( GLenum target, GLenum pname, GLfloat param ) */
   2800 static void
   2801 android_glTexEnvf__IIF
   2802   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
   2803     glTexEnvf(
   2804         (GLenum)target,
   2805         (GLenum)pname,
   2806         (GLfloat)param
   2807     );
   2808 }
   2809 
   2810 /* void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) */
   2811 static void
   2812 android_glTexEnvfv__II_3FI
   2813   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
   2814     jint _exception = 0;
   2815     const char * _exceptionType = NULL;
   2816     const char * _exceptionMessage = NULL;
   2817     GLfloat *params_base = (GLfloat *) 0;
   2818     jint _remaining;
   2819     GLfloat *params = (GLfloat *) 0;
   2820 
   2821     if (!params_ref) {
   2822         _exception = 1;
   2823         _exceptionType = "java/lang/IllegalArgumentException";
   2824         _exceptionMessage = "params == null";
   2825         goto exit;
   2826     }
   2827     if (offset < 0) {
   2828         _exception = 1;
   2829         _exceptionType = "java/lang/IllegalArgumentException";
   2830         _exceptionMessage = "offset < 0";
   2831         goto exit;
   2832     }
   2833     _remaining = _env->GetArrayLength(params_ref) - offset;
   2834     int _needed;
   2835     switch (pname) {
   2836 #if defined(GL_TEXTURE_ENV_COLOR)
   2837         case GL_TEXTURE_ENV_COLOR:
   2838 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2839             _needed = 4;
   2840             break;
   2841         default:
   2842             _needed = 1;
   2843             break;
   2844     }
   2845     if (_remaining < _needed) {
   2846         _exception = 1;
   2847         _exceptionType = "java/lang/IllegalArgumentException";
   2848         _exceptionMessage = "length - offset < needed";
   2849         goto exit;
   2850     }
   2851     params_base = (GLfloat *)
   2852         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   2853     params = params_base + offset;
   2854 
   2855     glTexEnvfv(
   2856         (GLenum)target,
   2857         (GLenum)pname,
   2858         (GLfloat *)params
   2859     );
   2860 
   2861 exit:
   2862     if (params_base) {
   2863         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   2864             JNI_ABORT);
   2865     }
   2866     if (_exception) {
   2867         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2868     }
   2869 }
   2870 
   2871 /* void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) */
   2872 static void
   2873 android_glTexEnvfv__IILjava_nio_FloatBuffer_2
   2874   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2875     jint _exception = 0;
   2876     const char * _exceptionType = NULL;
   2877     const char * _exceptionMessage = NULL;
   2878     jfloatArray _array = (jfloatArray) 0;
   2879     jint _bufferOffset = (jint) 0;
   2880     jint _remaining;
   2881     GLfloat *params = (GLfloat *) 0;
   2882 
   2883     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2884     int _needed;
   2885     switch (pname) {
   2886 #if defined(GL_TEXTURE_ENV_COLOR)
   2887         case GL_TEXTURE_ENV_COLOR:
   2888 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2889             _needed = 4;
   2890             break;
   2891         default:
   2892             _needed = 1;
   2893             break;
   2894     }
   2895     if (_remaining < _needed) {
   2896         _exception = 1;
   2897         _exceptionType = "java/lang/IllegalArgumentException";
   2898         _exceptionMessage = "remaining() < needed";
   2899         goto exit;
   2900     }
   2901     if (params == NULL) {
   2902         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2903         params = (GLfloat *) (_paramsBase + _bufferOffset);
   2904     }
   2905     glTexEnvfv(
   2906         (GLenum)target,
   2907         (GLenum)pname,
   2908         (GLfloat *)params
   2909     );
   2910 
   2911 exit:
   2912     if (_array) {
   2913         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   2914     }
   2915     if (_exception) {
   2916         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2917     }
   2918 }
   2919 
   2920 /* void glTexEnvx ( GLenum target, GLenum pname, GLfixed param ) */
   2921 static void
   2922 android_glTexEnvx__III
   2923   (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
   2924     glTexEnvx(
   2925         (GLenum)target,
   2926         (GLenum)pname,
   2927         (GLfixed)param
   2928     );
   2929 }
   2930 
   2931 /* void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) */
   2932 static void
   2933 android_glTexEnvxv__II_3II
   2934   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   2935     jint _exception = 0;
   2936     const char * _exceptionType = NULL;
   2937     const char * _exceptionMessage = NULL;
   2938     GLfixed *params_base = (GLfixed *) 0;
   2939     jint _remaining;
   2940     GLfixed *params = (GLfixed *) 0;
   2941 
   2942     if (!params_ref) {
   2943         _exception = 1;
   2944         _exceptionType = "java/lang/IllegalArgumentException";
   2945         _exceptionMessage = "params == null";
   2946         goto exit;
   2947     }
   2948     if (offset < 0) {
   2949         _exception = 1;
   2950         _exceptionType = "java/lang/IllegalArgumentException";
   2951         _exceptionMessage = "offset < 0";
   2952         goto exit;
   2953     }
   2954     _remaining = _env->GetArrayLength(params_ref) - offset;
   2955     int _needed;
   2956     switch (pname) {
   2957 #if defined(GL_TEXTURE_ENV_COLOR)
   2958         case GL_TEXTURE_ENV_COLOR:
   2959 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2960             _needed = 4;
   2961             break;
   2962         default:
   2963             _needed = 1;
   2964             break;
   2965     }
   2966     if (_remaining < _needed) {
   2967         _exception = 1;
   2968         _exceptionType = "java/lang/IllegalArgumentException";
   2969         _exceptionMessage = "length - offset < needed";
   2970         goto exit;
   2971     }
   2972     params_base = (GLfixed *)
   2973         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2974     params = params_base + offset;
   2975 
   2976     glTexEnvxv(
   2977         (GLenum)target,
   2978         (GLenum)pname,
   2979         (GLfixed *)params
   2980     );
   2981 
   2982 exit:
   2983     if (params_base) {
   2984         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2985             JNI_ABORT);
   2986     }
   2987     if (_exception) {
   2988         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2989     }
   2990 }
   2991 
   2992 /* void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) */
   2993 static void
   2994 android_glTexEnvxv__IILjava_nio_IntBuffer_2
   2995   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2996     jint _exception = 0;
   2997     const char * _exceptionType = NULL;
   2998     const char * _exceptionMessage = NULL;
   2999     jintArray _array = (jintArray) 0;
   3000     jint _bufferOffset = (jint) 0;
   3001     jint _remaining;
   3002     GLfixed *params = (GLfixed *) 0;
   3003 
   3004     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3005     int _needed;
   3006     switch (pname) {
   3007 #if defined(GL_TEXTURE_ENV_COLOR)
   3008         case GL_TEXTURE_ENV_COLOR:
   3009 #endif // defined(GL_TEXTURE_ENV_COLOR)
   3010             _needed = 4;
   3011             break;
   3012         default:
   3013             _needed = 1;
   3014             break;
   3015     }
   3016     if (_remaining < _needed) {
   3017         _exception = 1;
   3018         _exceptionType = "java/lang/IllegalArgumentException";
   3019         _exceptionMessage = "remaining() < needed";
   3020         goto exit;
   3021     }
   3022     if (params == NULL) {
   3023         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   3024         params = (GLfixed *) (_paramsBase + _bufferOffset);
   3025     }
   3026     glTexEnvxv(
   3027         (GLenum)target,
   3028         (GLenum)pname,
   3029         (GLfixed *)params
   3030     );
   3031 
   3032 exit:
   3033     if (_array) {
   3034         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   3035     }
   3036     if (_exception) {
   3037         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3038     }
   3039 }
   3040 
   3041 /* void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
   3042 static void
   3043 android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
   3044   (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint format, jint type, jobject pixels_buf) {
   3045     jarray _array = (jarray) 0;
   3046     jint _bufferOffset = (jint) 0;
   3047     jint _remaining;
   3048     GLvoid *pixels = (GLvoid *) 0;
   3049 
   3050     if (pixels_buf) {
   3051         pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3052     }
   3053     if (pixels_buf && pixels == NULL) {
   3054         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
   3055         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
   3056     }
   3057     glTexImage2D(
   3058         (GLenum)target,
   3059         (GLint)level,
   3060         (GLint)internalformat,
   3061         (GLsizei)width,
   3062         (GLsizei)height,
   3063         (GLint)border,
   3064         (GLenum)format,
   3065         (GLenum)type,
   3066         (GLvoid *)pixels
   3067     );
   3068     if (_array) {
   3069         releasePointer(_env, _array, pixels, JNI_FALSE);
   3070     }
   3071 }
   3072 
   3073 /* void glTexParameterf ( GLenum target, GLenum pname, GLfloat param ) */
   3074 static void
   3075 android_glTexParameterf__IIF
   3076   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
   3077     glTexParameterf(
   3078         (GLenum)target,
   3079         (GLenum)pname,
   3080         (GLfloat)param
   3081     );
   3082 }
   3083 
   3084 /* void glTexParameterx ( GLenum target, GLenum pname, GLfixed param ) */
   3085 static void
   3086 android_glTexParameterx__III
   3087   (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
   3088     glTexParameterx(
   3089         (GLenum)target,
   3090         (GLenum)pname,
   3091         (GLfixed)param
   3092     );
   3093 }
   3094 
   3095 /* void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ) */
   3096 static void
   3097 android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
   3098   (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint type, jobject pixels_buf) {
   3099     jarray _array = (jarray) 0;
   3100     jint _bufferOffset = (jint) 0;
   3101     jint _remaining;
   3102     GLvoid *pixels = (GLvoid *) 0;
   3103 
   3104     if (pixels_buf) {
   3105         pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3106     }
   3107     if (pixels_buf && pixels == NULL) {
   3108         char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
   3109         pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
   3110     }
   3111     glTexSubImage2D(
   3112         (GLenum)target,
   3113         (GLint)level,
   3114         (GLint)xoffset,
   3115         (GLint)yoffset,
   3116         (GLsizei)width,
   3117         (GLsizei)height,
   3118         (GLenum)format,
   3119         (GLenum)type,
   3120         (GLvoid *)pixels
   3121     );
   3122     if (_array) {
   3123         releasePointer(_env, _array, pixels, JNI_FALSE);
   3124     }
   3125 }
   3126 
   3127 /* void glTranslatef ( GLfloat x, GLfloat y, GLfloat z ) */
   3128 static void
   3129 android_glTranslatef__FFF
   3130   (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z) {
   3131     glTranslatef(
   3132         (GLfloat)x,
   3133         (GLfloat)y,
   3134         (GLfloat)z
   3135     );
   3136 }
   3137 
   3138 /* void glTranslatex ( GLfixed x, GLfixed y, GLfixed z ) */
   3139 static void
   3140 android_glTranslatex__III
   3141   (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
   3142     glTranslatex(
   3143         (GLfixed)x,
   3144         (GLfixed)y,
   3145         (GLfixed)z
   3146     );
   3147 }
   3148 
   3149 /* void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
   3150 static void
   3151 android_glVertexPointerBounds__IIILjava_nio_Buffer_2I
   3152   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
   3153     jarray _array = (jarray) 0;
   3154     jint _bufferOffset = (jint) 0;
   3155     jint _remaining;
   3156     GLvoid *pointer = (GLvoid *) 0;
   3157 
   3158     if (pointer_buf) {
   3159         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   3160         if ( ! pointer ) {
   3161             return;
   3162         }
   3163     }
   3164     glVertexPointerBounds(
   3165         (GLint)size,
   3166         (GLenum)type,
   3167         (GLsizei)stride,
   3168         (GLvoid *)pointer,
   3169         (GLsizei)remaining
   3170     );
   3171 }
   3172 
   3173 /* void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ) */
   3174 static void
   3175 android_glViewport__IIII
   3176   (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
   3177     glViewport(
   3178         (GLint)x,
   3179         (GLint)y,
   3180         (GLsizei)width,
   3181         (GLsizei)height
   3182     );
   3183 }
   3184 
   3185 static const char *classPathName = "android/opengl/GLES10";
   3186 
   3187 static const JNINativeMethod methods[] = {
   3188 {"_nativeClassInit", "()V", (void*)nativeClassInit },
   3189 {"glActiveTexture", "(I)V", (void *) android_glActiveTexture__I },
   3190 {"glAlphaFunc", "(IF)V", (void *) android_glAlphaFunc__IF },
   3191 {"glAlphaFuncx", "(II)V", (void *) android_glAlphaFuncx__II },
   3192 {"glBindTexture", "(II)V", (void *) android_glBindTexture__II },
   3193 {"glBlendFunc", "(II)V", (void *) android_glBlendFunc__II },
   3194 {"glClear", "(I)V", (void *) android_glClear__I },
   3195 {"glClearColor", "(FFFF)V", (void *) android_glClearColor__FFFF },
   3196 {"glClearColorx", "(IIII)V", (void *) android_glClearColorx__IIII },
   3197 {"glClearDepthf", "(F)V", (void *) android_glClearDepthf__F },
   3198 {"glClearDepthx", "(I)V", (void *) android_glClearDepthx__I },
   3199 {"glClearStencil", "(I)V", (void *) android_glClearStencil__I },
   3200 {"glClientActiveTexture", "(I)V", (void *) android_glClientActiveTexture__I },
   3201 {"glColor4f", "(FFFF)V", (void *) android_glColor4f__FFFF },
   3202 {"glColor4x", "(IIII)V", (void *) android_glColor4x__IIII },
   3203 {"glColorMask", "(ZZZZ)V", (void *) android_glColorMask__ZZZZ },
   3204 {"glColorPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glColorPointerBounds__IIILjava_nio_Buffer_2I },
   3205 {"glCompressedTexImage2D", "(IIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2 },
   3206 {"glCompressedTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
   3207 {"glCopyTexImage2D", "(IIIIIIII)V", (void *) android_glCopyTexImage2D__IIIIIIII },
   3208 {"glCopyTexSubImage2D", "(IIIIIIII)V", (void *) android_glCopyTexSubImage2D__IIIIIIII },
   3209 {"glCullFace", "(I)V", (void *) android_glCullFace__I },
   3210 {"glDeleteTextures", "(I[II)V", (void *) android_glDeleteTextures__I_3II },
   3211 {"glDeleteTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTextures__ILjava_nio_IntBuffer_2 },
   3212 {"glDepthFunc", "(I)V", (void *) android_glDepthFunc__I },
   3213 {"glDepthMask", "(Z)V", (void *) android_glDepthMask__Z },
   3214 {"glDepthRangef", "(FF)V", (void *) android_glDepthRangef__FF },
   3215 {"glDepthRangex", "(II)V", (void *) android_glDepthRangex__II },
   3216 {"glDisable", "(I)V", (void *) android_glDisable__I },
   3217 {"glDisableClientState", "(I)V", (void *) android_glDisableClientState__I },
   3218 {"glDrawArrays", "(III)V", (void *) android_glDrawArrays__III },
   3219 {"glDrawElements", "(IIILjava/nio/Buffer;)V", (void *) android_glDrawElements__IIILjava_nio_Buffer_2 },
   3220 {"glEnable", "(I)V", (void *) android_glEnable__I },
   3221 {"glEnableClientState", "(I)V", (void *) android_glEnableClientState__I },
   3222 {"glFinish", "()V", (void *) android_glFinish__ },
   3223 {"glFlush", "()V", (void *) android_glFlush__ },
   3224 {"glFogf", "(IF)V", (void *) android_glFogf__IF },
   3225 {"glFogfv", "(I[FI)V", (void *) android_glFogfv__I_3FI },
   3226 {"glFogfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glFogfv__ILjava_nio_FloatBuffer_2 },
   3227 {"glFogx", "(II)V", (void *) android_glFogx__II },
   3228 {"glFogxv", "(I[II)V", (void *) android_glFogxv__I_3II },
   3229 {"glFogxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glFogxv__ILjava_nio_IntBuffer_2 },
   3230 {"glFrontFace", "(I)V", (void *) android_glFrontFace__I },
   3231 {"glFrustumf", "(FFFFFF)V", (void *) android_glFrustumf__FFFFFF },
   3232 {"glFrustumx", "(IIIIII)V", (void *) android_glFrustumx__IIIIII },
   3233 {"glGenTextures", "(I[II)V", (void *) android_glGenTextures__I_3II },
   3234 {"glGenTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTextures__ILjava_nio_IntBuffer_2 },
   3235 {"glGetError", "()I", (void *) android_glGetError__ },
   3236 {"glGetIntegerv", "(I[II)V", (void *) android_glGetIntegerv__I_3II },
   3237 {"glGetIntegerv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetIntegerv__ILjava_nio_IntBuffer_2 },
   3238 {"glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString },
   3239 {"glHint", "(II)V", (void *) android_glHint__II },
   3240 {"glLightModelf", "(IF)V", (void *) android_glLightModelf__IF },
   3241 {"glLightModelfv", "(I[FI)V", (void *) android_glLightModelfv__I_3FI },
   3242 {"glLightModelfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glLightModelfv__ILjava_nio_FloatBuffer_2 },
   3243 {"glLightModelx", "(II)V", (void *) android_glLightModelx__II },
   3244 {"glLightModelxv", "(I[II)V", (void *) android_glLightModelxv__I_3II },
   3245 {"glLightModelxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glLightModelxv__ILjava_nio_IntBuffer_2 },
   3246 {"glLightf", "(IIF)V", (void *) android_glLightf__IIF },
   3247 {"glLightfv", "(II[FI)V", (void *) android_glLightfv__II_3FI },
   3248 {"glLightfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glLightfv__IILjava_nio_FloatBuffer_2 },
   3249 {"glLightx", "(III)V", (void *) android_glLightx__III },
   3250 {"glLightxv", "(II[II)V", (void *) android_glLightxv__II_3II },
   3251 {"glLightxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glLightxv__IILjava_nio_IntBuffer_2 },
   3252 {"glLineWidth", "(F)V", (void *) android_glLineWidth__F },
   3253 {"glLineWidthx", "(I)V", (void *) android_glLineWidthx__I },
   3254 {"glLoadIdentity", "()V", (void *) android_glLoadIdentity__ },
   3255 {"glLoadMatrixf", "([FI)V", (void *) android_glLoadMatrixf___3FI },
   3256 {"glLoadMatrixf", "(Ljava/nio/FloatBuffer;)V", (void *) android_glLoadMatrixf__Ljava_nio_FloatBuffer_2 },
   3257 {"glLoadMatrixx", "([II)V", (void *) android_glLoadMatrixx___3II },
   3258 {"glLoadMatrixx", "(Ljava/nio/IntBuffer;)V", (void *) android_glLoadMatrixx__Ljava_nio_IntBuffer_2 },
   3259 {"glLogicOp", "(I)V", (void *) android_glLogicOp__I },
   3260 {"glMaterialf", "(IIF)V", (void *) android_glMaterialf__IIF },
   3261 {"glMaterialfv", "(II[FI)V", (void *) android_glMaterialfv__II_3FI },
   3262 {"glMaterialfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glMaterialfv__IILjava_nio_FloatBuffer_2 },
   3263 {"glMaterialx", "(III)V", (void *) android_glMaterialx__III },
   3264 {"glMaterialxv", "(II[II)V", (void *) android_glMaterialxv__II_3II },
   3265 {"glMaterialxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glMaterialxv__IILjava_nio_IntBuffer_2 },
   3266 {"glMatrixMode", "(I)V", (void *) android_glMatrixMode__I },
   3267 {"glMultMatrixf", "([FI)V", (void *) android_glMultMatrixf___3FI },
   3268 {"glMultMatrixf", "(Ljava/nio/FloatBuffer;)V", (void *) android_glMultMatrixf__Ljava_nio_FloatBuffer_2 },
   3269 {"glMultMatrixx", "([II)V", (void *) android_glMultMatrixx___3II },
   3270 {"glMultMatrixx", "(Ljava/nio/IntBuffer;)V", (void *) android_glMultMatrixx__Ljava_nio_IntBuffer_2 },
   3271 {"glMultiTexCoord4f", "(IFFFF)V", (void *) android_glMultiTexCoord4f__IFFFF },
   3272 {"glMultiTexCoord4x", "(IIIII)V", (void *) android_glMultiTexCoord4x__IIIII },
   3273 {"glNormal3f", "(FFF)V", (void *) android_glNormal3f__FFF },
   3274 {"glNormal3x", "(III)V", (void *) android_glNormal3x__III },
   3275 {"glNormalPointerBounds", "(IILjava/nio/Buffer;I)V", (void *) android_glNormalPointerBounds__IILjava_nio_Buffer_2I },
   3276 {"glOrthof", "(FFFFFF)V", (void *) android_glOrthof__FFFFFF },
   3277 {"glOrthox", "(IIIIII)V", (void *) android_glOrthox__IIIIII },
   3278 {"glPixelStorei", "(II)V", (void *) android_glPixelStorei__II },
   3279 {"glPointSize", "(F)V", (void *) android_glPointSize__F },
   3280 {"glPointSizex", "(I)V", (void *) android_glPointSizex__I },
   3281 {"glPolygonOffset", "(FF)V", (void *) android_glPolygonOffset__FF },
   3282 {"glPolygonOffsetx", "(II)V", (void *) android_glPolygonOffsetx__II },
   3283 {"glPopMatrix", "()V", (void *) android_glPopMatrix__ },
   3284 {"glPushMatrix", "()V", (void *) android_glPushMatrix__ },
   3285 {"glReadPixels", "(IIIIIILjava/nio/Buffer;)V", (void *) android_glReadPixels__IIIIIILjava_nio_Buffer_2 },
   3286 {"glRotatef", "(FFFF)V", (void *) android_glRotatef__FFFF },
   3287 {"glRotatex", "(IIII)V", (void *) android_glRotatex__IIII },
   3288 {"glSampleCoverage", "(FZ)V", (void *) android_glSampleCoverage__FZ },
   3289 {"glSampleCoveragex", "(IZ)V", (void *) android_glSampleCoveragex__IZ },
   3290 {"glScalef", "(FFF)V", (void *) android_glScalef__FFF },
   3291 {"glScalex", "(III)V", (void *) android_glScalex__III },
   3292 {"glScissor", "(IIII)V", (void *) android_glScissor__IIII },
   3293 {"glShadeModel", "(I)V", (void *) android_glShadeModel__I },
   3294 {"glStencilFunc", "(III)V", (void *) android_glStencilFunc__III },
   3295 {"glStencilMask", "(I)V", (void *) android_glStencilMask__I },
   3296 {"glStencilOp", "(III)V", (void *) android_glStencilOp__III },
   3297 {"glTexCoordPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I },
   3298 {"glTexEnvf", "(IIF)V", (void *) android_glTexEnvf__IIF },
   3299 {"glTexEnvfv", "(II[FI)V", (void *) android_glTexEnvfv__II_3FI },
   3300 {"glTexEnvfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexEnvfv__IILjava_nio_FloatBuffer_2 },
   3301 {"glTexEnvx", "(III)V", (void *) android_glTexEnvx__III },
   3302 {"glTexEnvxv", "(II[II)V", (void *) android_glTexEnvxv__II_3II },
   3303 {"glTexEnvxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexEnvxv__IILjava_nio_IntBuffer_2 },
   3304 {"glTexImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2 },
   3305 {"glTexParameterf", "(IIF)V", (void *) android_glTexParameterf__IIF },
   3306 {"glTexParameterx", "(III)V", (void *) android_glTexParameterx__III },
   3307 {"glTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
   3308 {"glTranslatef", "(FFF)V", (void *) android_glTranslatef__FFF },
   3309 {"glTranslatex", "(III)V", (void *) android_glTranslatex__III },
   3310 {"glVertexPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glVertexPointerBounds__IIILjava_nio_Buffer_2I },
   3311 {"glViewport", "(IIII)V", (void *) android_glViewport__IIII },
   3312 };
   3313 
   3314 int register_android_opengl_jni_GLES10(JNIEnv *_env)
   3315 {
   3316     int err;
   3317     err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
   3318     return err;
   3319 }
   3320