OSDN Git Service

Process: Fix communication with zygote. am: 8e69dd2284 am: b85e9e9108
[android-x86/frameworks-base.git] / core / jni / android_opengl_GLES31Ext.cpp
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 }