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 glBindBuffer ( GLenum target, GLuint buffer ) */
    446 static void
    447 android_glBindBuffer__II
    448   (JNIEnv *_env, jobject _this, jint target, jint buffer) {
    449     glBindBuffer(
    450         (GLenum)target,
    451         (GLuint)buffer
    452     );
    453 }
    454 
    455 /* void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage ) */
    456 static void
    457 android_glBufferData__IILjava_nio_Buffer_2I
    458   (JNIEnv *_env, jobject _this, jint target, jint size, jobject data_buf, jint usage) {
    459     jint _exception = 0;
    460     const char * _exceptionType = NULL;
    461     const char * _exceptionMessage = NULL;
    462     jarray _array = (jarray) 0;
    463     jint _bufferOffset = (jint) 0;
    464     jint _remaining;
    465     GLvoid *data = (GLvoid *) 0;
    466 
    467     if (data_buf) {
    468         data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    469         if (_remaining < size) {
    470             _exception = 1;
    471             _exceptionType = "java/lang/IllegalArgumentException";
    472             _exceptionMessage = "remaining() < size < needed";
    473             goto exit;
    474         }
    475     }
    476     if (data_buf && data == NULL) {
    477         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    478         data = (GLvoid *) (_dataBase + _bufferOffset);
    479     }
    480     glBufferData(
    481         (GLenum)target,
    482         (GLsizeiptr)size,
    483         (GLvoid *)data,
    484         (GLenum)usage
    485     );
    486 
    487 exit:
    488     if (_array) {
    489         releasePointer(_env, _array, data, JNI_FALSE);
    490     }
    491     if (_exception) {
    492         jniThrowException(_env, _exceptionType, _exceptionMessage);
    493     }
    494 }
    495 
    496 /* void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data ) */
    497 static void
    498 android_glBufferSubData__IIILjava_nio_Buffer_2
    499   (JNIEnv *_env, jobject _this, jint target, jint offset, jint size, jobject data_buf) {
    500     jint _exception = 0;
    501     const char * _exceptionType = NULL;
    502     const char * _exceptionMessage = NULL;
    503     jarray _array = (jarray) 0;
    504     jint _bufferOffset = (jint) 0;
    505     jint _remaining;
    506     GLvoid *data = (GLvoid *) 0;
    507 
    508     data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    509     if (_remaining < size) {
    510         _exception = 1;
    511         _exceptionType = "java/lang/IllegalArgumentException";
    512         _exceptionMessage = "remaining() < size < needed";
    513         goto exit;
    514     }
    515     if (data == NULL) {
    516         char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
    517         data = (GLvoid *) (_dataBase + _bufferOffset);
    518     }
    519     glBufferSubData(
    520         (GLenum)target,
    521         (GLintptr)offset,
    522         (GLsizeiptr)size,
    523         (GLvoid *)data
    524     );
    525 
    526 exit:
    527     if (_array) {
    528         releasePointer(_env, _array, data, JNI_FALSE);
    529     }
    530     if (_exception) {
    531         jniThrowException(_env, _exceptionType, _exceptionMessage);
    532     }
    533 }
    534 
    535 /* void glClipPlanef ( GLenum plane, const GLfloat *equation ) */
    536 static void
    537 android_glClipPlanef__I_3FI
    538   (JNIEnv *_env, jobject _this, jint plane, jfloatArray equation_ref, jint offset) {
    539     jint _exception = 0;
    540     const char * _exceptionType = NULL;
    541     const char * _exceptionMessage = NULL;
    542     GLfloat *equation_base = (GLfloat *) 0;
    543     jint _remaining;
    544     GLfloat *equation = (GLfloat *) 0;
    545 
    546     if (!equation_ref) {
    547         _exception = 1;
    548         _exceptionType = "java/lang/IllegalArgumentException";
    549         _exceptionMessage = "equation == null";
    550         goto exit;
    551     }
    552     if (offset < 0) {
    553         _exception = 1;
    554         _exceptionType = "java/lang/IllegalArgumentException";
    555         _exceptionMessage = "offset < 0";
    556         goto exit;
    557     }
    558     _remaining = _env->GetArrayLength(equation_ref) - offset;
    559     equation_base = (GLfloat *)
    560         _env->GetFloatArrayElements(equation_ref, (jboolean *)0);
    561     equation = equation_base + offset;
    562 
    563     glClipPlanef(
    564         (GLenum)plane,
    565         (GLfloat *)equation
    566     );
    567 
    568 exit:
    569     if (equation_base) {
    570         _env->ReleaseFloatArrayElements(equation_ref, (jfloat*)equation_base,
    571             JNI_ABORT);
    572     }
    573     if (_exception) {
    574         jniThrowException(_env, _exceptionType, _exceptionMessage);
    575     }
    576 }
    577 
    578 /* void glClipPlanef ( GLenum plane, const GLfloat *equation ) */
    579 static void
    580 android_glClipPlanef__ILjava_nio_FloatBuffer_2
    581   (JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
    582     jint _exception = 0;
    583     const char * _exceptionType = NULL;
    584     const char * _exceptionMessage = NULL;
    585     jfloatArray _array = (jfloatArray) 0;
    586     jint _bufferOffset = (jint) 0;
    587     jint _remaining;
    588     GLfloat *equation = (GLfloat *) 0;
    589 
    590     equation = (GLfloat *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    591     if (equation == NULL) {
    592         char * _equationBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
    593         equation = (GLfloat *) (_equationBase + _bufferOffset);
    594     }
    595     glClipPlanef(
    596         (GLenum)plane,
    597         (GLfloat *)equation
    598     );
    599     if (_array) {
    600         _env->ReleaseFloatArrayElements(_array, (jfloat*)equation, JNI_ABORT);
    601     }
    602     if (_exception) {
    603         jniThrowException(_env, _exceptionType, _exceptionMessage);
    604     }
    605 }
    606 
    607 /* void glClipPlanex ( GLenum plane, const GLfixed *equation ) */
    608 static void
    609 android_glClipPlanex__I_3II
    610   (JNIEnv *_env, jobject _this, jint plane, jintArray equation_ref, jint offset) {
    611     jint _exception = 0;
    612     const char * _exceptionType = NULL;
    613     const char * _exceptionMessage = NULL;
    614     GLfixed *equation_base = (GLfixed *) 0;
    615     jint _remaining;
    616     GLfixed *equation = (GLfixed *) 0;
    617 
    618     if (!equation_ref) {
    619         _exception = 1;
    620         _exceptionType = "java/lang/IllegalArgumentException";
    621         _exceptionMessage = "equation == null";
    622         goto exit;
    623     }
    624     if (offset < 0) {
    625         _exception = 1;
    626         _exceptionType = "java/lang/IllegalArgumentException";
    627         _exceptionMessage = "offset < 0";
    628         goto exit;
    629     }
    630     _remaining = _env->GetArrayLength(equation_ref) - offset;
    631     equation_base = (GLfixed *)
    632         _env->GetIntArrayElements(equation_ref, (jboolean *)0);
    633     equation = equation_base + offset;
    634 
    635     glClipPlanex(
    636         (GLenum)plane,
    637         (GLfixed *)equation
    638     );
    639 
    640 exit:
    641     if (equation_base) {
    642         _env->ReleaseIntArrayElements(equation_ref, (jint*)equation_base,
    643             JNI_ABORT);
    644     }
    645     if (_exception) {
    646         jniThrowException(_env, _exceptionType, _exceptionMessage);
    647     }
    648 }
    649 
    650 /* void glClipPlanex ( GLenum plane, const GLfixed *equation ) */
    651 static void
    652 android_glClipPlanex__ILjava_nio_IntBuffer_2
    653   (JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
    654     jint _exception = 0;
    655     const char * _exceptionType = NULL;
    656     const char * _exceptionMessage = NULL;
    657     jintArray _array = (jintArray) 0;
    658     jint _bufferOffset = (jint) 0;
    659     jint _remaining;
    660     GLfixed *equation = (GLfixed *) 0;
    661 
    662     equation = (GLfixed *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    663     if (equation == NULL) {
    664         char * _equationBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    665         equation = (GLfixed *) (_equationBase + _bufferOffset);
    666     }
    667     glClipPlanex(
    668         (GLenum)plane,
    669         (GLfixed *)equation
    670     );
    671     if (_array) {
    672         _env->ReleaseIntArrayElements(_array, (jint*)equation, JNI_ABORT);
    673     }
    674     if (_exception) {
    675         jniThrowException(_env, _exceptionType, _exceptionMessage);
    676     }
    677 }
    678 
    679 /* void glColor4ub ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ) */
    680 static void
    681 android_glColor4ub__BBBB
    682   (JNIEnv *_env, jobject _this, jbyte red, jbyte green, jbyte blue, jbyte alpha) {
    683     glColor4ub(
    684         (GLubyte)red,
    685         (GLubyte)green,
    686         (GLubyte)blue,
    687         (GLubyte)alpha
    688     );
    689 }
    690 
    691 /* void glColorPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
    692 static void
    693 android_glColorPointer__IIII
    694   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
    695     glColorPointer(
    696         (GLint)size,
    697         (GLenum)type,
    698         (GLsizei)stride,
    699         reinterpret_cast<GLvoid *>(offset)
    700     );
    701 }
    702 
    703 /* void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) */
    704 static void
    705 android_glDeleteBuffers__I_3II
    706   (JNIEnv *_env, jobject _this, jint n, jintArray buffers_ref, jint offset) {
    707     jint _exception = 0;
    708     const char * _exceptionType = NULL;
    709     const char * _exceptionMessage = NULL;
    710     GLuint *buffers_base = (GLuint *) 0;
    711     jint _remaining;
    712     GLuint *buffers = (GLuint *) 0;
    713 
    714     if (!buffers_ref) {
    715         _exception = 1;
    716         _exceptionType = "java/lang/IllegalArgumentException";
    717         _exceptionMessage = "buffers == null";
    718         goto exit;
    719     }
    720     if (offset < 0) {
    721         _exception = 1;
    722         _exceptionType = "java/lang/IllegalArgumentException";
    723         _exceptionMessage = "offset < 0";
    724         goto exit;
    725     }
    726     _remaining = _env->GetArrayLength(buffers_ref) - offset;
    727     if (_remaining < n) {
    728         _exception = 1;
    729         _exceptionType = "java/lang/IllegalArgumentException";
    730         _exceptionMessage = "length - offset < n < needed";
    731         goto exit;
    732     }
    733     buffers_base = (GLuint *)
    734         _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
    735     buffers = buffers_base + offset;
    736 
    737     glDeleteBuffers(
    738         (GLsizei)n,
    739         (GLuint *)buffers
    740     );
    741 
    742 exit:
    743     if (buffers_base) {
    744         _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
    745             JNI_ABORT);
    746     }
    747     if (_exception) {
    748         jniThrowException(_env, _exceptionType, _exceptionMessage);
    749     }
    750 }
    751 
    752 /* void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) */
    753 static void
    754 android_glDeleteBuffers__ILjava_nio_IntBuffer_2
    755   (JNIEnv *_env, jobject _this, jint n, jobject buffers_buf) {
    756     jint _exception = 0;
    757     const char * _exceptionType = NULL;
    758     const char * _exceptionMessage = NULL;
    759     jintArray _array = (jintArray) 0;
    760     jint _bufferOffset = (jint) 0;
    761     jint _remaining;
    762     GLuint *buffers = (GLuint *) 0;
    763 
    764     buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    765     if (_remaining < n) {
    766         _exception = 1;
    767         _exceptionType = "java/lang/IllegalArgumentException";
    768         _exceptionMessage = "remaining() < n < needed";
    769         goto exit;
    770     }
    771     if (buffers == NULL) {
    772         char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    773         buffers = (GLuint *) (_buffersBase + _bufferOffset);
    774     }
    775     glDeleteBuffers(
    776         (GLsizei)n,
    777         (GLuint *)buffers
    778     );
    779 
    780 exit:
    781     if (_array) {
    782         _env->ReleaseIntArrayElements(_array, (jint*)buffers, JNI_ABORT);
    783     }
    784     if (_exception) {
    785         jniThrowException(_env, _exceptionType, _exceptionMessage);
    786     }
    787 }
    788 
    789 /* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, GLint offset ) */
    790 static void
    791 android_glDrawElements__IIII
    792   (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint offset) {
    793     jint _exception = 0;
    794     const char * _exceptionType = NULL;
    795     const char * _exceptionMessage = NULL;
    796     glDrawElements(
    797         (GLenum)mode,
    798         (GLsizei)count,
    799         (GLenum)type,
    800         reinterpret_cast<GLvoid *>(offset)
    801     );
    802     if (_exception) {
    803         jniThrowException(_env, _exceptionType, _exceptionMessage);
    804     }
    805 }
    806 
    807 /* void glGenBuffers ( GLsizei n, GLuint *buffers ) */
    808 static void
    809 android_glGenBuffers__I_3II
    810   (JNIEnv *_env, jobject _this, jint n, jintArray buffers_ref, jint offset) {
    811     jint _exception = 0;
    812     const char * _exceptionType = NULL;
    813     const char * _exceptionMessage = NULL;
    814     GLuint *buffers_base = (GLuint *) 0;
    815     jint _remaining;
    816     GLuint *buffers = (GLuint *) 0;
    817 
    818     if (!buffers_ref) {
    819         _exception = 1;
    820         _exceptionType = "java/lang/IllegalArgumentException";
    821         _exceptionMessage = "buffers == null";
    822         goto exit;
    823     }
    824     if (offset < 0) {
    825         _exception = 1;
    826         _exceptionType = "java/lang/IllegalArgumentException";
    827         _exceptionMessage = "offset < 0";
    828         goto exit;
    829     }
    830     _remaining = _env->GetArrayLength(buffers_ref) - offset;
    831     if (_remaining < n) {
    832         _exception = 1;
    833         _exceptionType = "java/lang/IllegalArgumentException";
    834         _exceptionMessage = "length - offset < n < needed";
    835         goto exit;
    836     }
    837     buffers_base = (GLuint *)
    838         _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
    839     buffers = buffers_base + offset;
    840 
    841     glGenBuffers(
    842         (GLsizei)n,
    843         (GLuint *)buffers
    844     );
    845 
    846 exit:
    847     if (buffers_base) {
    848         _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
    849             _exception ? JNI_ABORT: 0);
    850     }
    851     if (_exception) {
    852         jniThrowException(_env, _exceptionType, _exceptionMessage);
    853     }
    854 }
    855 
    856 /* void glGenBuffers ( GLsizei n, GLuint *buffers ) */
    857 static void
    858 android_glGenBuffers__ILjava_nio_IntBuffer_2
    859   (JNIEnv *_env, jobject _this, jint n, jobject buffers_buf) {
    860     jint _exception = 0;
    861     const char * _exceptionType = NULL;
    862     const char * _exceptionMessage = NULL;
    863     jintArray _array = (jintArray) 0;
    864     jint _bufferOffset = (jint) 0;
    865     jint _remaining;
    866     GLuint *buffers = (GLuint *) 0;
    867 
    868     buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    869     if (_remaining < n) {
    870         _exception = 1;
    871         _exceptionType = "java/lang/IllegalArgumentException";
    872         _exceptionMessage = "remaining() < n < needed";
    873         goto exit;
    874     }
    875     if (buffers == NULL) {
    876         char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    877         buffers = (GLuint *) (_buffersBase + _bufferOffset);
    878     }
    879     glGenBuffers(
    880         (GLsizei)n,
    881         (GLuint *)buffers
    882     );
    883 
    884 exit:
    885     if (_array) {
    886         _env->ReleaseIntArrayElements(_array, (jint*)buffers, _exception ? JNI_ABORT : 0);
    887     }
    888     if (_exception) {
    889         jniThrowException(_env, _exceptionType, _exceptionMessage);
    890     }
    891 }
    892 
    893 /* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
    894 static void
    895 android_glGetBooleanv__I_3ZI
    896   (JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
    897     get<jbooleanArray, BooleanArrayGetter, jboolean*, BooleanArrayReleaser, GLboolean, glGetBooleanv>(
    898         _env, _this, pname, params_ref, offset);
    899 }
    900 
    901 /* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
    902 static void
    903 android_glGetBooleanv__ILjava_nio_IntBuffer_2
    904   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
    905     getarray<GLboolean, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetBooleanv>(
    906         _env, _this, pname, params_buf);
    907 }
    908 /* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
    909 static void
    910 android_glGetBufferParameteriv__II_3II
    911   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
    912     jint _exception = 0;
    913     const char * _exceptionType = NULL;
    914     const char * _exceptionMessage = NULL;
    915     GLint *params_base = (GLint *) 0;
    916     jint _remaining;
    917     GLint *params = (GLint *) 0;
    918 
    919     if (!params_ref) {
    920         _exception = 1;
    921         _exceptionType = "java/lang/IllegalArgumentException";
    922         _exceptionMessage = "params == null";
    923         goto exit;
    924     }
    925     if (offset < 0) {
    926         _exception = 1;
    927         _exceptionType = "java/lang/IllegalArgumentException";
    928         _exceptionMessage = "offset < 0";
    929         goto exit;
    930     }
    931     _remaining = _env->GetArrayLength(params_ref) - offset;
    932     if (_remaining < 1) {
    933         _exception = 1;
    934         _exceptionType = "java/lang/IllegalArgumentException";
    935         _exceptionMessage = "length - offset < 1 < needed";
    936         goto exit;
    937     }
    938     params_base = (GLint *)
    939         _env->GetIntArrayElements(params_ref, (jboolean *)0);
    940     params = params_base + offset;
    941 
    942     glGetBufferParameteriv(
    943         (GLenum)target,
    944         (GLenum)pname,
    945         (GLint *)params
    946     );
    947 
    948 exit:
    949     if (params_base) {
    950         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
    951             _exception ? JNI_ABORT: 0);
    952     }
    953     if (_exception) {
    954         jniThrowException(_env, _exceptionType, _exceptionMessage);
    955     }
    956 }
    957 
    958 /* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
    959 static void
    960 android_glGetBufferParameteriv__IILjava_nio_IntBuffer_2
    961   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
    962     jint _exception = 0;
    963     const char * _exceptionType = NULL;
    964     const char * _exceptionMessage = NULL;
    965     jintArray _array = (jintArray) 0;
    966     jint _bufferOffset = (jint) 0;
    967     jint _remaining;
    968     GLint *params = (GLint *) 0;
    969 
    970     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    971     if (_remaining < 1) {
    972         _exception = 1;
    973         _exceptionType = "java/lang/IllegalArgumentException";
    974         _exceptionMessage = "remaining() < 1 < needed";
    975         goto exit;
    976     }
    977     if (params == NULL) {
    978         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    979         params = (GLint *) (_paramsBase + _bufferOffset);
    980     }
    981     glGetBufferParameteriv(
    982         (GLenum)target,
    983         (GLenum)pname,
    984         (GLint *)params
    985     );
    986 
    987 exit:
    988     if (_array) {
    989         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
    990     }
    991     if (_exception) {
    992         jniThrowException(_env, _exceptionType, _exceptionMessage);
    993     }
    994 }
    995 
    996 /* void glGetClipPlanef ( GLenum pname, GLfloat *eqn ) */
    997 static void
    998 android_glGetClipPlanef__I_3FI
    999   (JNIEnv *_env, jobject _this, jint pname, jfloatArray eqn_ref, jint offset) {
   1000     jint _exception = 0;
   1001     const char * _exceptionType = NULL;
   1002     const char * _exceptionMessage = NULL;
   1003     GLfloat *eqn_base = (GLfloat *) 0;
   1004     jint _remaining;
   1005     GLfloat *eqn = (GLfloat *) 0;
   1006 
   1007     if (!eqn_ref) {
   1008         _exception = 1;
   1009         _exceptionType = "java/lang/IllegalArgumentException";
   1010         _exceptionMessage = "eqn == null";
   1011         goto exit;
   1012     }
   1013     if (offset < 0) {
   1014         _exception = 1;
   1015         _exceptionType = "java/lang/IllegalArgumentException";
   1016         _exceptionMessage = "offset < 0";
   1017         goto exit;
   1018     }
   1019     _remaining = _env->GetArrayLength(eqn_ref) - offset;
   1020     if (_remaining < 4) {
   1021         _exception = 1;
   1022         _exceptionType = "java/lang/IllegalArgumentException";
   1023         _exceptionMessage = "length - offset < 4 < needed";
   1024         goto exit;
   1025     }
   1026     eqn_base = (GLfloat *)
   1027         _env->GetFloatArrayElements(eqn_ref, (jboolean *)0);
   1028     eqn = eqn_base + offset;
   1029 
   1030     glGetClipPlanef(
   1031         (GLenum)pname,
   1032         (GLfloat *)eqn
   1033     );
   1034 
   1035 exit:
   1036     if (eqn_base) {
   1037         _env->ReleaseFloatArrayElements(eqn_ref, (jfloat*)eqn_base,
   1038             _exception ? JNI_ABORT: 0);
   1039     }
   1040     if (_exception) {
   1041         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1042     }
   1043 }
   1044 
   1045 /* void glGetClipPlanef ( GLenum pname, GLfloat *eqn ) */
   1046 static void
   1047 android_glGetClipPlanef__ILjava_nio_FloatBuffer_2
   1048   (JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
   1049     jint _exception = 0;
   1050     const char * _exceptionType = NULL;
   1051     const char * _exceptionMessage = NULL;
   1052     jfloatArray _array = (jfloatArray) 0;
   1053     jint _bufferOffset = (jint) 0;
   1054     jint _remaining;
   1055     GLfloat *eqn = (GLfloat *) 0;
   1056 
   1057     eqn = (GLfloat *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1058     if (_remaining < 4) {
   1059         _exception = 1;
   1060         _exceptionType = "java/lang/IllegalArgumentException";
   1061         _exceptionMessage = "remaining() < 4 < needed";
   1062         goto exit;
   1063     }
   1064     if (eqn == NULL) {
   1065         char * _eqnBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1066         eqn = (GLfloat *) (_eqnBase + _bufferOffset);
   1067     }
   1068     glGetClipPlanef(
   1069         (GLenum)pname,
   1070         (GLfloat *)eqn
   1071     );
   1072 
   1073 exit:
   1074     if (_array) {
   1075         _env->ReleaseFloatArrayElements(_array, (jfloat*)eqn, _exception ? JNI_ABORT : 0);
   1076     }
   1077     if (_exception) {
   1078         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1079     }
   1080 }
   1081 
   1082 /* void glGetClipPlanex ( GLenum pname, GLfixed *eqn ) */
   1083 static void
   1084 android_glGetClipPlanex__I_3II
   1085   (JNIEnv *_env, jobject _this, jint pname, jintArray eqn_ref, jint offset) {
   1086     jint _exception = 0;
   1087     const char * _exceptionType = NULL;
   1088     const char * _exceptionMessage = NULL;
   1089     GLfixed *eqn_base = (GLfixed *) 0;
   1090     jint _remaining;
   1091     GLfixed *eqn = (GLfixed *) 0;
   1092 
   1093     if (!eqn_ref) {
   1094         _exception = 1;
   1095         _exceptionType = "java/lang/IllegalArgumentException";
   1096         _exceptionMessage = "eqn == null";
   1097         goto exit;
   1098     }
   1099     if (offset < 0) {
   1100         _exception = 1;
   1101         _exceptionType = "java/lang/IllegalArgumentException";
   1102         _exceptionMessage = "offset < 0";
   1103         goto exit;
   1104     }
   1105     _remaining = _env->GetArrayLength(eqn_ref) - offset;
   1106     if (_remaining < 4) {
   1107         _exception = 1;
   1108         _exceptionType = "java/lang/IllegalArgumentException";
   1109         _exceptionMessage = "length - offset < 4 < needed";
   1110         goto exit;
   1111     }
   1112     eqn_base = (GLfixed *)
   1113         _env->GetIntArrayElements(eqn_ref, (jboolean *)0);
   1114     eqn = eqn_base + offset;
   1115 
   1116     glGetClipPlanex(
   1117         (GLenum)pname,
   1118         (GLfixed *)eqn
   1119     );
   1120 
   1121 exit:
   1122     if (eqn_base) {
   1123         _env->ReleaseIntArrayElements(eqn_ref, (jint*)eqn_base,
   1124             _exception ? JNI_ABORT: 0);
   1125     }
   1126     if (_exception) {
   1127         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1128     }
   1129 }
   1130 
   1131 /* void glGetClipPlanex ( GLenum pname, GLfixed *eqn ) */
   1132 static void
   1133 android_glGetClipPlanex__ILjava_nio_IntBuffer_2
   1134   (JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
   1135     jint _exception = 0;
   1136     const char * _exceptionType = NULL;
   1137     const char * _exceptionMessage = NULL;
   1138     jintArray _array = (jintArray) 0;
   1139     jint _bufferOffset = (jint) 0;
   1140     jint _remaining;
   1141     GLfixed *eqn = (GLfixed *) 0;
   1142 
   1143     eqn = (GLfixed *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1144     if (_remaining < 4) {
   1145         _exception = 1;
   1146         _exceptionType = "java/lang/IllegalArgumentException";
   1147         _exceptionMessage = "remaining() < 4 < needed";
   1148         goto exit;
   1149     }
   1150     if (eqn == NULL) {
   1151         char * _eqnBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1152         eqn = (GLfixed *) (_eqnBase + _bufferOffset);
   1153     }
   1154     glGetClipPlanex(
   1155         (GLenum)pname,
   1156         (GLfixed *)eqn
   1157     );
   1158 
   1159 exit:
   1160     if (_array) {
   1161         _env->ReleaseIntArrayElements(_array, (jint*)eqn, _exception ? JNI_ABORT : 0);
   1162     }
   1163     if (_exception) {
   1164         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1165     }
   1166 }
   1167 
   1168 /* void glGetFixedv ( GLenum pname, GLfixed *params ) */
   1169 static void
   1170 android_glGetFixedv__I_3II
   1171   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   1172     jint _exception = 0;
   1173     const char * _exceptionType = NULL;
   1174     const char * _exceptionMessage = NULL;
   1175     GLfixed *params_base = (GLfixed *) 0;
   1176     jint _remaining;
   1177     GLfixed *params = (GLfixed *) 0;
   1178 
   1179     if (!params_ref) {
   1180         _exception = 1;
   1181         _exceptionType = "java/lang/IllegalArgumentException";
   1182         _exceptionMessage = "params == null";
   1183         goto exit;
   1184     }
   1185     if (offset < 0) {
   1186         _exception = 1;
   1187         _exceptionType = "java/lang/IllegalArgumentException";
   1188         _exceptionMessage = "offset < 0";
   1189         goto exit;
   1190     }
   1191     _remaining = _env->GetArrayLength(params_ref) - offset;
   1192     params_base = (GLfixed *)
   1193         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1194     params = params_base + offset;
   1195 
   1196     glGetFixedv(
   1197         (GLenum)pname,
   1198         (GLfixed *)params
   1199     );
   1200 
   1201 exit:
   1202     if (params_base) {
   1203         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1204             _exception ? JNI_ABORT: 0);
   1205     }
   1206     if (_exception) {
   1207         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1208     }
   1209 }
   1210 
   1211 /* void glGetFixedv ( GLenum pname, GLfixed *params ) */
   1212 static void
   1213 android_glGetFixedv__ILjava_nio_IntBuffer_2
   1214   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1215     jintArray _array = (jintArray) 0;
   1216     jint _bufferOffset = (jint) 0;
   1217     jint _remaining;
   1218     GLfixed *params = (GLfixed *) 0;
   1219 
   1220     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1221     if (params == NULL) {
   1222         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1223         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1224     }
   1225     glGetFixedv(
   1226         (GLenum)pname,
   1227         (GLfixed *)params
   1228     );
   1229     if (_array) {
   1230         _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
   1231     }
   1232 }
   1233 
   1234 /* void glGetFloatv ( GLenum pname, GLfloat *params ) */
   1235 static void
   1236 android_glGetFloatv__I_3FI
   1237   (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
   1238     get<jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, GLfloat, glGetFloatv>(
   1239         _env, _this, pname, params_ref, offset);
   1240 }
   1241 
   1242 /* void glGetFloatv ( GLenum pname, GLfloat *params ) */
   1243 static void
   1244 android_glGetFloatv__ILjava_nio_FloatBuffer_2
   1245   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   1246     getarray<GLfloat, jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, glGetFloatv>(
   1247         _env, _this, pname, params_buf);
   1248 }
   1249 /* void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) */
   1250 static void
   1251 android_glGetLightfv__II_3FI
   1252   (JNIEnv *_env, jobject _this, jint light, jint pname, jfloatArray params_ref, jint offset) {
   1253     jint _exception = 0;
   1254     const char * _exceptionType = NULL;
   1255     const char * _exceptionMessage = NULL;
   1256     GLfloat *params_base = (GLfloat *) 0;
   1257     jint _remaining;
   1258     GLfloat *params = (GLfloat *) 0;
   1259 
   1260     if (!params_ref) {
   1261         _exception = 1;
   1262         _exceptionType = "java/lang/IllegalArgumentException";
   1263         _exceptionMessage = "params == null";
   1264         goto exit;
   1265     }
   1266     if (offset < 0) {
   1267         _exception = 1;
   1268         _exceptionType = "java/lang/IllegalArgumentException";
   1269         _exceptionMessage = "offset < 0";
   1270         goto exit;
   1271     }
   1272     _remaining = _env->GetArrayLength(params_ref) - offset;
   1273     int _needed;
   1274     switch (pname) {
   1275 #if defined(GL_SPOT_DIRECTION)
   1276         case GL_SPOT_DIRECTION:
   1277 #endif // defined(GL_SPOT_DIRECTION)
   1278             _needed = 3;
   1279             break;
   1280 #if defined(GL_AMBIENT)
   1281         case GL_AMBIENT:
   1282 #endif // defined(GL_AMBIENT)
   1283 #if defined(GL_DIFFUSE)
   1284         case GL_DIFFUSE:
   1285 #endif // defined(GL_DIFFUSE)
   1286 #if defined(GL_SPECULAR)
   1287         case GL_SPECULAR:
   1288 #endif // defined(GL_SPECULAR)
   1289 #if defined(GL_EMISSION)
   1290         case GL_EMISSION:
   1291 #endif // defined(GL_EMISSION)
   1292             _needed = 4;
   1293             break;
   1294         default:
   1295             _needed = 1;
   1296             break;
   1297     }
   1298     if (_remaining < _needed) {
   1299         _exception = 1;
   1300         _exceptionType = "java/lang/IllegalArgumentException";
   1301         _exceptionMessage = "length - offset < needed";
   1302         goto exit;
   1303     }
   1304     params_base = (GLfloat *)
   1305         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1306     params = params_base + offset;
   1307 
   1308     glGetLightfv(
   1309         (GLenum)light,
   1310         (GLenum)pname,
   1311         (GLfloat *)params
   1312     );
   1313 
   1314 exit:
   1315     if (params_base) {
   1316         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1317             _exception ? JNI_ABORT: 0);
   1318     }
   1319     if (_exception) {
   1320         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1321     }
   1322 }
   1323 
   1324 /* void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) */
   1325 static void
   1326 android_glGetLightfv__IILjava_nio_FloatBuffer_2
   1327   (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
   1328     jint _exception = 0;
   1329     const char * _exceptionType = NULL;
   1330     const char * _exceptionMessage = NULL;
   1331     jfloatArray _array = (jfloatArray) 0;
   1332     jint _bufferOffset = (jint) 0;
   1333     jint _remaining;
   1334     GLfloat *params = (GLfloat *) 0;
   1335 
   1336     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1337     int _needed;
   1338     switch (pname) {
   1339 #if defined(GL_SPOT_DIRECTION)
   1340         case GL_SPOT_DIRECTION:
   1341 #endif // defined(GL_SPOT_DIRECTION)
   1342             _needed = 3;
   1343             break;
   1344 #if defined(GL_AMBIENT)
   1345         case GL_AMBIENT:
   1346 #endif // defined(GL_AMBIENT)
   1347 #if defined(GL_DIFFUSE)
   1348         case GL_DIFFUSE:
   1349 #endif // defined(GL_DIFFUSE)
   1350 #if defined(GL_SPECULAR)
   1351         case GL_SPECULAR:
   1352 #endif // defined(GL_SPECULAR)
   1353 #if defined(GL_EMISSION)
   1354         case GL_EMISSION:
   1355 #endif // defined(GL_EMISSION)
   1356             _needed = 4;
   1357             break;
   1358         default:
   1359             _needed = 1;
   1360             break;
   1361     }
   1362     if (_remaining < _needed) {
   1363         _exception = 1;
   1364         _exceptionType = "java/lang/IllegalArgumentException";
   1365         _exceptionMessage = "remaining() < needed";
   1366         goto exit;
   1367     }
   1368     if (params == NULL) {
   1369         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1370         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1371     }
   1372     glGetLightfv(
   1373         (GLenum)light,
   1374         (GLenum)pname,
   1375         (GLfloat *)params
   1376     );
   1377 
   1378 exit:
   1379     if (_array) {
   1380         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
   1381     }
   1382     if (_exception) {
   1383         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1384     }
   1385 }
   1386 
   1387 /* void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params ) */
   1388 static void
   1389 android_glGetLightxv__II_3II
   1390   (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
   1391     jint _exception = 0;
   1392     const char * _exceptionType = NULL;
   1393     const char * _exceptionMessage = NULL;
   1394     GLfixed *params_base = (GLfixed *) 0;
   1395     jint _remaining;
   1396     GLfixed *params = (GLfixed *) 0;
   1397 
   1398     if (!params_ref) {
   1399         _exception = 1;
   1400         _exceptionType = "java/lang/IllegalArgumentException";
   1401         _exceptionMessage = "params == null";
   1402         goto exit;
   1403     }
   1404     if (offset < 0) {
   1405         _exception = 1;
   1406         _exceptionType = "java/lang/IllegalArgumentException";
   1407         _exceptionMessage = "offset < 0";
   1408         goto exit;
   1409     }
   1410     _remaining = _env->GetArrayLength(params_ref) - offset;
   1411     int _needed;
   1412     switch (pname) {
   1413 #if defined(GL_SPOT_DIRECTION)
   1414         case GL_SPOT_DIRECTION:
   1415 #endif // defined(GL_SPOT_DIRECTION)
   1416             _needed = 3;
   1417             break;
   1418 #if defined(GL_AMBIENT)
   1419         case GL_AMBIENT:
   1420 #endif // defined(GL_AMBIENT)
   1421 #if defined(GL_DIFFUSE)
   1422         case GL_DIFFUSE:
   1423 #endif // defined(GL_DIFFUSE)
   1424 #if defined(GL_SPECULAR)
   1425         case GL_SPECULAR:
   1426 #endif // defined(GL_SPECULAR)
   1427 #if defined(GL_EMISSION)
   1428         case GL_EMISSION:
   1429 #endif // defined(GL_EMISSION)
   1430             _needed = 4;
   1431             break;
   1432         default:
   1433             _needed = 1;
   1434             break;
   1435     }
   1436     if (_remaining < _needed) {
   1437         _exception = 1;
   1438         _exceptionType = "java/lang/IllegalArgumentException";
   1439         _exceptionMessage = "length - offset < needed";
   1440         goto exit;
   1441     }
   1442     params_base = (GLfixed *)
   1443         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1444     params = params_base + offset;
   1445 
   1446     glGetLightxv(
   1447         (GLenum)light,
   1448         (GLenum)pname,
   1449         (GLfixed *)params
   1450     );
   1451 
   1452 exit:
   1453     if (params_base) {
   1454         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1455             _exception ? JNI_ABORT: 0);
   1456     }
   1457     if (_exception) {
   1458         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1459     }
   1460 }
   1461 
   1462 /* void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params ) */
   1463 static void
   1464 android_glGetLightxv__IILjava_nio_IntBuffer_2
   1465   (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
   1466     jint _exception = 0;
   1467     const char * _exceptionType = NULL;
   1468     const char * _exceptionMessage = NULL;
   1469     jintArray _array = (jintArray) 0;
   1470     jint _bufferOffset = (jint) 0;
   1471     jint _remaining;
   1472     GLfixed *params = (GLfixed *) 0;
   1473 
   1474     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1475     int _needed;
   1476     switch (pname) {
   1477 #if defined(GL_SPOT_DIRECTION)
   1478         case GL_SPOT_DIRECTION:
   1479 #endif // defined(GL_SPOT_DIRECTION)
   1480             _needed = 3;
   1481             break;
   1482 #if defined(GL_AMBIENT)
   1483         case GL_AMBIENT:
   1484 #endif // defined(GL_AMBIENT)
   1485 #if defined(GL_DIFFUSE)
   1486         case GL_DIFFUSE:
   1487 #endif // defined(GL_DIFFUSE)
   1488 #if defined(GL_SPECULAR)
   1489         case GL_SPECULAR:
   1490 #endif // defined(GL_SPECULAR)
   1491 #if defined(GL_EMISSION)
   1492         case GL_EMISSION:
   1493 #endif // defined(GL_EMISSION)
   1494             _needed = 4;
   1495             break;
   1496         default:
   1497             _needed = 1;
   1498             break;
   1499     }
   1500     if (_remaining < _needed) {
   1501         _exception = 1;
   1502         _exceptionType = "java/lang/IllegalArgumentException";
   1503         _exceptionMessage = "remaining() < needed";
   1504         goto exit;
   1505     }
   1506     if (params == NULL) {
   1507         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1508         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1509     }
   1510     glGetLightxv(
   1511         (GLenum)light,
   1512         (GLenum)pname,
   1513         (GLfixed *)params
   1514     );
   1515 
   1516 exit:
   1517     if (_array) {
   1518         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   1519     }
   1520     if (_exception) {
   1521         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1522     }
   1523 }
   1524 
   1525 /* void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params ) */
   1526 static void
   1527 android_glGetMaterialfv__II_3FI
   1528   (JNIEnv *_env, jobject _this, jint face, jint pname, jfloatArray params_ref, jint offset) {
   1529     jint _exception = 0;
   1530     const char * _exceptionType = NULL;
   1531     const char * _exceptionMessage = NULL;
   1532     GLfloat *params_base = (GLfloat *) 0;
   1533     jint _remaining;
   1534     GLfloat *params = (GLfloat *) 0;
   1535 
   1536     if (!params_ref) {
   1537         _exception = 1;
   1538         _exceptionType = "java/lang/IllegalArgumentException";
   1539         _exceptionMessage = "params == null";
   1540         goto exit;
   1541     }
   1542     if (offset < 0) {
   1543         _exception = 1;
   1544         _exceptionType = "java/lang/IllegalArgumentException";
   1545         _exceptionMessage = "offset < 0";
   1546         goto exit;
   1547     }
   1548     _remaining = _env->GetArrayLength(params_ref) - offset;
   1549     int _needed;
   1550     switch (pname) {
   1551 #if defined(GL_AMBIENT)
   1552         case GL_AMBIENT:
   1553 #endif // defined(GL_AMBIENT)
   1554 #if defined(GL_DIFFUSE)
   1555         case GL_DIFFUSE:
   1556 #endif // defined(GL_DIFFUSE)
   1557 #if defined(GL_SPECULAR)
   1558         case GL_SPECULAR:
   1559 #endif // defined(GL_SPECULAR)
   1560 #if defined(GL_EMISSION)
   1561         case GL_EMISSION:
   1562 #endif // defined(GL_EMISSION)
   1563 #if defined(GL_AMBIENT_AND_DIFFUSE)
   1564         case GL_AMBIENT_AND_DIFFUSE:
   1565 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   1566             _needed = 4;
   1567             break;
   1568         default:
   1569             _needed = 1;
   1570             break;
   1571     }
   1572     if (_remaining < _needed) {
   1573         _exception = 1;
   1574         _exceptionType = "java/lang/IllegalArgumentException";
   1575         _exceptionMessage = "length - offset < needed";
   1576         goto exit;
   1577     }
   1578     params_base = (GLfloat *)
   1579         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1580     params = params_base + offset;
   1581 
   1582     glGetMaterialfv(
   1583         (GLenum)face,
   1584         (GLenum)pname,
   1585         (GLfloat *)params
   1586     );
   1587 
   1588 exit:
   1589     if (params_base) {
   1590         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1591             _exception ? JNI_ABORT: 0);
   1592     }
   1593     if (_exception) {
   1594         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1595     }
   1596 }
   1597 
   1598 /* void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params ) */
   1599 static void
   1600 android_glGetMaterialfv__IILjava_nio_FloatBuffer_2
   1601   (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
   1602     jint _exception = 0;
   1603     const char * _exceptionType = NULL;
   1604     const char * _exceptionMessage = NULL;
   1605     jfloatArray _array = (jfloatArray) 0;
   1606     jint _bufferOffset = (jint) 0;
   1607     jint _remaining;
   1608     GLfloat *params = (GLfloat *) 0;
   1609 
   1610     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1611     int _needed;
   1612     switch (pname) {
   1613 #if defined(GL_AMBIENT)
   1614         case GL_AMBIENT:
   1615 #endif // defined(GL_AMBIENT)
   1616 #if defined(GL_DIFFUSE)
   1617         case GL_DIFFUSE:
   1618 #endif // defined(GL_DIFFUSE)
   1619 #if defined(GL_SPECULAR)
   1620         case GL_SPECULAR:
   1621 #endif // defined(GL_SPECULAR)
   1622 #if defined(GL_EMISSION)
   1623         case GL_EMISSION:
   1624 #endif // defined(GL_EMISSION)
   1625 #if defined(GL_AMBIENT_AND_DIFFUSE)
   1626         case GL_AMBIENT_AND_DIFFUSE:
   1627 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   1628             _needed = 4;
   1629             break;
   1630         default:
   1631             _needed = 1;
   1632             break;
   1633     }
   1634     if (_remaining < _needed) {
   1635         _exception = 1;
   1636         _exceptionType = "java/lang/IllegalArgumentException";
   1637         _exceptionMessage = "remaining() < needed";
   1638         goto exit;
   1639     }
   1640     if (params == NULL) {
   1641         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1642         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1643     }
   1644     glGetMaterialfv(
   1645         (GLenum)face,
   1646         (GLenum)pname,
   1647         (GLfloat *)params
   1648     );
   1649 
   1650 exit:
   1651     if (_array) {
   1652         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
   1653     }
   1654     if (_exception) {
   1655         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1656     }
   1657 }
   1658 
   1659 /* void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params ) */
   1660 static void
   1661 android_glGetMaterialxv__II_3II
   1662   (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
   1663     jint _exception = 0;
   1664     const char * _exceptionType = NULL;
   1665     const char * _exceptionMessage = NULL;
   1666     GLfixed *params_base = (GLfixed *) 0;
   1667     jint _remaining;
   1668     GLfixed *params = (GLfixed *) 0;
   1669 
   1670     if (!params_ref) {
   1671         _exception = 1;
   1672         _exceptionType = "java/lang/IllegalArgumentException";
   1673         _exceptionMessage = "params == null";
   1674         goto exit;
   1675     }
   1676     if (offset < 0) {
   1677         _exception = 1;
   1678         _exceptionType = "java/lang/IllegalArgumentException";
   1679         _exceptionMessage = "offset < 0";
   1680         goto exit;
   1681     }
   1682     _remaining = _env->GetArrayLength(params_ref) - offset;
   1683     int _needed;
   1684     switch (pname) {
   1685 #if defined(GL_AMBIENT)
   1686         case GL_AMBIENT:
   1687 #endif // defined(GL_AMBIENT)
   1688 #if defined(GL_DIFFUSE)
   1689         case GL_DIFFUSE:
   1690 #endif // defined(GL_DIFFUSE)
   1691 #if defined(GL_SPECULAR)
   1692         case GL_SPECULAR:
   1693 #endif // defined(GL_SPECULAR)
   1694 #if defined(GL_EMISSION)
   1695         case GL_EMISSION:
   1696 #endif // defined(GL_EMISSION)
   1697 #if defined(GL_AMBIENT_AND_DIFFUSE)
   1698         case GL_AMBIENT_AND_DIFFUSE:
   1699 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   1700             _needed = 4;
   1701             break;
   1702         default:
   1703             _needed = 1;
   1704             break;
   1705     }
   1706     if (_remaining < _needed) {
   1707         _exception = 1;
   1708         _exceptionType = "java/lang/IllegalArgumentException";
   1709         _exceptionMessage = "length - offset < needed";
   1710         goto exit;
   1711     }
   1712     params_base = (GLfixed *)
   1713         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1714     params = params_base + offset;
   1715 
   1716     glGetMaterialxv(
   1717         (GLenum)face,
   1718         (GLenum)pname,
   1719         (GLfixed *)params
   1720     );
   1721 
   1722 exit:
   1723     if (params_base) {
   1724         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1725             _exception ? JNI_ABORT: 0);
   1726     }
   1727     if (_exception) {
   1728         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1729     }
   1730 }
   1731 
   1732 /* void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params ) */
   1733 static void
   1734 android_glGetMaterialxv__IILjava_nio_IntBuffer_2
   1735   (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
   1736     jint _exception = 0;
   1737     const char * _exceptionType = NULL;
   1738     const char * _exceptionMessage = NULL;
   1739     jintArray _array = (jintArray) 0;
   1740     jint _bufferOffset = (jint) 0;
   1741     jint _remaining;
   1742     GLfixed *params = (GLfixed *) 0;
   1743 
   1744     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1745     int _needed;
   1746     switch (pname) {
   1747 #if defined(GL_AMBIENT)
   1748         case GL_AMBIENT:
   1749 #endif // defined(GL_AMBIENT)
   1750 #if defined(GL_DIFFUSE)
   1751         case GL_DIFFUSE:
   1752 #endif // defined(GL_DIFFUSE)
   1753 #if defined(GL_SPECULAR)
   1754         case GL_SPECULAR:
   1755 #endif // defined(GL_SPECULAR)
   1756 #if defined(GL_EMISSION)
   1757         case GL_EMISSION:
   1758 #endif // defined(GL_EMISSION)
   1759 #if defined(GL_AMBIENT_AND_DIFFUSE)
   1760         case GL_AMBIENT_AND_DIFFUSE:
   1761 #endif // defined(GL_AMBIENT_AND_DIFFUSE)
   1762             _needed = 4;
   1763             break;
   1764         default:
   1765             _needed = 1;
   1766             break;
   1767     }
   1768     if (_remaining < _needed) {
   1769         _exception = 1;
   1770         _exceptionType = "java/lang/IllegalArgumentException";
   1771         _exceptionMessage = "remaining() < needed";
   1772         goto exit;
   1773     }
   1774     if (params == NULL) {
   1775         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1776         params = (GLfixed *) (_paramsBase + _bufferOffset);
   1777     }
   1778     glGetMaterialxv(
   1779         (GLenum)face,
   1780         (GLenum)pname,
   1781         (GLfixed *)params
   1782     );
   1783 
   1784 exit:
   1785     if (_array) {
   1786         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   1787     }
   1788     if (_exception) {
   1789         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1790     }
   1791 }
   1792 
   1793 /* void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params ) */
   1794 static void
   1795 android_glGetTexEnvfv__II_3FI
   1796   (JNIEnv *_env, jobject _this, jint env, jint pname, jfloatArray params_ref, jint offset) {
   1797     jint _exception = 0;
   1798     const char * _exceptionType = NULL;
   1799     const char * _exceptionMessage = NULL;
   1800     GLfloat *params_base = (GLfloat *) 0;
   1801     jint _remaining;
   1802     GLfloat *params = (GLfloat *) 0;
   1803 
   1804     if (!params_ref) {
   1805         _exception = 1;
   1806         _exceptionType = "java/lang/IllegalArgumentException";
   1807         _exceptionMessage = "params == null";
   1808         goto exit;
   1809     }
   1810     if (offset < 0) {
   1811         _exception = 1;
   1812         _exceptionType = "java/lang/IllegalArgumentException";
   1813         _exceptionMessage = "offset < 0";
   1814         goto exit;
   1815     }
   1816     _remaining = _env->GetArrayLength(params_ref) - offset;
   1817     int _needed;
   1818     switch (pname) {
   1819 #if defined(GL_TEXTURE_ENV_COLOR)
   1820         case GL_TEXTURE_ENV_COLOR:
   1821 #endif // defined(GL_TEXTURE_ENV_COLOR)
   1822             _needed = 4;
   1823             break;
   1824         default:
   1825             _needed = 1;
   1826             break;
   1827     }
   1828     if (_remaining < _needed) {
   1829         _exception = 1;
   1830         _exceptionType = "java/lang/IllegalArgumentException";
   1831         _exceptionMessage = "length - offset < needed";
   1832         goto exit;
   1833     }
   1834     params_base = (GLfloat *)
   1835         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   1836     params = params_base + offset;
   1837 
   1838     glGetTexEnvfv(
   1839         (GLenum)env,
   1840         (GLenum)pname,
   1841         (GLfloat *)params
   1842     );
   1843 
   1844 exit:
   1845     if (params_base) {
   1846         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   1847             _exception ? JNI_ABORT: 0);
   1848     }
   1849     if (_exception) {
   1850         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1851     }
   1852 }
   1853 
   1854 /* void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params ) */
   1855 static void
   1856 android_glGetTexEnvfv__IILjava_nio_FloatBuffer_2
   1857   (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
   1858     jint _exception = 0;
   1859     const char * _exceptionType = NULL;
   1860     const char * _exceptionMessage = NULL;
   1861     jfloatArray _array = (jfloatArray) 0;
   1862     jint _bufferOffset = (jint) 0;
   1863     jint _remaining;
   1864     GLfloat *params = (GLfloat *) 0;
   1865 
   1866     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1867     int _needed;
   1868     switch (pname) {
   1869 #if defined(GL_TEXTURE_ENV_COLOR)
   1870         case GL_TEXTURE_ENV_COLOR:
   1871 #endif // defined(GL_TEXTURE_ENV_COLOR)
   1872             _needed = 4;
   1873             break;
   1874         default:
   1875             _needed = 1;
   1876             break;
   1877     }
   1878     if (_remaining < _needed) {
   1879         _exception = 1;
   1880         _exceptionType = "java/lang/IllegalArgumentException";
   1881         _exceptionMessage = "remaining() < needed";
   1882         goto exit;
   1883     }
   1884     if (params == NULL) {
   1885         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   1886         params = (GLfloat *) (_paramsBase + _bufferOffset);
   1887     }
   1888     glGetTexEnvfv(
   1889         (GLenum)env,
   1890         (GLenum)pname,
   1891         (GLfloat *)params
   1892     );
   1893 
   1894 exit:
   1895     if (_array) {
   1896         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
   1897     }
   1898     if (_exception) {
   1899         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1900     }
   1901 }
   1902 
   1903 /* void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params ) */
   1904 static void
   1905 android_glGetTexEnviv__II_3II
   1906   (JNIEnv *_env, jobject _this, jint env, jint pname, jintArray params_ref, jint offset) {
   1907     jint _exception = 0;
   1908     const char * _exceptionType = NULL;
   1909     const char * _exceptionMessage = NULL;
   1910     GLint *params_base = (GLint *) 0;
   1911     jint _remaining;
   1912     GLint *params = (GLint *) 0;
   1913 
   1914     if (!params_ref) {
   1915         _exception = 1;
   1916         _exceptionType = "java/lang/IllegalArgumentException";
   1917         _exceptionMessage = "params == null";
   1918         goto exit;
   1919     }
   1920     if (offset < 0) {
   1921         _exception = 1;
   1922         _exceptionType = "java/lang/IllegalArgumentException";
   1923         _exceptionMessage = "offset < 0";
   1924         goto exit;
   1925     }
   1926     _remaining = _env->GetArrayLength(params_ref) - offset;
   1927     int _needed;
   1928     switch (pname) {
   1929 #if defined(GL_TEXTURE_ENV_COLOR)
   1930         case GL_TEXTURE_ENV_COLOR:
   1931 #endif // defined(GL_TEXTURE_ENV_COLOR)
   1932             _needed = 4;
   1933             break;
   1934         default:
   1935             _needed = 1;
   1936             break;
   1937     }
   1938     if (_remaining < _needed) {
   1939         _exception = 1;
   1940         _exceptionType = "java/lang/IllegalArgumentException";
   1941         _exceptionMessage = "length - offset < needed";
   1942         goto exit;
   1943     }
   1944     params_base = (GLint *)
   1945         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1946     params = params_base + offset;
   1947 
   1948     glGetTexEnviv(
   1949         (GLenum)env,
   1950         (GLenum)pname,
   1951         (GLint *)params
   1952     );
   1953 
   1954 exit:
   1955     if (params_base) {
   1956         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1957             _exception ? JNI_ABORT: 0);
   1958     }
   1959     if (_exception) {
   1960         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1961     }
   1962 }
   1963 
   1964 /* void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params ) */
   1965 static void
   1966 android_glGetTexEnviv__IILjava_nio_IntBuffer_2
   1967   (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
   1968     jint _exception = 0;
   1969     const char * _exceptionType = NULL;
   1970     const char * _exceptionMessage = NULL;
   1971     jintArray _array = (jintArray) 0;
   1972     jint _bufferOffset = (jint) 0;
   1973     jint _remaining;
   1974     GLint *params = (GLint *) 0;
   1975 
   1976     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1977     int _needed;
   1978     switch (pname) {
   1979 #if defined(GL_TEXTURE_ENV_COLOR)
   1980         case GL_TEXTURE_ENV_COLOR:
   1981 #endif // defined(GL_TEXTURE_ENV_COLOR)
   1982             _needed = 4;
   1983             break;
   1984         default:
   1985             _needed = 1;
   1986             break;
   1987     }
   1988     if (_remaining < _needed) {
   1989         _exception = 1;
   1990         _exceptionType = "java/lang/IllegalArgumentException";
   1991         _exceptionMessage = "remaining() < needed";
   1992         goto exit;
   1993     }
   1994     if (params == NULL) {
   1995         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1996         params = (GLint *) (_paramsBase + _bufferOffset);
   1997     }
   1998     glGetTexEnviv(
   1999         (GLenum)env,
   2000         (GLenum)pname,
   2001         (GLint *)params
   2002     );
   2003 
   2004 exit:
   2005     if (_array) {
   2006         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   2007     }
   2008     if (_exception) {
   2009         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2010     }
   2011 }
   2012 
   2013 /* void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params ) */
   2014 static void
   2015 android_glGetTexEnvxv__II_3II
   2016   (JNIEnv *_env, jobject _this, jint env, jint pname, jintArray params_ref, jint offset) {
   2017     jint _exception = 0;
   2018     const char * _exceptionType = NULL;
   2019     const char * _exceptionMessage = NULL;
   2020     GLfixed *params_base = (GLfixed *) 0;
   2021     jint _remaining;
   2022     GLfixed *params = (GLfixed *) 0;
   2023 
   2024     if (!params_ref) {
   2025         _exception = 1;
   2026         _exceptionType = "java/lang/IllegalArgumentException";
   2027         _exceptionMessage = "params == null";
   2028         goto exit;
   2029     }
   2030     if (offset < 0) {
   2031         _exception = 1;
   2032         _exceptionType = "java/lang/IllegalArgumentException";
   2033         _exceptionMessage = "offset < 0";
   2034         goto exit;
   2035     }
   2036     _remaining = _env->GetArrayLength(params_ref) - offset;
   2037     int _needed;
   2038     switch (pname) {
   2039 #if defined(GL_TEXTURE_ENV_COLOR)
   2040         case GL_TEXTURE_ENV_COLOR:
   2041 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2042             _needed = 4;
   2043             break;
   2044         default:
   2045             _needed = 1;
   2046             break;
   2047     }
   2048     if (_remaining < _needed) {
   2049         _exception = 1;
   2050         _exceptionType = "java/lang/IllegalArgumentException";
   2051         _exceptionMessage = "length - offset < needed";
   2052         goto exit;
   2053     }
   2054     params_base = (GLfixed *)
   2055         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2056     params = params_base + offset;
   2057 
   2058     glGetTexEnvxv(
   2059         (GLenum)env,
   2060         (GLenum)pname,
   2061         (GLfixed *)params
   2062     );
   2063 
   2064 exit:
   2065     if (params_base) {
   2066         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2067             _exception ? JNI_ABORT: 0);
   2068     }
   2069     if (_exception) {
   2070         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2071     }
   2072 }
   2073 
   2074 /* void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params ) */
   2075 static void
   2076 android_glGetTexEnvxv__IILjava_nio_IntBuffer_2
   2077   (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
   2078     jint _exception = 0;
   2079     const char * _exceptionType = NULL;
   2080     const char * _exceptionMessage = NULL;
   2081     jintArray _array = (jintArray) 0;
   2082     jint _bufferOffset = (jint) 0;
   2083     jint _remaining;
   2084     GLfixed *params = (GLfixed *) 0;
   2085 
   2086     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2087     int _needed;
   2088     switch (pname) {
   2089 #if defined(GL_TEXTURE_ENV_COLOR)
   2090         case GL_TEXTURE_ENV_COLOR:
   2091 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2092             _needed = 4;
   2093             break;
   2094         default:
   2095             _needed = 1;
   2096             break;
   2097     }
   2098     if (_remaining < _needed) {
   2099         _exception = 1;
   2100         _exceptionType = "java/lang/IllegalArgumentException";
   2101         _exceptionMessage = "remaining() < needed";
   2102         goto exit;
   2103     }
   2104     if (params == NULL) {
   2105         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2106         params = (GLfixed *) (_paramsBase + _bufferOffset);
   2107     }
   2108     glGetTexEnvxv(
   2109         (GLenum)env,
   2110         (GLenum)pname,
   2111         (GLfixed *)params
   2112     );
   2113 
   2114 exit:
   2115     if (_array) {
   2116         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   2117     }
   2118     if (_exception) {
   2119         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2120     }
   2121 }
   2122 
   2123 /* void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) */
   2124 static void
   2125 android_glGetTexParameterfv__II_3FI
   2126   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
   2127     jint _exception = 0;
   2128     const char * _exceptionType = NULL;
   2129     const char * _exceptionMessage = NULL;
   2130     GLfloat *params_base = (GLfloat *) 0;
   2131     jint _remaining;
   2132     GLfloat *params = (GLfloat *) 0;
   2133 
   2134     if (!params_ref) {
   2135         _exception = 1;
   2136         _exceptionType = "java/lang/IllegalArgumentException";
   2137         _exceptionMessage = "params == null";
   2138         goto exit;
   2139     }
   2140     if (offset < 0) {
   2141         _exception = 1;
   2142         _exceptionType = "java/lang/IllegalArgumentException";
   2143         _exceptionMessage = "offset < 0";
   2144         goto exit;
   2145     }
   2146     _remaining = _env->GetArrayLength(params_ref) - offset;
   2147     if (_remaining < 1) {
   2148         _exception = 1;
   2149         _exceptionType = "java/lang/IllegalArgumentException";
   2150         _exceptionMessage = "length - offset < 1 < needed";
   2151         goto exit;
   2152     }
   2153     params_base = (GLfloat *)
   2154         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   2155     params = params_base + offset;
   2156 
   2157     glGetTexParameterfv(
   2158         (GLenum)target,
   2159         (GLenum)pname,
   2160         (GLfloat *)params
   2161     );
   2162 
   2163 exit:
   2164     if (params_base) {
   2165         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   2166             _exception ? JNI_ABORT: 0);
   2167     }
   2168     if (_exception) {
   2169         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2170     }
   2171 }
   2172 
   2173 /* void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) */
   2174 static void
   2175 android_glGetTexParameterfv__IILjava_nio_FloatBuffer_2
   2176   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2177     jint _exception = 0;
   2178     const char * _exceptionType = NULL;
   2179     const char * _exceptionMessage = NULL;
   2180     jfloatArray _array = (jfloatArray) 0;
   2181     jint _bufferOffset = (jint) 0;
   2182     jint _remaining;
   2183     GLfloat *params = (GLfloat *) 0;
   2184 
   2185     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2186     if (_remaining < 1) {
   2187         _exception = 1;
   2188         _exceptionType = "java/lang/IllegalArgumentException";
   2189         _exceptionMessage = "remaining() < 1 < needed";
   2190         goto exit;
   2191     }
   2192     if (params == NULL) {
   2193         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2194         params = (GLfloat *) (_paramsBase + _bufferOffset);
   2195     }
   2196     glGetTexParameterfv(
   2197         (GLenum)target,
   2198         (GLenum)pname,
   2199         (GLfloat *)params
   2200     );
   2201 
   2202 exit:
   2203     if (_array) {
   2204         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
   2205     }
   2206     if (_exception) {
   2207         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2208     }
   2209 }
   2210 
   2211 /* void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) */
   2212 static void
   2213 android_glGetTexParameteriv__II_3II
   2214   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   2215     jint _exception = 0;
   2216     const char * _exceptionType = NULL;
   2217     const char * _exceptionMessage = NULL;
   2218     GLint *params_base = (GLint *) 0;
   2219     jint _remaining;
   2220     GLint *params = (GLint *) 0;
   2221 
   2222     if (!params_ref) {
   2223         _exception = 1;
   2224         _exceptionType = "java/lang/IllegalArgumentException";
   2225         _exceptionMessage = "params == null";
   2226         goto exit;
   2227     }
   2228     if (offset < 0) {
   2229         _exception = 1;
   2230         _exceptionType = "java/lang/IllegalArgumentException";
   2231         _exceptionMessage = "offset < 0";
   2232         goto exit;
   2233     }
   2234     _remaining = _env->GetArrayLength(params_ref) - offset;
   2235     if (_remaining < 1) {
   2236         _exception = 1;
   2237         _exceptionType = "java/lang/IllegalArgumentException";
   2238         _exceptionMessage = "length - offset < 1 < needed";
   2239         goto exit;
   2240     }
   2241     params_base = (GLint *)
   2242         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2243     params = params_base + offset;
   2244 
   2245     glGetTexParameteriv(
   2246         (GLenum)target,
   2247         (GLenum)pname,
   2248         (GLint *)params
   2249     );
   2250 
   2251 exit:
   2252     if (params_base) {
   2253         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2254             _exception ? JNI_ABORT: 0);
   2255     }
   2256     if (_exception) {
   2257         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2258     }
   2259 }
   2260 
   2261 /* void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) */
   2262 static void
   2263 android_glGetTexParameteriv__IILjava_nio_IntBuffer_2
   2264   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2265     jint _exception = 0;
   2266     const char * _exceptionType = NULL;
   2267     const char * _exceptionMessage = NULL;
   2268     jintArray _array = (jintArray) 0;
   2269     jint _bufferOffset = (jint) 0;
   2270     jint _remaining;
   2271     GLint *params = (GLint *) 0;
   2272 
   2273     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2274     if (_remaining < 1) {
   2275         _exception = 1;
   2276         _exceptionType = "java/lang/IllegalArgumentException";
   2277         _exceptionMessage = "remaining() < 1 < needed";
   2278         goto exit;
   2279     }
   2280     if (params == NULL) {
   2281         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2282         params = (GLint *) (_paramsBase + _bufferOffset);
   2283     }
   2284     glGetTexParameteriv(
   2285         (GLenum)target,
   2286         (GLenum)pname,
   2287         (GLint *)params
   2288     );
   2289 
   2290 exit:
   2291     if (_array) {
   2292         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   2293     }
   2294     if (_exception) {
   2295         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2296     }
   2297 }
   2298 
   2299 /* void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params ) */
   2300 static void
   2301 android_glGetTexParameterxv__II_3II
   2302   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   2303     jint _exception = 0;
   2304     const char * _exceptionType = NULL;
   2305     const char * _exceptionMessage = NULL;
   2306     GLfixed *params_base = (GLfixed *) 0;
   2307     jint _remaining;
   2308     GLfixed *params = (GLfixed *) 0;
   2309 
   2310     if (!params_ref) {
   2311         _exception = 1;
   2312         _exceptionType = "java/lang/IllegalArgumentException";
   2313         _exceptionMessage = "params == null";
   2314         goto exit;
   2315     }
   2316     if (offset < 0) {
   2317         _exception = 1;
   2318         _exceptionType = "java/lang/IllegalArgumentException";
   2319         _exceptionMessage = "offset < 0";
   2320         goto exit;
   2321     }
   2322     _remaining = _env->GetArrayLength(params_ref) - offset;
   2323     if (_remaining < 1) {
   2324         _exception = 1;
   2325         _exceptionType = "java/lang/IllegalArgumentException";
   2326         _exceptionMessage = "length - offset < 1 < needed";
   2327         goto exit;
   2328     }
   2329     params_base = (GLfixed *)
   2330         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2331     params = params_base + offset;
   2332 
   2333     glGetTexParameterxv(
   2334         (GLenum)target,
   2335         (GLenum)pname,
   2336         (GLfixed *)params
   2337     );
   2338 
   2339 exit:
   2340     if (params_base) {
   2341         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2342             _exception ? JNI_ABORT: 0);
   2343     }
   2344     if (_exception) {
   2345         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2346     }
   2347 }
   2348 
   2349 /* void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params ) */
   2350 static void
   2351 android_glGetTexParameterxv__IILjava_nio_IntBuffer_2
   2352   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2353     jint _exception = 0;
   2354     const char * _exceptionType = NULL;
   2355     const char * _exceptionMessage = NULL;
   2356     jintArray _array = (jintArray) 0;
   2357     jint _bufferOffset = (jint) 0;
   2358     jint _remaining;
   2359     GLfixed *params = (GLfixed *) 0;
   2360 
   2361     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2362     if (_remaining < 1) {
   2363         _exception = 1;
   2364         _exceptionType = "java/lang/IllegalArgumentException";
   2365         _exceptionMessage = "remaining() < 1 < needed";
   2366         goto exit;
   2367     }
   2368     if (params == NULL) {
   2369         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2370         params = (GLfixed *) (_paramsBase + _bufferOffset);
   2371     }
   2372     glGetTexParameterxv(
   2373         (GLenum)target,
   2374         (GLenum)pname,
   2375         (GLfixed *)params
   2376     );
   2377 
   2378 exit:
   2379     if (_array) {
   2380         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   2381     }
   2382     if (_exception) {
   2383         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2384     }
   2385 }
   2386 
   2387 /* GLboolean glIsBuffer ( GLuint buffer ) */
   2388 static jboolean
   2389 android_glIsBuffer__I
   2390   (JNIEnv *_env, jobject _this, jint buffer) {
   2391     GLboolean _returnValue;
   2392     _returnValue = glIsBuffer(
   2393         (GLuint)buffer
   2394     );
   2395     return (jboolean)_returnValue;
   2396 }
   2397 
   2398 /* GLboolean glIsEnabled ( GLenum cap ) */
   2399 static jboolean
   2400 android_glIsEnabled__I
   2401   (JNIEnv *_env, jobject _this, jint cap) {
   2402     GLboolean _returnValue;
   2403     _returnValue = glIsEnabled(
   2404         (GLenum)cap
   2405     );
   2406     return (jboolean)_returnValue;
   2407 }
   2408 
   2409 /* GLboolean glIsTexture ( GLuint texture ) */
   2410 static jboolean
   2411 android_glIsTexture__I
   2412   (JNIEnv *_env, jobject _this, jint texture) {
   2413     GLboolean _returnValue;
   2414     _returnValue = glIsTexture(
   2415         (GLuint)texture
   2416     );
   2417     return (jboolean)_returnValue;
   2418 }
   2419 
   2420 /* void glNormalPointer ( GLenum type, GLsizei stride, GLint offset ) */
   2421 static void
   2422 android_glNormalPointer__III
   2423   (JNIEnv *_env, jobject _this, jint type, jint stride, jint offset) {
   2424     glNormalPointer(
   2425         (GLenum)type,
   2426         (GLsizei)stride,
   2427         reinterpret_cast<GLvoid *>(offset)
   2428     );
   2429 }
   2430 
   2431 /* void glPointParameterf ( GLenum pname, GLfloat param ) */
   2432 static void
   2433 android_glPointParameterf__IF
   2434   (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
   2435     glPointParameterf(
   2436         (GLenum)pname,
   2437         (GLfloat)param
   2438     );
   2439 }
   2440 
   2441 /* void glPointParameterfv ( GLenum pname, const GLfloat *params ) */
   2442 static void
   2443 android_glPointParameterfv__I_3FI
   2444   (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
   2445     jint _exception = 0;
   2446     const char * _exceptionType = NULL;
   2447     const char * _exceptionMessage = NULL;
   2448     GLfloat *params_base = (GLfloat *) 0;
   2449     jint _remaining;
   2450     GLfloat *params = (GLfloat *) 0;
   2451 
   2452     if (!params_ref) {
   2453         _exception = 1;
   2454         _exceptionType = "java/lang/IllegalArgumentException";
   2455         _exceptionMessage = "params == null";
   2456         goto exit;
   2457     }
   2458     if (offset < 0) {
   2459         _exception = 1;
   2460         _exceptionType = "java/lang/IllegalArgumentException";
   2461         _exceptionMessage = "offset < 0";
   2462         goto exit;
   2463     }
   2464     _remaining = _env->GetArrayLength(params_ref) - offset;
   2465     if (_remaining < 1) {
   2466         _exception = 1;
   2467         _exceptionType = "java/lang/IllegalArgumentException";
   2468         _exceptionMessage = "length - offset < 1 < needed";
   2469         goto exit;
   2470     }
   2471     params_base = (GLfloat *)
   2472         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   2473     params = params_base + offset;
   2474 
   2475     glPointParameterfv(
   2476         (GLenum)pname,
   2477         (GLfloat *)params
   2478     );
   2479 
   2480 exit:
   2481     if (params_base) {
   2482         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   2483             JNI_ABORT);
   2484     }
   2485     if (_exception) {
   2486         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2487     }
   2488 }
   2489 
   2490 /* void glPointParameterfv ( GLenum pname, const GLfloat *params ) */
   2491 static void
   2492 android_glPointParameterfv__ILjava_nio_FloatBuffer_2
   2493   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   2494     jint _exception = 0;
   2495     const char * _exceptionType = NULL;
   2496     const char * _exceptionMessage = NULL;
   2497     jfloatArray _array = (jfloatArray) 0;
   2498     jint _bufferOffset = (jint) 0;
   2499     jint _remaining;
   2500     GLfloat *params = (GLfloat *) 0;
   2501 
   2502     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2503     if (_remaining < 1) {
   2504         _exception = 1;
   2505         _exceptionType = "java/lang/IllegalArgumentException";
   2506         _exceptionMessage = "remaining() < 1 < needed";
   2507         goto exit;
   2508     }
   2509     if (params == NULL) {
   2510         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2511         params = (GLfloat *) (_paramsBase + _bufferOffset);
   2512     }
   2513     glPointParameterfv(
   2514         (GLenum)pname,
   2515         (GLfloat *)params
   2516     );
   2517 
   2518 exit:
   2519     if (_array) {
   2520         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   2521     }
   2522     if (_exception) {
   2523         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2524     }
   2525 }
   2526 
   2527 /* void glPointParameterx ( GLenum pname, GLfixed param ) */
   2528 static void
   2529 android_glPointParameterx__II
   2530   (JNIEnv *_env, jobject _this, jint pname, jint param) {
   2531     glPointParameterx(
   2532         (GLenum)pname,
   2533         (GLfixed)param
   2534     );
   2535 }
   2536 
   2537 /* void glPointParameterxv ( GLenum pname, const GLfixed *params ) */
   2538 static void
   2539 android_glPointParameterxv__I_3II
   2540   (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
   2541     jint _exception = 0;
   2542     const char * _exceptionType = NULL;
   2543     const char * _exceptionMessage = NULL;
   2544     GLfixed *params_base = (GLfixed *) 0;
   2545     jint _remaining;
   2546     GLfixed *params = (GLfixed *) 0;
   2547 
   2548     if (!params_ref) {
   2549         _exception = 1;
   2550         _exceptionType = "java/lang/IllegalArgumentException";
   2551         _exceptionMessage = "params == null";
   2552         goto exit;
   2553     }
   2554     if (offset < 0) {
   2555         _exception = 1;
   2556         _exceptionType = "java/lang/IllegalArgumentException";
   2557         _exceptionMessage = "offset < 0";
   2558         goto exit;
   2559     }
   2560     _remaining = _env->GetArrayLength(params_ref) - offset;
   2561     if (_remaining < 1) {
   2562         _exception = 1;
   2563         _exceptionType = "java/lang/IllegalArgumentException";
   2564         _exceptionMessage = "length - offset < 1 < needed";
   2565         goto exit;
   2566     }
   2567     params_base = (GLfixed *)
   2568         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2569     params = params_base + offset;
   2570 
   2571     glPointParameterxv(
   2572         (GLenum)pname,
   2573         (GLfixed *)params
   2574     );
   2575 
   2576 exit:
   2577     if (params_base) {
   2578         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2579             JNI_ABORT);
   2580     }
   2581     if (_exception) {
   2582         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2583     }
   2584 }
   2585 
   2586 /* void glPointParameterxv ( GLenum pname, const GLfixed *params ) */
   2587 static void
   2588 android_glPointParameterxv__ILjava_nio_IntBuffer_2
   2589   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
   2590     jint _exception = 0;
   2591     const char * _exceptionType = NULL;
   2592     const char * _exceptionMessage = NULL;
   2593     jintArray _array = (jintArray) 0;
   2594     jint _bufferOffset = (jint) 0;
   2595     jint _remaining;
   2596     GLfixed *params = (GLfixed *) 0;
   2597 
   2598     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2599     if (_remaining < 1) {
   2600         _exception = 1;
   2601         _exceptionType = "java/lang/IllegalArgumentException";
   2602         _exceptionMessage = "remaining() < 1 < needed";
   2603         goto exit;
   2604     }
   2605     if (params == NULL) {
   2606         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2607         params = (GLfixed *) (_paramsBase + _bufferOffset);
   2608     }
   2609     glPointParameterxv(
   2610         (GLenum)pname,
   2611         (GLfixed *)params
   2612     );
   2613 
   2614 exit:
   2615     if (_array) {
   2616         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   2617     }
   2618     if (_exception) {
   2619         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2620     }
   2621 }
   2622 
   2623 /* void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
   2624 static void
   2625 android_glPointSizePointerOESBounds__IILjava_nio_Buffer_2I
   2626   (JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf, jint remaining) {
   2627     jarray _array = (jarray) 0;
   2628     jint _bufferOffset = (jint) 0;
   2629     jint _remaining;
   2630     GLvoid *pointer = (GLvoid *) 0;
   2631 
   2632     if (pointer_buf) {
   2633         pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
   2634         if ( ! pointer ) {
   2635             return;
   2636         }
   2637     }
   2638     glPointSizePointerOESBounds(
   2639         (GLenum)type,
   2640         (GLsizei)stride,
   2641         (GLvoid *)pointer,
   2642         (GLsizei)remaining
   2643     );
   2644 }
   2645 
   2646 /* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
   2647 static void
   2648 android_glTexCoordPointer__IIII
   2649   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
   2650     glTexCoordPointer(
   2651         (GLint)size,
   2652         (GLenum)type,
   2653         (GLsizei)stride,
   2654         reinterpret_cast<GLvoid *>(offset)
   2655     );
   2656 }
   2657 
   2658 /* void glTexEnvi ( GLenum target, GLenum pname, GLint param ) */
   2659 static void
   2660 android_glTexEnvi__III
   2661   (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
   2662     glTexEnvi(
   2663         (GLenum)target,
   2664         (GLenum)pname,
   2665         (GLint)param
   2666     );
   2667 }
   2668 
   2669 /* void glTexEnviv ( GLenum target, GLenum pname, const GLint *params ) */
   2670 static void
   2671 android_glTexEnviv__II_3II
   2672   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   2673     jint _exception = 0;
   2674     const char * _exceptionType = NULL;
   2675     const char * _exceptionMessage = NULL;
   2676     GLint *params_base = (GLint *) 0;
   2677     jint _remaining;
   2678     GLint *params = (GLint *) 0;
   2679 
   2680     if (!params_ref) {
   2681         _exception = 1;
   2682         _exceptionType = "java/lang/IllegalArgumentException";
   2683         _exceptionMessage = "params == null";
   2684         goto exit;
   2685     }
   2686     if (offset < 0) {
   2687         _exception = 1;
   2688         _exceptionType = "java/lang/IllegalArgumentException";
   2689         _exceptionMessage = "offset < 0";
   2690         goto exit;
   2691     }
   2692     _remaining = _env->GetArrayLength(params_ref) - offset;
   2693     int _needed;
   2694     switch (pname) {
   2695 #if defined(GL_TEXTURE_ENV_COLOR)
   2696         case GL_TEXTURE_ENV_COLOR:
   2697 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2698             _needed = 4;
   2699             break;
   2700         default:
   2701             _needed = 1;
   2702             break;
   2703     }
   2704     if (_remaining < _needed) {
   2705         _exception = 1;
   2706         _exceptionType = "java/lang/IllegalArgumentException";
   2707         _exceptionMessage = "length - offset < needed";
   2708         goto exit;
   2709     }
   2710     params_base = (GLint *)
   2711         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2712     params = params_base + offset;
   2713 
   2714     glTexEnviv(
   2715         (GLenum)target,
   2716         (GLenum)pname,
   2717         (GLint *)params
   2718     );
   2719 
   2720 exit:
   2721     if (params_base) {
   2722         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2723             JNI_ABORT);
   2724     }
   2725     if (_exception) {
   2726         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2727     }
   2728 }
   2729 
   2730 /* void glTexEnviv ( GLenum target, GLenum pname, const GLint *params ) */
   2731 static void
   2732 android_glTexEnviv__IILjava_nio_IntBuffer_2
   2733   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2734     jint _exception = 0;
   2735     const char * _exceptionType = NULL;
   2736     const char * _exceptionMessage = NULL;
   2737     jintArray _array = (jintArray) 0;
   2738     jint _bufferOffset = (jint) 0;
   2739     jint _remaining;
   2740     GLint *params = (GLint *) 0;
   2741 
   2742     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2743     int _needed;
   2744     switch (pname) {
   2745 #if defined(GL_TEXTURE_ENV_COLOR)
   2746         case GL_TEXTURE_ENV_COLOR:
   2747 #endif // defined(GL_TEXTURE_ENV_COLOR)
   2748             _needed = 4;
   2749             break;
   2750         default:
   2751             _needed = 1;
   2752             break;
   2753     }
   2754     if (_remaining < _needed) {
   2755         _exception = 1;
   2756         _exceptionType = "java/lang/IllegalArgumentException";
   2757         _exceptionMessage = "remaining() < needed";
   2758         goto exit;
   2759     }
   2760     if (params == NULL) {
   2761         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2762         params = (GLint *) (_paramsBase + _bufferOffset);
   2763     }
   2764     glTexEnviv(
   2765         (GLenum)target,
   2766         (GLenum)pname,
   2767         (GLint *)params
   2768     );
   2769 
   2770 exit:
   2771     if (_array) {
   2772         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   2773     }
   2774     if (_exception) {
   2775         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2776     }
   2777 }
   2778 
   2779 /* void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) */
   2780 static void
   2781 android_glTexParameterfv__II_3FI
   2782   (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
   2783     jint _exception = 0;
   2784     const char * _exceptionType = NULL;
   2785     const char * _exceptionMessage = NULL;
   2786     GLfloat *params_base = (GLfloat *) 0;
   2787     jint _remaining;
   2788     GLfloat *params = (GLfloat *) 0;
   2789 
   2790     if (!params_ref) {
   2791         _exception = 1;
   2792         _exceptionType = "java/lang/IllegalArgumentException";
   2793         _exceptionMessage = "params == null";
   2794         goto exit;
   2795     }
   2796     if (offset < 0) {
   2797         _exception = 1;
   2798         _exceptionType = "java/lang/IllegalArgumentException";
   2799         _exceptionMessage = "offset < 0";
   2800         goto exit;
   2801     }
   2802     _remaining = _env->GetArrayLength(params_ref) - offset;
   2803     if (_remaining < 1) {
   2804         _exception = 1;
   2805         _exceptionType = "java/lang/IllegalArgumentException";
   2806         _exceptionMessage = "length - offset < 1 < needed";
   2807         goto exit;
   2808     }
   2809     params_base = (GLfloat *)
   2810         _env->GetFloatArrayElements(params_ref, (jboolean *)0);
   2811     params = params_base + offset;
   2812 
   2813     glTexParameterfv(
   2814         (GLenum)target,
   2815         (GLenum)pname,
   2816         (GLfloat *)params
   2817     );
   2818 
   2819 exit:
   2820     if (params_base) {
   2821         _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
   2822             JNI_ABORT);
   2823     }
   2824     if (_exception) {
   2825         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2826     }
   2827 }
   2828 
   2829 /* void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) */
   2830 static void
   2831 android_glTexParameterfv__IILjava_nio_FloatBuffer_2
   2832   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2833     jint _exception = 0;
   2834     const char * _exceptionType = NULL;
   2835     const char * _exceptionMessage = NULL;
   2836     jfloatArray _array = (jfloatArray) 0;
   2837     jint _bufferOffset = (jint) 0;
   2838     jint _remaining;
   2839     GLfloat *params = (GLfloat *) 0;
   2840 
   2841     params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2842     if (_remaining < 1) {
   2843         _exception = 1;
   2844         _exceptionType = "java/lang/IllegalArgumentException";
   2845         _exceptionMessage = "remaining() < 1 < needed";
   2846         goto exit;
   2847     }
   2848     if (params == NULL) {
   2849         char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
   2850         params = (GLfloat *) (_paramsBase + _bufferOffset);
   2851     }
   2852     glTexParameterfv(
   2853         (GLenum)target,
   2854         (GLenum)pname,
   2855         (GLfloat *)params
   2856     );
   2857 
   2858 exit:
   2859     if (_array) {
   2860         _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
   2861     }
   2862     if (_exception) {
   2863         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2864     }
   2865 }
   2866 
   2867 /* void glTexParameteri ( GLenum target, GLenum pname, GLint param ) */
   2868 static void
   2869 android_glTexParameteri__III
   2870   (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
   2871     glTexParameteri(
   2872         (GLenum)target,
   2873         (GLenum)pname,
   2874         (GLint)param
   2875     );
   2876 }
   2877 
   2878 /* void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) */
   2879 static void
   2880 android_glTexParameteriv__II_3II
   2881   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   2882     jint _exception = 0;
   2883     const char * _exceptionType = NULL;
   2884     const char * _exceptionMessage = NULL;
   2885     GLint *params_base = (GLint *) 0;
   2886     jint _remaining;
   2887     GLint *params = (GLint *) 0;
   2888 
   2889     if (!params_ref) {
   2890         _exception = 1;
   2891         _exceptionType = "java/lang/IllegalArgumentException";
   2892         _exceptionMessage = "params == null";
   2893         goto exit;
   2894     }
   2895     if (offset < 0) {
   2896         _exception = 1;
   2897         _exceptionType = "java/lang/IllegalArgumentException";
   2898         _exceptionMessage = "offset < 0";
   2899         goto exit;
   2900     }
   2901     _remaining = _env->GetArrayLength(params_ref) - offset;
   2902     if (_remaining < 1) {
   2903         _exception = 1;
   2904         _exceptionType = "java/lang/IllegalArgumentException";
   2905         _exceptionMessage = "length - offset < 1 < needed";
   2906         goto exit;
   2907     }
   2908     params_base = (GLint *)
   2909         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2910     params = params_base + offset;
   2911 
   2912     glTexParameteriv(
   2913         (GLenum)target,
   2914         (GLenum)pname,
   2915         (GLint *)params
   2916     );
   2917 
   2918 exit:
   2919     if (params_base) {
   2920         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   2921             JNI_ABORT);
   2922     }
   2923     if (_exception) {
   2924         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2925     }
   2926 }
   2927 
   2928 /* void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) */
   2929 static void
   2930 android_glTexParameteriv__IILjava_nio_IntBuffer_2
   2931   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   2932     jint _exception = 0;
   2933     const char * _exceptionType = NULL;
   2934     const char * _exceptionMessage = NULL;
   2935     jintArray _array = (jintArray) 0;
   2936     jint _bufferOffset = (jint) 0;
   2937     jint _remaining;
   2938     GLint *params = (GLint *) 0;
   2939 
   2940     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   2941     if (_remaining < 1) {
   2942         _exception = 1;
   2943         _exceptionType = "java/lang/IllegalArgumentException";
   2944         _exceptionMessage = "remaining() < 1 < needed";
   2945         goto exit;
   2946     }
   2947     if (params == NULL) {
   2948         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   2949         params = (GLint *) (_paramsBase + _bufferOffset);
   2950     }
   2951     glTexParameteriv(
   2952         (GLenum)target,
   2953         (GLenum)pname,
   2954         (GLint *)params
   2955     );
   2956 
   2957 exit:
   2958     if (_array) {
   2959         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   2960     }
   2961     if (_exception) {
   2962         jniThrowException(_env, _exceptionType, _exceptionMessage);
   2963     }
   2964 }
   2965 
   2966 /* void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params ) */
   2967 static void
   2968 android_glTexParameterxv__II_3II
   2969   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   2970     jint _exception = 0;
   2971     const char * _exceptionType = NULL;
   2972     const char * _exceptionMessage = NULL;
   2973     GLfixed *params_base = (GLfixed *) 0;
   2974     jint _remaining;
   2975     GLfixed *params = (GLfixed *) 0;
   2976 
   2977     if (!params_ref) {
   2978         _exception = 1;
   2979         _exceptionType = "java/lang/IllegalArgumentException";
   2980         _exceptionMessage = "params == null";
   2981         goto exit;
   2982     }
   2983     if (offset < 0) {
   2984         _exception = 1;
   2985         _exceptionType = "java/lang/IllegalArgumentException";
   2986         _exceptionMessage = "offset < 0";
   2987         goto exit;
   2988     }
   2989     _remaining = _env->GetArrayLength(params_ref) - offset;
   2990     if (_remaining < 1) {
   2991         _exception = 1;
   2992         _exceptionType = "java/lang/IllegalArgumentException";
   2993         _exceptionMessage = "length - offset < 1 < needed";
   2994         goto exit;
   2995     }
   2996     params_base = (GLfixed *)
   2997         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   2998     params = params_base + offset;
   2999 
   3000     glTexParameterxv(
   3001         (GLenum)target,
   3002         (GLenum)pname,
   3003         (GLfixed *)params
   3004     );
   3005 
   3006 exit:
   3007     if (params_base) {
   3008         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   3009             JNI_ABORT);
   3010     }
   3011     if (_exception) {
   3012         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3013     }
   3014 }
   3015 
   3016 /* void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params ) */
   3017 static void
   3018 android_glTexParameterxv__IILjava_nio_IntBuffer_2
   3019   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   3020     jint _exception = 0;
   3021     const char * _exceptionType = NULL;
   3022     const char * _exceptionMessage = NULL;
   3023     jintArray _array = (jintArray) 0;
   3024     jint _bufferOffset = (jint) 0;
   3025     jint _remaining;
   3026     GLfixed *params = (GLfixed *) 0;
   3027 
   3028     params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   3029     if (_remaining < 1) {
   3030         _exception = 1;
   3031         _exceptionType = "java/lang/IllegalArgumentException";
   3032         _exceptionMessage = "remaining() < 1 < needed";
   3033         goto exit;
   3034     }
   3035     if (params == NULL) {
   3036         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   3037         params = (GLfixed *) (_paramsBase + _bufferOffset);
   3038     }
   3039     glTexParameterxv(
   3040         (GLenum)target,
   3041         (GLenum)pname,
   3042         (GLfixed *)params
   3043     );
   3044 
   3045 exit:
   3046     if (_array) {
   3047         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   3048     }
   3049     if (_exception) {
   3050         jniThrowException(_env, _exceptionType, _exceptionMessage);
   3051     }
   3052 }
   3053 
   3054 /* void glVertexPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
   3055 static void
   3056 android_glVertexPointer__IIII
   3057   (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
   3058     glVertexPointer(
   3059         (GLint)size,
   3060         (GLenum)type,
   3061         (GLsizei)stride,
   3062         reinterpret_cast<GLvoid *>(offset)
   3063     );
   3064 }
   3065 
   3066 static const char *classPathName = "android/opengl/GLES11";
   3067 
   3068 static const JNINativeMethod methods[] = {
   3069 {"_nativeClassInit", "()V", (void*)nativeClassInit },
   3070 {"glBindBuffer", "(II)V", (void *) android_glBindBuffer__II },
   3071 {"glBufferData", "(IILjava/nio/Buffer;I)V", (void *) android_glBufferData__IILjava_nio_Buffer_2I },
   3072 {"glBufferSubData", "(IIILjava/nio/Buffer;)V", (void *) android_glBufferSubData__IIILjava_nio_Buffer_2 },
   3073 {"glClipPlanef", "(I[FI)V", (void *) android_glClipPlanef__I_3FI },
   3074 {"glClipPlanef", "(ILjava/nio/FloatBuffer;)V", (void *) android_glClipPlanef__ILjava_nio_FloatBuffer_2 },
   3075 {"glClipPlanex", "(I[II)V", (void *) android_glClipPlanex__I_3II },
   3076 {"glClipPlanex", "(ILjava/nio/IntBuffer;)V", (void *) android_glClipPlanex__ILjava_nio_IntBuffer_2 },
   3077 {"glColor4ub", "(BBBB)V", (void *) android_glColor4ub__BBBB },
   3078 {"glColorPointer", "(IIII)V", (void *) android_glColorPointer__IIII },
   3079 {"glDeleteBuffers", "(I[II)V", (void *) android_glDeleteBuffers__I_3II },
   3080 {"glDeleteBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteBuffers__ILjava_nio_IntBuffer_2 },
   3081 {"glDrawElements", "(IIII)V", (void *) android_glDrawElements__IIII },
   3082 {"glGenBuffers", "(I[II)V", (void *) android_glGenBuffers__I_3II },
   3083 {"glGenBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenBuffers__ILjava_nio_IntBuffer_2 },
   3084 {"glGetBooleanv", "(I[ZI)V", (void *) android_glGetBooleanv__I_3ZI },
   3085 {"glGetBooleanv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetBooleanv__ILjava_nio_IntBuffer_2 },
   3086 {"glGetBufferParameteriv", "(II[II)V", (void *) android_glGetBufferParameteriv__II_3II },
   3087 {"glGetBufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetBufferParameteriv__IILjava_nio_IntBuffer_2 },
   3088 {"glGetClipPlanef", "(I[FI)V", (void *) android_glGetClipPlanef__I_3FI },
   3089 {"glGetClipPlanef", "(ILjava/nio/FloatBuffer;)V", (void *) android_glGetClipPlanef__ILjava_nio_FloatBuffer_2 },
   3090 {"glGetClipPlanex", "(I[II)V", (void *) android_glGetClipPlanex__I_3II },
   3091 {"glGetClipPlanex", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetClipPlanex__ILjava_nio_IntBuffer_2 },
   3092 {"glGetFixedv", "(I[II)V", (void *) android_glGetFixedv__I_3II },
   3093 {"glGetFixedv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetFixedv__ILjava_nio_IntBuffer_2 },
   3094 {"glGetFloatv", "(I[FI)V", (void *) android_glGetFloatv__I_3FI },
   3095 {"glGetFloatv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glGetFloatv__ILjava_nio_FloatBuffer_2 },
   3096 {"glGetLightfv", "(II[FI)V", (void *) android_glGetLightfv__II_3FI },
   3097 {"glGetLightfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetLightfv__IILjava_nio_FloatBuffer_2 },
   3098 {"glGetLightxv", "(II[II)V", (void *) android_glGetLightxv__II_3II },
   3099 {"glGetLightxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetLightxv__IILjava_nio_IntBuffer_2 },
   3100 {"glGetMaterialfv", "(II[FI)V", (void *) android_glGetMaterialfv__II_3FI },
   3101 {"glGetMaterialfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetMaterialfv__IILjava_nio_FloatBuffer_2 },
   3102 {"glGetMaterialxv", "(II[II)V", (void *) android_glGetMaterialxv__II_3II },
   3103 {"glGetMaterialxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetMaterialxv__IILjava_nio_IntBuffer_2 },
   3104 {"glGetTexEnvfv", "(II[FI)V", (void *) android_glGetTexEnvfv__II_3FI },
   3105 {"glGetTexEnvfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetTexEnvfv__IILjava_nio_FloatBuffer_2 },
   3106 {"glGetTexEnviv", "(II[II)V", (void *) android_glGetTexEnviv__II_3II },
   3107 {"glGetTexEnviv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexEnviv__IILjava_nio_IntBuffer_2 },
   3108 {"glGetTexEnvxv", "(II[II)V", (void *) android_glGetTexEnvxv__II_3II },
   3109 {"glGetTexEnvxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexEnvxv__IILjava_nio_IntBuffer_2 },
   3110 {"glGetTexParameterfv", "(II[FI)V", (void *) android_glGetTexParameterfv__II_3FI },
   3111 {"glGetTexParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetTexParameterfv__IILjava_nio_FloatBuffer_2 },
   3112 {"glGetTexParameteriv", "(II[II)V", (void *) android_glGetTexParameteriv__II_3II },
   3113 {"glGetTexParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameteriv__IILjava_nio_IntBuffer_2 },
   3114 {"glGetTexParameterxv", "(II[II)V", (void *) android_glGetTexParameterxv__II_3II },
   3115 {"glGetTexParameterxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterxv__IILjava_nio_IntBuffer_2 },
   3116 {"glIsBuffer", "(I)Z", (void *) android_glIsBuffer__I },
   3117 {"glIsEnabled", "(I)Z", (void *) android_glIsEnabled__I },
   3118 {"glIsTexture", "(I)Z", (void *) android_glIsTexture__I },
   3119 {"glNormalPointer", "(III)V", (void *) android_glNormalPointer__III },
   3120 {"glPointParameterf", "(IF)V", (void *) android_glPointParameterf__IF },
   3121 {"glPointParameterfv", "(I[FI)V", (void *) android_glPointParameterfv__I_3FI },
   3122 {"glPointParameterfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glPointParameterfv__ILjava_nio_FloatBuffer_2 },
   3123 {"glPointParameterx", "(II)V", (void *) android_glPointParameterx__II },
   3124 {"glPointParameterxv", "(I[II)V", (void *) android_glPointParameterxv__I_3II },
   3125 {"glPointParameterxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glPointParameterxv__ILjava_nio_IntBuffer_2 },
   3126 {"glPointSizePointerOESBounds", "(IILjava/nio/Buffer;I)V", (void *) android_glPointSizePointerOESBounds__IILjava_nio_Buffer_2I },
   3127 {"glTexCoordPointer", "(IIII)V", (void *) android_glTexCoordPointer__IIII },
   3128 {"glTexEnvi", "(III)V", (void *) android_glTexEnvi__III },
   3129 {"glTexEnviv", "(II[II)V", (void *) android_glTexEnviv__II_3II },
   3130 {"glTexEnviv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexEnviv__IILjava_nio_IntBuffer_2 },
   3131 {"glTexParameterfv", "(II[FI)V", (void *) android_glTexParameterfv__II_3FI },
   3132 {"glTexParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexParameterfv__IILjava_nio_FloatBuffer_2 },
   3133 {"glTexParameteri", "(III)V", (void *) android_glTexParameteri__III },
   3134 {"glTexParameteriv", "(II[II)V", (void *) android_glTexParameteriv__II_3II },
   3135 {"glTexParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameteriv__IILjava_nio_IntBuffer_2 },
   3136 {"glTexParameterxv", "(II[II)V", (void *) android_glTexParameterxv__II_3II },
   3137 {"glTexParameterxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterxv__IILjava_nio_IntBuffer_2 },
   3138 {"glVertexPointer", "(IIII)V", (void *) android_glVertexPointer__IIII },
   3139 };
   3140 
   3141 int register_android_opengl_jni_GLES11(JNIEnv *_env)
   3142 {
   3143     int err;
   3144     err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
   3145     return err;
   3146 }
   3147