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