Home | History | Annotate | Download | only in jni
      1 /*
      2  * Copyright 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 // This source file is automatically generated
     18 
     19 #pragma GCC diagnostic ignored "-Wunused-variable"
     20 #pragma GCC diagnostic ignored "-Wunused-function"
     21 
     22 #include <GLES3/gl31.h>
     23 #include <GLES2/gl2ext.h>
     24 
     25 #include <jni.h>
     26 #include <nativehelper/JNIHelp.h>
     27 #include <android_runtime/AndroidRuntime.h>
     28 #include <utils/misc.h>
     29 #include <assert.h>
     30 
     31 static int initialized = 0;
     32 
     33 static jclass nioAccessClass;
     34 static jclass bufferClass;
     35 static jmethodID getBasePointerID;
     36 static jmethodID getBaseArrayID;
     37 static jmethodID getBaseArrayOffsetID;
     38 static jfieldID positionID;
     39 static jfieldID limitID;
     40 static jfieldID elementSizeShiftID;
     41 
     42 
     43 /* special calls implemented in Android's GLES wrapper used to more
     44  * efficiently bound-check passed arrays */
     45 extern "C" {
     46 #ifdef GL_VERSION_ES_CM_1_1
     47 GL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
     48         const GLvoid *ptr, GLsizei count);
     49 GL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
     50         const GLvoid *pointer, GLsizei count);
     51 GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
     52         GLsizei stride, const GLvoid *pointer, GLsizei count);
     53 GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
     54         GLsizei stride, const GLvoid *pointer, GLsizei count);
     55 GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
     56         GLsizei stride, const GLvoid *pointer, GLsizei count);
     57 GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
     58         GLsizei stride, const GLvoid *pointer, GLsizei count);
     59 GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
     60         GLsizei stride, const GLvoid *pointer, GLsizei count);
     61 #endif
     62 #ifdef GL_ES_VERSION_2_0
     63 static void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
     64         GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
     65     glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
     66 }
     67 #endif
     68 #ifdef GL_ES_VERSION_3_0
     69 static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
     70         GLsizei stride, const GLvoid *pointer, GLsizei count) {
     71     glVertexAttribIPointer(indx, size, type, stride, pointer);
     72 }
     73 #endif
     74 }
     75 
     76 /* Cache method IDs each time the class is loaded. */
     77 
     78 static void
     79 nativeClassInit(JNIEnv *_env, jclass glImplClass)
     80 {
     81     jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
     82     nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
     83 
     84     jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
     85     bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
     86 
     87     getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
     88             "getBasePointer", "(Ljava/nio/Buffer;)J");
     89     getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
     90             "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
     91     getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
     92             "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
     93 
     94     positionID = _env->GetFieldID(bufferClass, "position", "I");
     95     limitID = _env->GetFieldID(bufferClass, "limit", "I");
     96     elementSizeShiftID =
     97         _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
     98 }
     99 
    100 static void *
    101 getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
    102 {
    103     jint position;
    104     jint limit;
    105     jint elementSizeShift;
    106     jlong pointer;
    107 
    108     position = _env->GetIntField(buffer, positionID);
    109     limit = _env->GetIntField(buffer, limitID);
    110     elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
    111     *remaining = (limit - position) << elementSizeShift;
    112     pointer = _env->CallStaticLongMethod(nioAccessClass,
    113             getBasePointerID, buffer);
    114     if (pointer != 0L) {
    115         *array = NULL;
    116         return reinterpret_cast<void*>(pointer);
    117     }
    118 
    119     *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
    120             getBaseArrayID, buffer);
    121     *offset = _env->CallStaticIntMethod(nioAccessClass,
    122             getBaseArrayOffsetID, buffer);
    123 
    124     return NULL;
    125 }
    126 
    127 class ByteArrayGetter {
    128 public:
    129     static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
    130         return _env->GetByteArrayElements(array, is_copy);
    131     }
    132 };
    133 class BooleanArrayGetter {
    134 public:
    135     static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
    136         return _env->GetBooleanArrayElements(array, is_copy);
    137     }
    138 };
    139 class CharArrayGetter {
    140 public:
    141     static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
    142         return _env->GetCharArrayElements(array, is_copy);
    143     }
    144 };
    145 class ShortArrayGetter {
    146 public:
    147     static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
    148         return _env->GetShortArrayElements(array, is_copy);
    149     }
    150 };
    151 class IntArrayGetter {
    152 public:
    153     static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
    154         return _env->GetIntArrayElements(array, is_copy);
    155     }
    156 };
    157 class LongArrayGetter {
    158 public:
    159     static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
    160         return _env->GetLongArrayElements(array, is_copy);
    161     }
    162 };
    163 class FloatArrayGetter {
    164 public:
    165     static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
    166         return _env->GetFloatArrayElements(array, is_copy);
    167     }
    168 };
    169 class DoubleArrayGetter {
    170 public:
    171     static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
    172         return _env->GetDoubleArrayElements(array, is_copy);
    173     }
    174 };
    175 
    176 template<typename JTYPEARRAY, typename ARRAYGETTER>
    177 static void*
    178 getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
    179     return ARRAYGETTER::Get(_env, array, is_copy);
    180 }
    181 
    182 class ByteArrayReleaser {
    183 public:
    184     static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
    185         _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
    186     }
    187 };
    188 class BooleanArrayReleaser {
    189 public:
    190     static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
    191         _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
    192     }
    193 };
    194 class CharArrayReleaser {
    195 public:
    196     static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
    197         _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
    198     }
    199 };
    200 class ShortArrayReleaser {
    201 public:
    202     static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
    203         _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
    204     }
    205 };
    206 class IntArrayReleaser {
    207 public:
    208     static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
    209         _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
    210     }
    211 };
    212 class LongArrayReleaser {
    213 public:
    214     static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
    215         _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
    216     }
    217 };
    218 class FloatArrayReleaser {
    219 public:
    220     static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
    221         _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
    222     }
    223 };
    224 class DoubleArrayReleaser {
    225 public:
    226     static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
    227         _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
    228     }
    229 };
    230 
    231 template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
    232 static void
    233 releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
    234     ARRAYRELEASER::Release(_env, array, data, commit);
    235 }
    236 
    237 static void
    238 releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
    239 {
    240     _env->ReleasePrimitiveArrayCritical(array, data,
    241                        commit ? 0 : JNI_ABORT);
    242 }
    243 
    244 static void *
    245 getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
    246     char* buf = (char*) _env->GetDirectBufferAddress(buffer);
    247     if (buf) {
    248         jint position = _env->GetIntField(buffer, positionID);
    249         jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
    250         buf += position << elementSizeShift;
    251     } else {
    252         jniThrowException(_env, "java/lang/IllegalArgumentException",
    253                           "Must use a native order direct Buffer");
    254     }
    255     return (void*) buf;
    256 }
    257 
    258 // --------------------------------------------------------------------------
    259 
    260 /*
    261  * returns the number of values glGet returns for a given pname.
    262  *
    263  * The code below is written such that pnames requiring only one values
    264  * are the default (and are not explicitely tested for). This makes the
    265  * checking code much shorter/readable/efficient.
    266  *
    267  * This means that unknown pnames (e.g.: extensions) will default to 1. If
    268  * that unknown pname needs more than 1 value, then the validation check
    269  * is incomplete and the app may crash if it passed the wrong number params.
    270  */
    271 static int getNeededCount(GLint pname) {
    272     int needed = 1;
    273 #ifdef GL_ES_VERSION_3_0
    274     // GLES 3.x pnames
    275     switch (pname) {
    276         case GL_MAX_VIEWPORT_DIMS:
    277             needed = 2;
    278             break;
    279 
    280         case GL_PROGRAM_BINARY_FORMATS:
    281             glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &needed);
    282             break;
    283     }
    284 #endif
    285 
    286 #ifdef GL_ES_VERSION_2_0
    287     // GLES 2.x pnames
    288     switch (pname) {
    289         case GL_ALIASED_LINE_WIDTH_RANGE:
    290         case GL_ALIASED_POINT_SIZE_RANGE:
    291             needed = 2;
    292             break;
    293 
    294         case GL_BLEND_COLOR:
    295         case GL_COLOR_CLEAR_VALUE:
    296         case GL_COLOR_WRITEMASK:
    297         case GL_SCISSOR_BOX:
    298         case GL_VIEWPORT:
    299             needed = 4;
    300             break;
    301 
    302         case GL_COMPRESSED_TEXTURE_FORMATS:
    303             glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
    304             break;
    305 
    306         case GL_SHADER_BINARY_FORMATS:
    307             glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
    308             break;
    309     }
    310 #endif
    311 
    312 #ifdef GL_VERSION_ES_CM_1_1
    313     // GLES 1.x pnames
    314     switch (pname) {
    315         case GL_ALIASED_LINE_WIDTH_RANGE:
    316         case GL_ALIASED_POINT_SIZE_RANGE:
    317         case GL_DEPTH_RANGE:
    318         case GL_SMOOTH_LINE_WIDTH_RANGE:
    319         case GL_SMOOTH_POINT_SIZE_RANGE:
    320             needed = 2;
    321             break;
    322 
    323         case GL_CURRENT_NORMAL:
    324         case GL_POINT_DISTANCE_ATTENUATION:
    325             needed = 3;
    326             break;
    327 
    328         case GL_COLOR_CLEAR_VALUE:
    329         case GL_COLOR_WRITEMASK:
    330         case GL_CURRENT_COLOR:
    331         case GL_CURRENT_TEXTURE_COORDS:
    332         case GL_FOG_COLOR:
    333         case GL_LIGHT_MODEL_AMBIENT:
    334         case GL_SCISSOR_BOX:
    335         case GL_VIEWPORT:
    336             needed = 4;
    337             break;
    338 
    339         case GL_MODELVIEW_MATRIX:
    340         case GL_PROJECTION_MATRIX:
    341         case GL_TEXTURE_MATRIX:
    342             needed = 16;
    343             break;
    344 
    345         case GL_COMPRESSED_TEXTURE_FORMATS:
    346             glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
    347             break;
    348     }
    349 #endif
    350     return needed;
    351 }
    352 
    353 template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
    354           typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
    355 static void
    356 get
    357   (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
    358     jint _exception = 0;
    359     const char * _exceptionType;
    360     const char * _exceptionMessage;
    361     CTYPE *params_base = (CTYPE *) 0;
    362     jint _remaining;
    363     CTYPE *params = (CTYPE *) 0;
    364     int _needed = 0;
    365 
    366     if (!params_ref) {
    367         _exception = 1;
    368         _exceptionType = "java/lang/IllegalArgumentException";
    369         _exceptionMessage = "params == null";
    370         goto exit;
    371     }
    372     if (offset < 0) {
    373         _exception = 1;
    374         _exceptionType = "java/lang/IllegalArgumentException";
    375         _exceptionMessage = "offset < 0";
    376         goto exit;
    377     }
    378     _remaining = _env->GetArrayLength(params_ref) - offset;
    379     _needed = getNeededCount(pname);
    380     // if we didn't find this pname, we just assume the user passed
    381     // an array of the right size -- this might happen with extensions
    382     // or if we forget an enum here.
    383     if (_remaining < _needed) {
    384         _exception = 1;
    385         _exceptionType = "java/lang/IllegalArgumentException";
    386         _exceptionMessage = "length - offset < needed";
    387         goto exit;
    388     }
    389     params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
    390         _env, params_ref, (jboolean *)0);
    391     params = params_base + offset;
    392 
    393     GET(
    394         (GLenum)pname,
    395         (CTYPE *)params
    396     );
    397 
    398 exit:
    399     if (params_base) {
    400         releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
    401             _env, params_ref, params_base, !_exception);
    402     }
    403     if (_exception) {
    404         jniThrowException(_env, _exceptionType, _exceptionMessage);
    405     }
    406 }
    407 
    408 
    409 template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
    410           typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
    411 static void
    412 getarray
    413   (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
    414     jint _exception = 0;
    415     const char * _exceptionType;
    416     const char * _exceptionMessage;
    417     JTYPEARRAY _array = (JTYPEARRAY) 0;
    418     jint _bufferOffset = (jint) 0;
    419     jint _remaining;
    420     CTYPE *params = (CTYPE *) 0;
    421     int _needed = 0;
    422 
    423     params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    424     _remaining /= sizeof(CTYPE);    // convert from bytes to item count
    425     _needed = getNeededCount(pname);
    426     // if we didn't find this pname, we just assume the user passed
    427     // an array of the right size -- this might happen with extensions
    428     // or if we forget an enum here.
    429     if (_needed>0 && _remaining < _needed) {
    430         _exception = 1;
    431         _exceptionType = "java/lang/IllegalArgumentException";
    432         _exceptionMessage = "remaining() < needed";
    433         goto exit;
    434     }
    435     if (params == NULL) {
    436         char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
    437             _env, _array, (jboolean *) 0);
    438         params = (CTYPE *) (_paramsBase + _bufferOffset);
    439     }
    440     GET(
    441         (GLenum)pname,
    442         (CTYPE *)params
    443     );
    444 
    445 exit:
    446     if (_array) {
    447         releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
    448             _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
    449     }
    450     if (_exception) {
    451         jniThrowException(_env, _exceptionType, _exceptionMessage);
    452     }
    453 }
    454 
    455 // --------------------------------------------------------------------------
    456 /* void glBlendBarrierKHR ( void ) */
    457 static void
    458 android_glBlendBarrierKHR__
    459   (JNIEnv *_env, jobject _this) {
    460     glBlendBarrierKHR();
    461 }
    462 
    463 /* void glDebugMessageControlKHR ( GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled ) */
    464 static void
    465 android_glDebugMessageControlKHR__IIII_3IIZ
    466   (JNIEnv *_env, jobject _this, jint source, jint type, jint severity, jint count, jintArray ids_ref, jint offset, jboolean enabled) {
    467     jint _exception = 0;
    468     const char * _exceptionType = NULL;
    469     const char * _exceptionMessage = NULL;
    470     GLuint *ids_base = (GLuint *) 0;
    471     jint _remaining;
    472     GLuint *ids = (GLuint *) 0;
    473 
    474     if (!ids_ref) {
    475         _exception = 1;
    476         _exceptionType = "java/lang/IllegalArgumentException";
    477         _exceptionMessage = "ids == null";
    478         goto exit;
    479     }
    480     if (offset < 0) {
    481         _exception = 1;
    482         _exceptionType = "java/lang/IllegalArgumentException";
    483         _exceptionMessage = "offset < 0";
    484         goto exit;
    485     }
    486     _remaining = _env->GetArrayLength(ids_ref) - offset;
    487     ids_base = (GLuint *)
    488         _env->GetIntArrayElements(ids_ref, (jboolean *)0);
    489     ids = ids_base + offset;
    490 
    491     glDebugMessageControlKHR(
    492         (GLenum)source,
    493         (GLenum)type,
    494         (GLenum)severity,
    495         (GLsizei)count,
    496         (GLuint *)ids,
    497         (GLboolean)enabled
    498     );
    499 
    500 exit:
    501     if (ids_base) {
    502         _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
    503             JNI_ABORT);
    504     }
    505     if (_exception) {
    506         jniThrowException(_env, _exceptionType, _exceptionMessage);
    507     }
    508 }
    509 
    510 /* void glDebugMessageControlKHR ( GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled ) */
    511 static void
    512 android_glDebugMessageControlKHR__IIIILjava_nio_IntBuffer_2Z
    513   (JNIEnv *_env, jobject _this, jint source, jint type, jint severity, jint count, jobject ids_buf, jboolean enabled) {
    514     jint _exception = 0;
    515     const char * _exceptionType = NULL;
    516     const char * _exceptionMessage = NULL;
    517     jintArray _array = (jintArray) 0;
    518     jint _bufferOffset = (jint) 0;
    519     jint _remaining;
    520     GLuint *ids = (GLuint *) 0;
    521 
    522     if (!ids_buf) {
    523         _exception = 1;
    524         _exceptionType = "java/lang/IllegalArgumentException";
    525         _exceptionMessage = "ids == null";
    526         goto exit;
    527     }
    528     ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    529     if (ids == NULL) {
    530         char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    531         ids = (GLuint *) (_idsBase + _bufferOffset);
    532     }
    533     glDebugMessageControlKHR(
    534         (GLenum)source,
    535         (GLenum)type,
    536         (GLenum)severity,
    537         (GLsizei)count,
    538         (GLuint *)ids,
    539         (GLboolean)enabled
    540     );
    541 
    542 exit:
    543     if (_array) {
    544         _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
    545     }
    546     if (_exception) {
    547         jniThrowException(_env, _exceptionType, _exceptionMessage);
    548     }
    549 }
    550 
    551 /* void glDebugMessageInsertKHR ( GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf ) */
    552 static void
    553 android_glDebugMessageInsertKHR__IIIILjava_lang_String_2
    554   (JNIEnv *_env, jobject _this, jint source, jint type, jint id, jint severity, jstring buf) {
    555     jint _exception = 0;
    556     const char * _exceptionType = NULL;
    557     const char * _exceptionMessage = NULL;
    558     const char* _nativebuf = 0;
    559     jint _length = 0;
    560 
    561     if (!buf) {
    562         _exception = 1;
    563         _exceptionType = "java/lang/IllegalArgumentException";
    564         _exceptionMessage = "buf == null";
    565         goto exit;
    566     }
    567     _nativebuf = _env->GetStringUTFChars(buf, 0);
    568     _length = _env->GetStringUTFLength(buf);
    569 
    570     glDebugMessageInsertKHR(
    571         (GLenum)source,
    572         (GLenum)type,
    573         (GLuint)id,
    574         (GLenum)severity,
    575         (GLsizei)_length,
    576         (GLchar *)_nativebuf
    577     );
    578 
    579 exit:
    580     if (_nativebuf) {
    581         _env->ReleaseStringUTFChars(buf, _nativebuf);
    582     }
    583 
    584     if (_exception) {
    585         jniThrowException(_env, _exceptionType, _exceptionMessage);
    586     }
    587 }
    588 
    589 /* void glDebugMessageCallbackKHR ( GLDEBUGPROCKHR callback, const void *userParam ) */
    590 static void
    591 android_glDebugMessageCallbackKHR(JNIEnv *_env, jobject _this, jobject callback) {
    592     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    593 }
    594 /* GLuint glGetDebugMessageLogKHR ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
    595 static jint
    596 android_glGetDebugMessageLogKHR__II_3II_3II_3II_3II_3II_3BI
    597   (JNIEnv *_env, jobject _this, jint count, jint bufSize, jintArray sources_ref, jint sourcesOffset, jintArray types_ref, jint typesOffset, jintArray ids_ref, jint idsOffset, jintArray severities_ref, jint severitiesOffset, jintArray lengths_ref, jint lengthsOffset, jbyteArray messageLog_ref, jint messageLogOffset) {
    598     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    599     return 0;
    600 }
    601 
    602 /* GLuint glGetDebugMessageLogKHR ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
    603 static uint
    604 android_glGetDebugMessageLogKHR__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2
    605   (JNIEnv *_env, jobject _this, jint count, jobject sources_ref, jobject types_ref, jobject ids_ref, jobject severities_ref, jobject lengths_ref, jobject messageLog_ref) {
    606     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    607     return 0;
    608 }
    609 
    610 /* GLuint glGetDebugMessageLogKHR ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
    611 static jobjectArray
    612 android_glGetDebugMessageLogKHR__I_3II_3II_3II_3II
    613   (JNIEnv *_env, jobject _this, jint count, jintArray sources_ref, jint sourcesOffset, jintArray types_ref, jint typesOffset, jintArray ids_ref, jint idsOffset, jintArray severities_ref, jint severitiesOffset) {
    614     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    615     return 0;
    616 }
    617 
    618 /* GLuint glGetDebugMessageLogKHR ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
    619 static jobjectArray
    620 android_glGetDebugMessageLogKHR__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
    621   (JNIEnv *_env, jobject _this, jint count, jobject sources_ref, jobject types_ref, jobject ids_ref, jobject severities_ref) {
    622     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    623     return 0;
    624 }
    625 /* void glPushDebugGroupKHR ( GLenum source, GLuint id, GLsizei length, const GLchar *message ) */
    626 static void
    627 android_glPushDebugGroupKHR__IIILjava_lang_String_2
    628   (JNIEnv *_env, jobject _this, jint source, jint id, jint length, jstring message) {
    629     jint _exception = 0;
    630     const char * _exceptionType = NULL;
    631     const char * _exceptionMessage = NULL;
    632     const char* _nativemessage = 0;
    633 
    634     if (!message) {
    635         _exception = 1;
    636         _exceptionType = "java/lang/IllegalArgumentException";
    637         _exceptionMessage = "message == null";
    638         goto exit;
    639     }
    640     _nativemessage = _env->GetStringUTFChars(message, 0);
    641 
    642     glPushDebugGroupKHR(
    643         (GLenum)source,
    644         (GLuint)id,
    645         (GLsizei)length,
    646         (GLchar *)_nativemessage
    647     );
    648 
    649 exit:
    650     if (_nativemessage) {
    651         _env->ReleaseStringUTFChars(message, _nativemessage);
    652     }
    653 
    654     if (_exception) {
    655         jniThrowException(_env, _exceptionType, _exceptionMessage);
    656     }
    657 }
    658 
    659 /* void glPopDebugGroupKHR ( void ) */
    660 static void
    661 android_glPopDebugGroupKHR__
    662   (JNIEnv *_env, jobject _this) {
    663     glPopDebugGroupKHR();
    664 }
    665 
    666 /* void glObjectLabelKHR ( GLenum identifier, GLuint name, GLsizei length, const GLchar *label ) */
    667 static void
    668 android_glObjectLabelKHR__IIILjava_lang_String_2
    669   (JNIEnv *_env, jobject _this, jint identifier, jint name, jint length, jstring label) {
    670     jint _exception = 0;
    671     const char * _exceptionType = NULL;
    672     const char * _exceptionMessage = NULL;
    673     const char* _nativelabel = 0;
    674 
    675     if (label) {
    676         _nativelabel = _env->GetStringUTFChars(label, 0);
    677     }
    678 
    679     glObjectLabelKHR(
    680         (GLenum)identifier,
    681         (GLuint)name,
    682         (GLsizei)length,
    683         (GLchar *)_nativelabel
    684     );
    685     if (_nativelabel) {
    686         _env->ReleaseStringUTFChars(label, _nativelabel);
    687     }
    688 
    689     if (_exception) {
    690         jniThrowException(_env, _exceptionType, _exceptionMessage);
    691     }
    692 }
    693 
    694 /* void glGetObjectLabelKHR ( GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label ) */
    695 static jstring
    696 android_glGetObjectLabelKHR(JNIEnv *_env, jobject _this, jint identifier, jint name) {
    697     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    698     return NULL;
    699 }
    700 
    701 /* void glObjectPtrLabelKHR ( const void *ptr, GLsizei length, const GLchar *label ) */
    702 static void
    703 android_glObjectPtrLabelKHR(JNIEnv *_env, jobject _this, jlong ptr, jstring label) {
    704     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    705 }
    706 
    707 /* void glGetObjectPtrLabelKHR ( const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label ) */
    708 static jstring
    709 android_glGetObjectPtrLabelKHR(JNIEnv *_env, jobject _this, jlong ptr) {
    710     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    711     return NULL;
    712 }
    713 
    714 /* void glGetPointervKHR ( GLenum pname, void **params ) */
    715 static jobject
    716 android_glGetDebugMessageCallbackKHR(JNIEnv *_env, jobject _this) {
    717     jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
    718     return NULL;
    719 }
    720 
    721 /* void glMinSampleShadingOES ( GLfloat value ) */
    722 static void
    723 android_glMinSampleShadingOES__F
    724   (JNIEnv *_env, jobject _this, jfloat value) {
    725     glMinSampleShadingOES(
    726         (GLfloat)value
    727     );
    728 }
    729 
    730 /* void glTexStorage3DMultisampleOES ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations ) */
    731 static void
    732 android_glTexStorage3DMultisampleOES__IIIIIIZ
    733   (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height, jint depth, jboolean fixedsamplelocations) {
    734     glTexStorage3DMultisampleOES(
    735         (GLenum)target,
    736         (GLsizei)samples,
    737         (GLenum)internalformat,
    738         (GLsizei)width,
    739         (GLsizei)height,
    740         (GLsizei)depth,
    741         (GLboolean)fixedsamplelocations
    742     );
    743 }
    744 
    745 /* void glCopyImageSubDataEXT ( GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth ) */
    746 static void
    747 android_glCopyImageSubDataEXT__IIIIIIIIIIIIIII
    748   (JNIEnv *_env, jobject _this, jint srcName, jint srcTarget, jint srcLevel, jint srcX, jint srcY, jint srcZ, jint dstName, jint dstTarget, jint dstLevel, jint dstX, jint dstY, jint dstZ, jint srcWidth, jint srcHeight, jint srcDepth) {
    749     glCopyImageSubDataEXT(
    750         (GLuint)srcName,
    751         (GLenum)srcTarget,
    752         (GLint)srcLevel,
    753         (GLint)srcX,
    754         (GLint)srcY,
    755         (GLint)srcZ,
    756         (GLuint)dstName,
    757         (GLenum)dstTarget,
    758         (GLint)dstLevel,
    759         (GLint)dstX,
    760         (GLint)dstY,
    761         (GLint)dstZ,
    762         (GLsizei)srcWidth,
    763         (GLsizei)srcHeight,
    764         (GLsizei)srcDepth
    765     );
    766 }
    767 
    768 /* void glEnableiEXT ( GLenum target, GLuint index ) */
    769 static void
    770 android_glEnableiEXT__II
    771   (JNIEnv *_env, jobject _this, jint target, jint index) {
    772     glEnableiEXT(
    773         (GLenum)target,
    774         (GLuint)index
    775     );
    776 }
    777 
    778 /* void glDisableiEXT ( GLenum target, GLuint index ) */
    779 static void
    780 android_glDisableiEXT__II
    781   (JNIEnv *_env, jobject _this, jint target, jint index) {
    782     glDisableiEXT(
    783         (GLenum)target,
    784         (GLuint)index
    785     );
    786 }
    787 
    788 /* void glBlendEquationiEXT ( GLuint buf, GLenum mode ) */
    789 static void
    790 android_glBlendEquationiEXT__II
    791   (JNIEnv *_env, jobject _this, jint buf, jint mode) {
    792     glBlendEquationiEXT(
    793         (GLuint)buf,
    794         (GLenum)mode
    795     );
    796 }
    797 
    798 /* void glBlendEquationSeparateiEXT ( GLuint buf, GLenum modeRGB, GLenum modeAlpha ) */
    799 static void
    800 android_glBlendEquationSeparateiEXT__III
    801   (JNIEnv *_env, jobject _this, jint buf, jint modeRGB, jint modeAlpha) {
    802     glBlendEquationSeparateiEXT(
    803         (GLuint)buf,
    804         (GLenum)modeRGB,
    805         (GLenum)modeAlpha
    806     );
    807 }
    808 
    809 /* void glBlendFunciEXT ( GLuint buf, GLenum src, GLenum dst ) */
    810 static void
    811 android_glBlendFunciEXT__III
    812   (JNIEnv *_env, jobject _this, jint buf, jint src, jint dst) {
    813     glBlendFunciEXT(
    814         (GLuint)buf,
    815         (GLenum)src,
    816         (GLenum)dst
    817     );
    818 }
    819 
    820 /* void glBlendFuncSeparateiEXT ( GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha ) */
    821 static void
    822 android_glBlendFuncSeparateiEXT__IIIII
    823   (JNIEnv *_env, jobject _this, jint buf, jint srcRGB, jint dstRGB, jint srcAlpha, jint dstAlpha) {
    824     glBlendFuncSeparateiEXT(
    825         (GLuint)buf,
    826         (GLenum)srcRGB,
    827         (GLenum)dstRGB,
    828         (GLenum)srcAlpha,
    829         (GLenum)dstAlpha
    830     );
    831 }
    832 
    833 /* void glColorMaskiEXT ( GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a ) */
    834 static void
    835 android_glColorMaskiEXT__IZZZZ
    836   (JNIEnv *_env, jobject _this, jint index, jboolean r, jboolean g, jboolean b, jboolean a) {
    837     glColorMaskiEXT(
    838         (GLuint)index,
    839         (GLboolean)r,
    840         (GLboolean)g,
    841         (GLboolean)b,
    842         (GLboolean)a
    843     );
    844 }
    845 
    846 /* GLboolean glIsEnablediEXT ( GLenum target, GLuint index ) */
    847 static jboolean
    848 android_glIsEnablediEXT__II
    849   (JNIEnv *_env, jobject _this, jint target, jint index) {
    850     GLboolean _returnValue;
    851     _returnValue = glIsEnablediEXT(
    852         (GLenum)target,
    853         (GLuint)index
    854     );
    855     return (jboolean)_returnValue;
    856 }
    857 
    858 /* void glFramebufferTextureEXT ( GLenum target, GLenum attachment, GLuint texture, GLint level ) */
    859 static void
    860 android_glFramebufferTextureEXT__IIII
    861   (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level) {
    862     glFramebufferTextureEXT(
    863         (GLenum)target,
    864         (GLenum)attachment,
    865         (GLuint)texture,
    866         (GLint)level
    867     );
    868 }
    869 
    870 /* void glPrimitiveBoundingBoxEXT ( GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW ) */
    871 static void
    872 android_glPrimitiveBoundingBoxEXT__FFFFFFFF
    873   (JNIEnv *_env, jobject _this, jfloat minX, jfloat minY, jfloat minZ, jfloat minW, jfloat maxX, jfloat maxY, jfloat maxZ, jfloat maxW) {
    874     glPrimitiveBoundingBoxEXT(
    875         (GLfloat)minX,
    876         (GLfloat)minY,
    877         (GLfloat)minZ,
    878         (GLfloat)minW,
    879         (GLfloat)maxX,
    880         (GLfloat)maxY,
    881         (GLfloat)maxZ,
    882         (GLfloat)maxW
    883     );
    884 }
    885 
    886 /* void glPatchParameteriEXT ( GLenum pname, GLint value ) */
    887 static void
    888 android_glPatchParameteriEXT__II
    889   (JNIEnv *_env, jobject _this, jint pname, jint value) {
    890     glPatchParameteriEXT(
    891         (GLenum)pname,
    892         (GLint)value
    893     );
    894 }
    895 
    896 /* void glTexParameterIivEXT ( GLenum target, GLenum pname, const GLint *params ) */
    897 static void
    898 android_glTexParameterIivEXT__II_3II
    899   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
    900     jint _exception = 0;
    901     const char * _exceptionType = NULL;
    902     const char * _exceptionMessage = NULL;
    903     GLint *params_base = (GLint *) 0;
    904     jint _remaining;
    905     GLint *params = (GLint *) 0;
    906 
    907     if (!params_ref) {
    908         _exception = 1;
    909         _exceptionType = "java/lang/IllegalArgumentException";
    910         _exceptionMessage = "params == null";
    911         goto exit;
    912     }
    913     if (offset < 0) {
    914         _exception = 1;
    915         _exceptionType = "java/lang/IllegalArgumentException";
    916         _exceptionMessage = "offset < 0";
    917         goto exit;
    918     }
    919     _remaining = _env->GetArrayLength(params_ref) - offset;
    920     params_base = (GLint *)
    921         _env->GetIntArrayElements(params_ref, (jboolean *)0);
    922     params = params_base + offset;
    923 
    924     glTexParameterIivEXT(
    925         (GLenum)target,
    926         (GLenum)pname,
    927         (GLint *)params
    928     );
    929 
    930 exit:
    931     if (params_base) {
    932         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
    933             JNI_ABORT);
    934     }
    935     if (_exception) {
    936         jniThrowException(_env, _exceptionType, _exceptionMessage);
    937     }
    938 }
    939 
    940 /* void glTexParameterIivEXT ( GLenum target, GLenum pname, const GLint *params ) */
    941 static void
    942 android_glTexParameterIivEXT__IILjava_nio_IntBuffer_2
    943   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
    944     jint _exception = 0;
    945     const char * _exceptionType = NULL;
    946     const char * _exceptionMessage = NULL;
    947     jintArray _array = (jintArray) 0;
    948     jint _bufferOffset = (jint) 0;
    949     jint _remaining;
    950     GLint *params = (GLint *) 0;
    951 
    952     if (!params_buf) {
    953         _exception = 1;
    954         _exceptionType = "java/lang/IllegalArgumentException";
    955         _exceptionMessage = "params == null";
    956         goto exit;
    957     }
    958     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
    959     if (params == NULL) {
    960         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
    961         params = (GLint *) (_paramsBase + _bufferOffset);
    962     }
    963     glTexParameterIivEXT(
    964         (GLenum)target,
    965         (GLenum)pname,
    966         (GLint *)params
    967     );
    968 
    969 exit:
    970     if (_array) {
    971         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
    972     }
    973     if (_exception) {
    974         jniThrowException(_env, _exceptionType, _exceptionMessage);
    975     }
    976 }
    977 
    978 /* void glTexParameterIuivEXT ( GLenum target, GLenum pname, const GLuint *params ) */
    979 static void
    980 android_glTexParameterIuivEXT__II_3II
    981   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
    982     jint _exception = 0;
    983     const char * _exceptionType = NULL;
    984     const char * _exceptionMessage = NULL;
    985     GLuint *params_base = (GLuint *) 0;
    986     jint _remaining;
    987     GLuint *params = (GLuint *) 0;
    988 
    989     if (!params_ref) {
    990         _exception = 1;
    991         _exceptionType = "java/lang/IllegalArgumentException";
    992         _exceptionMessage = "params == null";
    993         goto exit;
    994     }
    995     if (offset < 0) {
    996         _exception = 1;
    997         _exceptionType = "java/lang/IllegalArgumentException";
    998         _exceptionMessage = "offset < 0";
    999         goto exit;
   1000     }
   1001     _remaining = _env->GetArrayLength(params_ref) - offset;
   1002     params_base = (GLuint *)
   1003         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1004     params = params_base + offset;
   1005 
   1006     glTexParameterIuivEXT(
   1007         (GLenum)target,
   1008         (GLenum)pname,
   1009         (GLuint *)params
   1010     );
   1011 
   1012 exit:
   1013     if (params_base) {
   1014         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1015             JNI_ABORT);
   1016     }
   1017     if (_exception) {
   1018         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1019     }
   1020 }
   1021 
   1022 /* void glTexParameterIuivEXT ( GLenum target, GLenum pname, const GLuint *params ) */
   1023 static void
   1024 android_glTexParameterIuivEXT__IILjava_nio_IntBuffer_2
   1025   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   1026     jint _exception = 0;
   1027     const char * _exceptionType = NULL;
   1028     const char * _exceptionMessage = NULL;
   1029     jintArray _array = (jintArray) 0;
   1030     jint _bufferOffset = (jint) 0;
   1031     jint _remaining;
   1032     GLuint *params = (GLuint *) 0;
   1033 
   1034     if (!params_buf) {
   1035         _exception = 1;
   1036         _exceptionType = "java/lang/IllegalArgumentException";
   1037         _exceptionMessage = "params == null";
   1038         goto exit;
   1039     }
   1040     params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1041     if (params == NULL) {
   1042         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1043         params = (GLuint *) (_paramsBase + _bufferOffset);
   1044     }
   1045     glTexParameterIuivEXT(
   1046         (GLenum)target,
   1047         (GLenum)pname,
   1048         (GLuint *)params
   1049     );
   1050 
   1051 exit:
   1052     if (_array) {
   1053         _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
   1054     }
   1055     if (_exception) {
   1056         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1057     }
   1058 }
   1059 
   1060 /* void glGetTexParameterIivEXT ( GLenum target, GLenum pname, GLint *params ) */
   1061 static void
   1062 android_glGetTexParameterIivEXT__II_3II
   1063   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   1064     jint _exception = 0;
   1065     const char * _exceptionType = NULL;
   1066     const char * _exceptionMessage = NULL;
   1067     GLint *params_base = (GLint *) 0;
   1068     jint _remaining;
   1069     GLint *params = (GLint *) 0;
   1070 
   1071     if (!params_ref) {
   1072         _exception = 1;
   1073         _exceptionType = "java/lang/IllegalArgumentException";
   1074         _exceptionMessage = "params == null";
   1075         goto exit;
   1076     }
   1077     if (offset < 0) {
   1078         _exception = 1;
   1079         _exceptionType = "java/lang/IllegalArgumentException";
   1080         _exceptionMessage = "offset < 0";
   1081         goto exit;
   1082     }
   1083     _remaining = _env->GetArrayLength(params_ref) - offset;
   1084     params_base = (GLint *)
   1085         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1086     params = params_base + offset;
   1087 
   1088     glGetTexParameterIivEXT(
   1089         (GLenum)target,
   1090         (GLenum)pname,
   1091         (GLint *)params
   1092     );
   1093 
   1094 exit:
   1095     if (params_base) {
   1096         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1097             _exception ? JNI_ABORT: 0);
   1098     }
   1099     if (_exception) {
   1100         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1101     }
   1102 }
   1103 
   1104 /* void glGetTexParameterIivEXT ( GLenum target, GLenum pname, GLint *params ) */
   1105 static void
   1106 android_glGetTexParameterIivEXT__IILjava_nio_IntBuffer_2
   1107   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   1108     jint _exception = 0;
   1109     const char * _exceptionType = NULL;
   1110     const char * _exceptionMessage = NULL;
   1111     jintArray _array = (jintArray) 0;
   1112     jint _bufferOffset = (jint) 0;
   1113     jint _remaining;
   1114     GLint *params = (GLint *) 0;
   1115 
   1116     if (!params_buf) {
   1117         _exception = 1;
   1118         _exceptionType = "java/lang/IllegalArgumentException";
   1119         _exceptionMessage = "params == null";
   1120         goto exit;
   1121     }
   1122     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1123     if (params == NULL) {
   1124         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1125         params = (GLint *) (_paramsBase + _bufferOffset);
   1126     }
   1127     glGetTexParameterIivEXT(
   1128         (GLenum)target,
   1129         (GLenum)pname,
   1130         (GLint *)params
   1131     );
   1132 
   1133 exit:
   1134     if (_array) {
   1135         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   1136     }
   1137     if (_exception) {
   1138         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1139     }
   1140 }
   1141 
   1142 /* void glGetTexParameterIuivEXT ( GLenum target, GLenum pname, GLuint *params ) */
   1143 static void
   1144 android_glGetTexParameterIuivEXT__II_3II
   1145   (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
   1146     jint _exception = 0;
   1147     const char * _exceptionType = NULL;
   1148     const char * _exceptionMessage = NULL;
   1149     GLuint *params_base = (GLuint *) 0;
   1150     jint _remaining;
   1151     GLuint *params = (GLuint *) 0;
   1152 
   1153     if (!params_ref) {
   1154         _exception = 1;
   1155         _exceptionType = "java/lang/IllegalArgumentException";
   1156         _exceptionMessage = "params == null";
   1157         goto exit;
   1158     }
   1159     if (offset < 0) {
   1160         _exception = 1;
   1161         _exceptionType = "java/lang/IllegalArgumentException";
   1162         _exceptionMessage = "offset < 0";
   1163         goto exit;
   1164     }
   1165     _remaining = _env->GetArrayLength(params_ref) - offset;
   1166     params_base = (GLuint *)
   1167         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1168     params = params_base + offset;
   1169 
   1170     glGetTexParameterIuivEXT(
   1171         (GLenum)target,
   1172         (GLenum)pname,
   1173         (GLuint *)params
   1174     );
   1175 
   1176 exit:
   1177     if (params_base) {
   1178         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1179             _exception ? JNI_ABORT: 0);
   1180     }
   1181     if (_exception) {
   1182         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1183     }
   1184 }
   1185 
   1186 /* void glGetTexParameterIuivEXT ( GLenum target, GLenum pname, GLuint *params ) */
   1187 static void
   1188 android_glGetTexParameterIuivEXT__IILjava_nio_IntBuffer_2
   1189   (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
   1190     jint _exception = 0;
   1191     const char * _exceptionType = NULL;
   1192     const char * _exceptionMessage = NULL;
   1193     jintArray _array = (jintArray) 0;
   1194     jint _bufferOffset = (jint) 0;
   1195     jint _remaining;
   1196     GLuint *params = (GLuint *) 0;
   1197 
   1198     if (!params_buf) {
   1199         _exception = 1;
   1200         _exceptionType = "java/lang/IllegalArgumentException";
   1201         _exceptionMessage = "params == null";
   1202         goto exit;
   1203     }
   1204     params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1205     if (params == NULL) {
   1206         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1207         params = (GLuint *) (_paramsBase + _bufferOffset);
   1208     }
   1209     glGetTexParameterIuivEXT(
   1210         (GLenum)target,
   1211         (GLenum)pname,
   1212         (GLuint *)params
   1213     );
   1214 
   1215 exit:
   1216     if (_array) {
   1217         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   1218     }
   1219     if (_exception) {
   1220         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1221     }
   1222 }
   1223 
   1224 /* void glSamplerParameterIivEXT ( GLuint sampler, GLenum pname, const GLint *param ) */
   1225 static void
   1226 android_glSamplerParameterIivEXT__II_3II
   1227   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
   1228     jint _exception = 0;
   1229     const char * _exceptionType = NULL;
   1230     const char * _exceptionMessage = NULL;
   1231     GLint *param_base = (GLint *) 0;
   1232     jint _remaining;
   1233     GLint *param = (GLint *) 0;
   1234 
   1235     if (!param_ref) {
   1236         _exception = 1;
   1237         _exceptionType = "java/lang/IllegalArgumentException";
   1238         _exceptionMessage = "param == null";
   1239         goto exit;
   1240     }
   1241     if (offset < 0) {
   1242         _exception = 1;
   1243         _exceptionType = "java/lang/IllegalArgumentException";
   1244         _exceptionMessage = "offset < 0";
   1245         goto exit;
   1246     }
   1247     _remaining = _env->GetArrayLength(param_ref) - offset;
   1248     param_base = (GLint *)
   1249         _env->GetIntArrayElements(param_ref, (jboolean *)0);
   1250     param = param_base + offset;
   1251 
   1252     glSamplerParameterIivEXT(
   1253         (GLuint)sampler,
   1254         (GLenum)pname,
   1255         (GLint *)param
   1256     );
   1257 
   1258 exit:
   1259     if (param_base) {
   1260         _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
   1261             JNI_ABORT);
   1262     }
   1263     if (_exception) {
   1264         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1265     }
   1266 }
   1267 
   1268 /* void glSamplerParameterIivEXT ( GLuint sampler, GLenum pname, const GLint *param ) */
   1269 static void
   1270 android_glSamplerParameterIivEXT__IILjava_nio_IntBuffer_2
   1271   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
   1272     jint _exception = 0;
   1273     const char * _exceptionType = NULL;
   1274     const char * _exceptionMessage = NULL;
   1275     jintArray _array = (jintArray) 0;
   1276     jint _bufferOffset = (jint) 0;
   1277     jint _remaining;
   1278     GLint *param = (GLint *) 0;
   1279 
   1280     if (!param_buf) {
   1281         _exception = 1;
   1282         _exceptionType = "java/lang/IllegalArgumentException";
   1283         _exceptionMessage = "param == null";
   1284         goto exit;
   1285     }
   1286     param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1287     if (param == NULL) {
   1288         char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1289         param = (GLint *) (_paramBase + _bufferOffset);
   1290     }
   1291     glSamplerParameterIivEXT(
   1292         (GLuint)sampler,
   1293         (GLenum)pname,
   1294         (GLint *)param
   1295     );
   1296 
   1297 exit:
   1298     if (_array) {
   1299         _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
   1300     }
   1301     if (_exception) {
   1302         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1303     }
   1304 }
   1305 
   1306 /* void glSamplerParameterIuivEXT ( GLuint sampler, GLenum pname, const GLuint *param ) */
   1307 static void
   1308 android_glSamplerParameterIuivEXT__II_3II
   1309   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
   1310     jint _exception = 0;
   1311     const char * _exceptionType = NULL;
   1312     const char * _exceptionMessage = NULL;
   1313     GLuint *param_base = (GLuint *) 0;
   1314     jint _remaining;
   1315     GLuint *param = (GLuint *) 0;
   1316 
   1317     if (!param_ref) {
   1318         _exception = 1;
   1319         _exceptionType = "java/lang/IllegalArgumentException";
   1320         _exceptionMessage = "param == null";
   1321         goto exit;
   1322     }
   1323     if (offset < 0) {
   1324         _exception = 1;
   1325         _exceptionType = "java/lang/IllegalArgumentException";
   1326         _exceptionMessage = "offset < 0";
   1327         goto exit;
   1328     }
   1329     _remaining = _env->GetArrayLength(param_ref) - offset;
   1330     param_base = (GLuint *)
   1331         _env->GetIntArrayElements(param_ref, (jboolean *)0);
   1332     param = param_base + offset;
   1333 
   1334     glSamplerParameterIuivEXT(
   1335         (GLuint)sampler,
   1336         (GLenum)pname,
   1337         (GLuint *)param
   1338     );
   1339 
   1340 exit:
   1341     if (param_base) {
   1342         _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
   1343             JNI_ABORT);
   1344     }
   1345     if (_exception) {
   1346         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1347     }
   1348 }
   1349 
   1350 /* void glSamplerParameterIuivEXT ( GLuint sampler, GLenum pname, const GLuint *param ) */
   1351 static void
   1352 android_glSamplerParameterIuivEXT__IILjava_nio_IntBuffer_2
   1353   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
   1354     jint _exception = 0;
   1355     const char * _exceptionType = NULL;
   1356     const char * _exceptionMessage = NULL;
   1357     jintArray _array = (jintArray) 0;
   1358     jint _bufferOffset = (jint) 0;
   1359     jint _remaining;
   1360     GLuint *param = (GLuint *) 0;
   1361 
   1362     if (!param_buf) {
   1363         _exception = 1;
   1364         _exceptionType = "java/lang/IllegalArgumentException";
   1365         _exceptionMessage = "param == null";
   1366         goto exit;
   1367     }
   1368     param = (GLuint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1369     if (param == NULL) {
   1370         char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1371         param = (GLuint *) (_paramBase + _bufferOffset);
   1372     }
   1373     glSamplerParameterIuivEXT(
   1374         (GLuint)sampler,
   1375         (GLenum)pname,
   1376         (GLuint *)param
   1377     );
   1378 
   1379 exit:
   1380     if (_array) {
   1381         _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
   1382     }
   1383     if (_exception) {
   1384         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1385     }
   1386 }
   1387 
   1388 /* void glGetSamplerParameterIivEXT ( GLuint sampler, GLenum pname, GLint *params ) */
   1389 static void
   1390 android_glGetSamplerParameterIivEXT__II_3II
   1391   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
   1392     jint _exception = 0;
   1393     const char * _exceptionType = NULL;
   1394     const char * _exceptionMessage = NULL;
   1395     GLint *params_base = (GLint *) 0;
   1396     jint _remaining;
   1397     GLint *params = (GLint *) 0;
   1398 
   1399     if (!params_ref) {
   1400         _exception = 1;
   1401         _exceptionType = "java/lang/IllegalArgumentException";
   1402         _exceptionMessage = "params == null";
   1403         goto exit;
   1404     }
   1405     if (offset < 0) {
   1406         _exception = 1;
   1407         _exceptionType = "java/lang/IllegalArgumentException";
   1408         _exceptionMessage = "offset < 0";
   1409         goto exit;
   1410     }
   1411     _remaining = _env->GetArrayLength(params_ref) - offset;
   1412     params_base = (GLint *)
   1413         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1414     params = params_base + offset;
   1415 
   1416     glGetSamplerParameterIivEXT(
   1417         (GLuint)sampler,
   1418         (GLenum)pname,
   1419         (GLint *)params
   1420     );
   1421 
   1422 exit:
   1423     if (params_base) {
   1424         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1425             _exception ? JNI_ABORT: 0);
   1426     }
   1427     if (_exception) {
   1428         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1429     }
   1430 }
   1431 
   1432 /* void glGetSamplerParameterIivEXT ( GLuint sampler, GLenum pname, GLint *params ) */
   1433 static void
   1434 android_glGetSamplerParameterIivEXT__IILjava_nio_IntBuffer_2
   1435   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
   1436     jint _exception = 0;
   1437     const char * _exceptionType = NULL;
   1438     const char * _exceptionMessage = NULL;
   1439     jintArray _array = (jintArray) 0;
   1440     jint _bufferOffset = (jint) 0;
   1441     jint _remaining;
   1442     GLint *params = (GLint *) 0;
   1443 
   1444     if (!params_buf) {
   1445         _exception = 1;
   1446         _exceptionType = "java/lang/IllegalArgumentException";
   1447         _exceptionMessage = "params == null";
   1448         goto exit;
   1449     }
   1450     params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1451     if (params == NULL) {
   1452         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1453         params = (GLint *) (_paramsBase + _bufferOffset);
   1454     }
   1455     glGetSamplerParameterIivEXT(
   1456         (GLuint)sampler,
   1457         (GLenum)pname,
   1458         (GLint *)params
   1459     );
   1460 
   1461 exit:
   1462     if (_array) {
   1463         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   1464     }
   1465     if (_exception) {
   1466         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1467     }
   1468 }
   1469 
   1470 /* void glGetSamplerParameterIuivEXT ( GLuint sampler, GLenum pname, GLuint *params ) */
   1471 static void
   1472 android_glGetSamplerParameterIuivEXT__II_3II
   1473   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
   1474     jint _exception = 0;
   1475     const char * _exceptionType = NULL;
   1476     const char * _exceptionMessage = NULL;
   1477     GLuint *params_base = (GLuint *) 0;
   1478     jint _remaining;
   1479     GLuint *params = (GLuint *) 0;
   1480 
   1481     if (!params_ref) {
   1482         _exception = 1;
   1483         _exceptionType = "java/lang/IllegalArgumentException";
   1484         _exceptionMessage = "params == null";
   1485         goto exit;
   1486     }
   1487     if (offset < 0) {
   1488         _exception = 1;
   1489         _exceptionType = "java/lang/IllegalArgumentException";
   1490         _exceptionMessage = "offset < 0";
   1491         goto exit;
   1492     }
   1493     _remaining = _env->GetArrayLength(params_ref) - offset;
   1494     params_base = (GLuint *)
   1495         _env->GetIntArrayElements(params_ref, (jboolean *)0);
   1496     params = params_base + offset;
   1497 
   1498     glGetSamplerParameterIuivEXT(
   1499         (GLuint)sampler,
   1500         (GLenum)pname,
   1501         (GLuint *)params
   1502     );
   1503 
   1504 exit:
   1505     if (params_base) {
   1506         _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
   1507             _exception ? JNI_ABORT: 0);
   1508     }
   1509     if (_exception) {
   1510         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1511     }
   1512 }
   1513 
   1514 /* void glGetSamplerParameterIuivEXT ( GLuint sampler, GLenum pname, GLuint *params ) */
   1515 static void
   1516 android_glGetSamplerParameterIuivEXT__IILjava_nio_IntBuffer_2
   1517   (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
   1518     jint _exception = 0;
   1519     const char * _exceptionType = NULL;
   1520     const char * _exceptionMessage = NULL;
   1521     jintArray _array = (jintArray) 0;
   1522     jint _bufferOffset = (jint) 0;
   1523     jint _remaining;
   1524     GLuint *params = (GLuint *) 0;
   1525 
   1526     if (!params_buf) {
   1527         _exception = 1;
   1528         _exceptionType = "java/lang/IllegalArgumentException";
   1529         _exceptionMessage = "params == null";
   1530         goto exit;
   1531     }
   1532     params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
   1533     if (params == NULL) {
   1534         char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
   1535         params = (GLuint *) (_paramsBase + _bufferOffset);
   1536     }
   1537     glGetSamplerParameterIuivEXT(
   1538         (GLuint)sampler,
   1539         (GLenum)pname,
   1540         (GLuint *)params
   1541     );
   1542 
   1543 exit:
   1544     if (_array) {
   1545         _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
   1546     }
   1547     if (_exception) {
   1548         jniThrowException(_env, _exceptionType, _exceptionMessage);
   1549     }
   1550 }
   1551 
   1552 /* void glTexBufferEXT ( GLenum target, GLenum internalformat, GLuint buffer ) */
   1553 static void
   1554 android_glTexBufferEXT__III
   1555   (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint buffer) {
   1556     glTexBufferEXT(
   1557         (GLenum)target,
   1558         (GLenum)internalformat,
   1559         (GLuint)buffer
   1560     );
   1561 }
   1562 
   1563 /* void glTexBufferRangeEXT ( GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
   1564 static void
   1565 android_glTexBufferRangeEXT__IIIII
   1566   (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint buffer, jint offset, jint size) {
   1567     glTexBufferRangeEXT(
   1568         (GLenum)target,
   1569         (GLenum)internalformat,
   1570         (GLuint)buffer,
   1571         (GLintptr)offset,
   1572         (GLsizeiptr)size
   1573     );
   1574 }
   1575 
   1576 static const char *classPathName = "android/opengl/GLES31Ext";
   1577 
   1578 static const JNINativeMethod methods[] = {
   1579 {"_nativeClassInit", "()V", (void*)nativeClassInit },
   1580 {"glBlendBarrierKHR", "()V", (void *) android_glBlendBarrierKHR__ },
   1581 {"glDebugMessageControlKHR", "(IIII[IIZ)V", (void *) android_glDebugMessageControlKHR__IIII_3IIZ },
   1582 {"glDebugMessageControlKHR", "(IIIILjava/nio/IntBuffer;Z)V", (void *) android_glDebugMessageControlKHR__IIIILjava_nio_IntBuffer_2Z },
   1583 {"glDebugMessageInsertKHR", "(IIIILjava/lang/String;)V", (void *) android_glDebugMessageInsertKHR__IIIILjava_lang_String_2 },
   1584 {"glDebugMessageCallbackKHR", "(Landroid/opengl/GLES31Ext$DebugProcKHR;)V", (void *) android_glDebugMessageCallbackKHR },
   1585 {"glGetDebugMessageLogKHR", "(II[II[II[II[II[II[BI)I", (void *) android_glGetDebugMessageLogKHR__II_3II_3II_3II_3II_3II_3BI },
   1586 {"glGetDebugMessageLogKHR", "(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I", (void *) android_glGetDebugMessageLogKHR__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2 },
   1587 {"glGetDebugMessageLogKHR", "(I[II[II[II[II)[Ljava/lang/String;", (void *) android_glGetDebugMessageLogKHR__I_3II_3II_3II_3II },
   1588 {"glGetDebugMessageLogKHR", "(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;", (void *) android_glGetDebugMessageLogKHR__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
   1589 {"glPushDebugGroupKHR", "(IIILjava/lang/String;)V", (void *) android_glPushDebugGroupKHR__IIILjava_lang_String_2 },
   1590 {"glPopDebugGroupKHR", "()V", (void *) android_glPopDebugGroupKHR__ },
   1591 {"glObjectLabelKHR", "(IIILjava/lang/String;)V", (void *) android_glObjectLabelKHR__IIILjava_lang_String_2 },
   1592 {"glGetObjectLabelKHR", "(II)Ljava/lang/String;", (void *) android_glGetObjectLabelKHR },
   1593 {"glObjectPtrLabelKHR", "(JLjava/lang/String;)V", (void *) android_glObjectPtrLabelKHR },
   1594 {"glGetObjectPtrLabelKHR", "(J)Ljava/lang/String;", (void *) android_glGetObjectPtrLabelKHR },
   1595 {"glGetDebugMessageCallbackKHR", "()Landroid/opengl/GLES31Ext$DebugProcKHR;", (void *) android_glGetDebugMessageCallbackKHR },
   1596 {"glMinSampleShadingOES", "(F)V", (void *) android_glMinSampleShadingOES__F },
   1597 {"glTexStorage3DMultisampleOES", "(IIIIIIZ)V", (void *) android_glTexStorage3DMultisampleOES__IIIIIIZ },
   1598 {"glCopyImageSubDataEXT", "(IIIIIIIIIIIIIII)V", (void *) android_glCopyImageSubDataEXT__IIIIIIIIIIIIIII },
   1599 {"glEnableiEXT", "(II)V", (void *) android_glEnableiEXT__II },
   1600 {"glDisableiEXT", "(II)V", (void *) android_glDisableiEXT__II },
   1601 {"glBlendEquationiEXT", "(II)V", (void *) android_glBlendEquationiEXT__II },
   1602 {"glBlendEquationSeparateiEXT", "(III)V", (void *) android_glBlendEquationSeparateiEXT__III },
   1603 {"glBlendFunciEXT", "(III)V", (void *) android_glBlendFunciEXT__III },
   1604 {"glBlendFuncSeparateiEXT", "(IIIII)V", (void *) android_glBlendFuncSeparateiEXT__IIIII },
   1605 {"glColorMaskiEXT", "(IZZZZ)V", (void *) android_glColorMaskiEXT__IZZZZ },
   1606 {"glIsEnablediEXT", "(II)Z", (void *) android_glIsEnablediEXT__II },
   1607 {"glFramebufferTextureEXT", "(IIII)V", (void *) android_glFramebufferTextureEXT__IIII },
   1608 {"glPrimitiveBoundingBoxEXT", "(FFFFFFFF)V", (void *) android_glPrimitiveBoundingBoxEXT__FFFFFFFF },
   1609 {"glPatchParameteriEXT", "(II)V", (void *) android_glPatchParameteriEXT__II },
   1610 {"glTexParameterIivEXT", "(II[II)V", (void *) android_glTexParameterIivEXT__II_3II },
   1611 {"glTexParameterIivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterIivEXT__IILjava_nio_IntBuffer_2 },
   1612 {"glTexParameterIuivEXT", "(II[II)V", (void *) android_glTexParameterIuivEXT__II_3II },
   1613 {"glTexParameterIuivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterIuivEXT__IILjava_nio_IntBuffer_2 },
   1614 {"glGetTexParameterIivEXT", "(II[II)V", (void *) android_glGetTexParameterIivEXT__II_3II },
   1615 {"glGetTexParameterIivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterIivEXT__IILjava_nio_IntBuffer_2 },
   1616 {"glGetTexParameterIuivEXT", "(II[II)V", (void *) android_glGetTexParameterIuivEXT__II_3II },
   1617 {"glGetTexParameterIuivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterIuivEXT__IILjava_nio_IntBuffer_2 },
   1618 {"glSamplerParameterIivEXT", "(II[II)V", (void *) android_glSamplerParameterIivEXT__II_3II },
   1619 {"glSamplerParameterIivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameterIivEXT__IILjava_nio_IntBuffer_2 },
   1620 {"glSamplerParameterIuivEXT", "(II[II)V", (void *) android_glSamplerParameterIuivEXT__II_3II },
   1621 {"glSamplerParameterIuivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameterIuivEXT__IILjava_nio_IntBuffer_2 },
   1622 {"glGetSamplerParameterIivEXT", "(II[II)V", (void *) android_glGetSamplerParameterIivEXT__II_3II },
   1623 {"glGetSamplerParameterIivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameterIivEXT__IILjava_nio_IntBuffer_2 },
   1624 {"glGetSamplerParameterIuivEXT", "(II[II)V", (void *) android_glGetSamplerParameterIuivEXT__II_3II },
   1625 {"glGetSamplerParameterIuivEXT", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameterIuivEXT__IILjava_nio_IntBuffer_2 },
   1626 {"glTexBufferEXT", "(III)V", (void *) android_glTexBufferEXT__III },
   1627 {"glTexBufferRangeEXT", "(IIIII)V", (void *) android_glTexBufferRangeEXT__IIIII },
   1628 };
   1629 
   1630 int register_android_opengl_jni_GLES31Ext(JNIEnv *_env)
   1631 {
   1632     int err;
   1633     err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
   1634     return err;
   1635 }
   1636