17ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/*
27ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * Copyright 2014 The Android Open Source Project
37ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
47ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * Licensed under the Apache License, Version 2.0 (the "License");
57ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * you may not use this file except in compliance with the License.
67ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * You may obtain a copy of the License at
77ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
87ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *      http://www.apache.org/licenses/LICENSE-2.0
97ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * Unless required by applicable law or agreed to in writing, software
117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * distributed under the License is distributed on an "AS IS" BASIS,
127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * See the License for the specific language governing permissions and
147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * limitations under the License.
157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall */
167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall// This source file is automatically generated
187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-variable"
20bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-function"
21bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe
227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <stdint.h>
237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <GLES3/gl31.h>
249626f8203a8c222b8960a49cdc66d540fdb688b0Jesse Hall#include <jni.h>
252279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h>
267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <android_runtime/AndroidRuntime.h>
277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <utils/misc.h>
287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <assert.h>
297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic int initialized = 0;
317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jclass nioAccessClass;
337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jclass bufferClass;
347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jmethodID getBasePointerID;
357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jmethodID getBaseArrayID;
367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jmethodID getBaseArrayOffsetID;
377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jfieldID positionID;
387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jfieldID limitID;
397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jfieldID elementSizeShiftID;
407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* special calls implemented in Android's GLES wrapper used to more
437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * efficiently bound-check passed arrays */
447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallextern "C" {
457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_VERSION_ES_CM_1_1
467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        const GLvoid *ptr, GLsizei count);
487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        const GLvoid *pointer, GLsizei count);
507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_2_0
627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_3_0
687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count) {
707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribIPointer(indx, size, type, stride, pointer);
717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* Cache method IDs each time the class is loaded. */
767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallnativeClassInit(JNIEnv *_env, jclass glImplClass)
797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            "getBasePointer", "(Ljava/nio/Buffer;)J");
887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    positionID = _env->GetFieldID(bufferClass, "position", "I");
947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    limitID = _env->GetFieldID(bufferClass, "limit", "I");
957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    elementSizeShiftID =
967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void *
1007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
1017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
1027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint position;
1037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint limit;
1047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint elementSizeShift;
1057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jlong pointer;
1067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    position = _env->GetIntField(buffer, positionID);
1087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    limit = _env->GetIntField(buffer, limitID);
1097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
1107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    *remaining = (limit - position) << elementSizeShift;
1117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pointer = _env->CallStaticLongMethod(nioAccessClass,
1127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            getBasePointerID, buffer);
1137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pointer != 0L) {
1147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        *array = NULL;
1157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return reinterpret_cast<void*>(pointer);
1167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
1177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
1197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            getBaseArrayID, buffer);
1207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    *offset = _env->CallStaticIntMethod(nioAccessClass,
1217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            getBaseArrayOffsetID, buffer);
1227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return NULL;
1247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
1257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayGetter {
1273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
1293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetByteArrayElements(array, is_copy);
1303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayGetter {
1333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
1353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetBooleanArrayElements(array, is_copy);
1363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayGetter {
1393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
1413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetCharArrayElements(array, is_copy);
1423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayGetter {
1453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
1473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetShortArrayElements(array, is_copy);
1483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayGetter {
1513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
1533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetIntArrayElements(array, is_copy);
1543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayGetter {
1573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
1593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetLongArrayElements(array, is_copy);
1603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayGetter {
1633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
1653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetFloatArrayElements(array, is_copy);
1663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayGetter {
1693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
1713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetDoubleArrayElements(array, is_copy);
1723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename ARRAYGETTER>
1763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void*
1773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchigetArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
1783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    return ARRAYGETTER::Get(_env, array, is_copy);
1793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
1803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayReleaser {
1823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
1843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
1853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayReleaser {
1883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
1903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
1913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayReleaser {
1943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
1963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
1973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayReleaser {
2003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
2023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
2033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayReleaser {
2063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
2083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
2093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayReleaser {
2123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
2143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
2153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayReleaser {
2183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
2203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
2213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayReleaser {
2243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
2263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
2273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
2303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
2313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void
2323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchireleaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
2333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ARRAYRELEASER::Release(_env, array, data, commit);
2343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
2353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
2367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
2377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
2387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
2397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _env->ReleasePrimitiveArrayCritical(array, data,
2407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall                       commit ? 0 : JNI_ABORT);
2417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
2427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void *
2447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallgetDirectBufferPointer(JNIEnv *_env, jobject buffer) {
2457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
2467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (buf) {
2477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jint position = _env->GetIntField(buffer, positionID);
2487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
2497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        buf += position << elementSizeShift;
2507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    } else {
2517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException",
2527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall                          "Must use a native order direct Buffer");
2537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
2547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (void*) buf;
2557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
2567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall// --------------------------------------------------------------------------
2587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/*
2607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * returns the number of values glGet returns for a given pname.
2617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
2627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * The code below is written such that pnames requiring only one values
2637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * are the default (and are not explicitely tested for). This makes the
2647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * checking code much shorter/readable/efficient.
2657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
2667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * This means that unknown pnames (e.g.: extensions) will default to 1. If
2677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * that unknown pname needs more than 1 value, then the validation check
2687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * is incomplete and the app may crash if it passed the wrong number params.
2697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall */
2707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic int getNeededCount(GLint pname) {
2717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int needed = 1;
272dc43a6c99c21e99723058bab4041e80557795a74Romain Guy#ifdef GL_ES_VERSION_3_0
273dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    // GLES 3.x pnames
274dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    switch (pname) {
275dc43a6c99c21e99723058bab4041e80557795a74Romain Guy        case GL_MAX_VIEWPORT_DIMS:
276dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            needed = 2;
277dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            break;
278dc43a6c99c21e99723058bab4041e80557795a74Romain Guy
279dc43a6c99c21e99723058bab4041e80557795a74Romain Guy        case GL_PROGRAM_BINARY_FORMATS:
280dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &needed);
281dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            break;
282dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    }
283dc43a6c99c21e99723058bab4041e80557795a74Romain Guy#endif
284dc43a6c99c21e99723058bab4041e80557795a74Romain Guy
2857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_2_0
2867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GLES 2.x pnames
2877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    switch (pname) {
2887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
2897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
2907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 2;
2917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
2927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_BLEND_COLOR:
2947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_CLEAR_VALUE:
2957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_WRITEMASK:
2967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SCISSOR_BOX:
2977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_VIEWPORT:
2987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 4;
2997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
3027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
3037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SHADER_BINARY_FORMATS:
3067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
3077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
3107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_VERSION_ES_CM_1_1
3127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GLES 1.x pnames
3137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    switch (pname) {
3147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
3157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
3167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_DEPTH_RANGE:
3177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SMOOTH_LINE_WIDTH_RANGE:
3187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SMOOTH_POINT_SIZE_RANGE:
3197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 2;
3207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_NORMAL:
3237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_POINT_DISTANCE_ATTENUATION:
3247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 3;
3257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_CLEAR_VALUE:
3287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_WRITEMASK:
3297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_COLOR:
3307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_TEXTURE_COORDS:
3317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_FOG_COLOR:
3327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_LIGHT_MODEL_AMBIENT:
3337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SCISSOR_BOX:
3347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_VIEWPORT:
3357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 4;
3367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_MODELVIEW_MATRIX:
3397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_PROJECTION_MATRIX:
3407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_TEXTURE_MATRIX:
3417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 16;
3427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
3457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
3467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
3497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return needed;
3507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
3547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
3557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallget
3567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
3577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
3587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType;
3597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage;
3607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params_base = (CTYPE *) 0;
3617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
3627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params = (CTYPE *) 0;
3637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int _needed = 0;
3647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
3667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
3697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
3727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
3757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _needed = getNeededCount(pname);
3797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // if we didn't find this pname, we just assume the user passed
3807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // an array of the right size -- this might happen with extensions
3817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // or if we forget an enum here.
3827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_remaining < _needed) {
3837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "length - offset < needed";
3867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
3893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env, params_ref, (jboolean *)0);
3907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
3917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GET(
3937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
3947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (CTYPE *)params
3957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
3967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
3987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
3993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, params_ref, params_base, !_exception);
4017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
4037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
4093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
4107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
4117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallgetarray
4127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
4137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
4147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType;
4157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage;
4163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    JTYPEARRAY _array = (JTYPEARRAY) 0;
4177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
4187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
4197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params = (CTYPE *) 0;
4207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int _needed = 0;
4217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining /= sizeof(CTYPE);    // convert from bytes to item count
4247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _needed = getNeededCount(pname);
4257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // if we didn't find this pname, we just assume the user passed
4267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // an array of the right size -- this might happen with extensions
4277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // or if we forget an enum here.
4287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_needed>0 && _remaining < _needed) {
4297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
4307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "remaining() < needed";
4327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
4337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
4353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
4363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (jboolean *) 0);
4377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (CTYPE *) (_paramsBase + _bufferOffset);
4387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GET(
4407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
4417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (CTYPE *)params
4427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
4437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
4457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
4463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
4487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
4507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall// --------------------------------------------------------------------------
4557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDispatchCompute ( GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z ) */
4567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
4577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDispatchCompute__III
4587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint num_groups_x, jint num_groups_y, jint num_groups_z) {
4597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDispatchCompute(
4607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_x,
4617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_y,
4627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_z
4637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
4647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDispatchComputeIndirect ( GLintptr indirect ) */
4677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDispatchComputeIndirect(JNIEnv *_env, jobject, jlong indirect) {
4687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // 'indirect' is a byte offset, not a pointer. GL checks for negative and too-large values.
4697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // Here we only need to check for successful 64-bit to 32-bit conversion.
4707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // - jlong is a int64_t (jni.h)
4717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // - GLintptr is a long (khrplatform.h)
4727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (sizeof(GLintptr) != sizeof(jlong) && (indirect < LONG_MIN || indirect > LONG_MAX)) {
4737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDispatchComputeIndirect((GLintptr)indirect);
4777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDrawArraysIndirect ( GLenum mode, const void *indirect ) */
4807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDrawArraysIndirect(JNIEnv *_env, jobject, int mode, jlong indirect) {
4817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer.
4827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GL checks for too-large values. Here we only need to check for successful signed 64-bit
4837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // to unsigned 32-bit conversion.
484bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe    if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) {
4857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDrawArraysIndirect(mode, (const void*)indirect);
4897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDrawElementsIndirect ( GLenum mode, GLenum type, const void *indirect ) */
4927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDrawElementsIndirect(JNIEnv *_env, jobject, jint mode, jint type, jlong indirect) {
4937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer.
4947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GL checks for too-large values. Here we only need to check for successful signed 64-bit
4957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // to unsigned 32-bit conversion.
496bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe    if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) {
4977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDrawElementsIndirect(mode, type, (const void*)indirect);
5017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glFramebufferParameteri ( GLenum target, GLenum pname, GLint param ) */
5047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glFramebufferParameteri__III
5067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
5077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glFramebufferParameteri(
5087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)param
5117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetFramebufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
5157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetFramebufferParameteriv__II_3II
5177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
5187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
5197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
5207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
5217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
5227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
5267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
5297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
5327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
5357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
5393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
5417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetFramebufferParameteriv(
5437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
5467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
5497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
5503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
5527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
5547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetFramebufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
5597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2
5617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
56284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
56384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
56484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
5653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
5677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
57084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
57184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
57284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
57384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
57484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
57584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
5783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetFramebufferParameteriv(
5827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
5857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
58684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
58784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
58984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
59084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
59184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
59284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramInterfaceiv ( GLuint program, GLenum programInterface, GLenum pname, GLint *params ) */
5977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramInterfaceiv__III_3II
5997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jintArray params_ref, jint offset) {
6007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
6017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
6027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
6037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
6047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
6057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
6067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
6087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
6117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
6147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
6177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
6207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
6213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
6227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
6237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramInterfaceiv(
6257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
6287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
6297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
6307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
6327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
6333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
6347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
6357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
6377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
6387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramInterfaceiv ( GLuint program, GLenum programInterface, GLenum pname, GLint *params ) */
6427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
6437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2
6447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jobject params_buf) {
64584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
64684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
64784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
6483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
6497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
6507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
6517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
6527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
65384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
65484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
65584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
65684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
65784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
65884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
6593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
6607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
6613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
6627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
6637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramInterfaceiv(
6657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
6687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
6697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
67084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
67184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
6727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
67384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
67484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
67584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
67684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
6777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLuint glGetProgramResourceIndex ( GLuint program, GLenum programInterface, const GLchar *name ) */
6817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
6827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceIndex__IILjava_lang_String_2
6837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jstring name) {
6847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
6857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
6867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
6877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint _returnValue = 0;
6887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char* _nativename = 0;
6897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!name) {
6917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "name == null";
6947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
6977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glGetProgramResourceIndex(
6997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
7007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
7017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLchar *)_nativename
7027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
7037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
7057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_nativename) {
7067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
7077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
7107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
7117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jint)_returnValue;
7137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
7147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceName ( GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name ) */
7167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jstring
7177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceName
7187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index) {
7197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
7207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return NULL;
7217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
7227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceiv ( GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params ) */
7247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
7257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceiv__IIII_3III_3II_3II
7267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index, jint propCount, jintArray props_ref, jint propsOffset, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray params_ref, jint paramsOffset) {
7277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
7287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
7297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
7307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props_base = (GLenum *) 0;
7317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsRemaining;
7327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props = (GLenum *) 0;
7337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length_base = (GLsizei *) 0;
7347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthRemaining;
7357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length = (GLsizei *) 0;
7367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
7377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsRemaining;
7387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
7397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!props_ref) {
7417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "props == null";
7447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (propsOffset < 0) {
7477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "propsOffset < 0";
7507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _propsRemaining = _env->GetArrayLength(props_ref) - propsOffset;
7537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    props_base = (GLenum *)
7543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(props_ref, (jboolean *)0);
7557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    props = props_base + propsOffset;
7567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7576aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
7586aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
7596aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
7606aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
7616aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
7626aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
7636aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
7646aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
7656aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
7666aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
7676aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
7687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
7717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
7747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (paramsOffset < 0) {
7777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "paramsOffset < 0";
7807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
7837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
7843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
7857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + paramsOffset;
7867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramResourceiv(
7887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
7897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
7907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
7917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)propCount,
7927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum *)props,
7937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)bufSize,
7947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei *)length,
7957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
7967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
7977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
7997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
8003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
8017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
8027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (length_base) {
8043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
8057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
8067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (props_base) {
8083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(props_ref, (jint*)props_base,
8097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
8107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
8127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
8137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceiv ( GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params ) */
8177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
8187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceiv__IIIILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
8197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index, jint propCount, jobject props_buf, jint bufSize, jobject length_buf, jobject params_buf) {
82084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
82184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
82284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
8233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _propsArray = (jintArray) 0;
8247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsBufferOffset = (jint) 0;
8253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
8267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthBufferOffset = (jint) 0;
8273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _paramsArray = (jintArray) 0;
8287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsBufferOffset = (jint) 0;
8297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsRemaining;
8307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props = (GLenum *) 0;
8317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthRemaining;
8327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length = (GLsizei *) 0;
8337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsRemaining;
8347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
8357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
83684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!props_buf) {
83784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
83884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
83984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "props == null";
84084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
84184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    props = (GLenum *)getPointer(_env, props_buf, (jarray*)&_propsArray, &_propsRemaining, &_propsBufferOffset);
8436aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
8446aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
8456aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
84684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
84784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
84884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
84984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
85084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
85184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
8537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (props == NULL) {
8543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _propsBase = (char *)_env->GetIntArrayElements(_propsArray, (jboolean *) 0);
8557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        props = (GLenum *) (_propsBase + _propsBufferOffset);
8567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8576aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
8583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
8597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
8607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
8623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
8637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _paramsBufferOffset);
8647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramResourceiv(
8667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
8677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
8687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
8697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)propCount,
8707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum *)props,
8717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)bufSize,
8727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei *)length,
8737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
8747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
87584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
87684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
8777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_paramsArray) {
87884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, _exception ? JNI_ABORT : 0);
8797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_lengthArray) {
88184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, _exception ? JNI_ABORT : 0);
8827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_propsArray) {
8843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_propsArray, (jint*)props, JNI_ABORT);
8857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
88684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
88784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
88884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLint glGetProgramResourceLocation ( GLuint program, GLenum programInterface, const GLchar *name ) */
8927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
8937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceLocation__IILjava_lang_String_2
8947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jstring name) {
8957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
8967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
8977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
8987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint _returnValue = 0;
8997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char* _nativename = 0;
9007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!name) {
9027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
9037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
9047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "name == null";
9057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
9067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
9087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glGetProgramResourceLocation(
9107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
9117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
9127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLchar *)_nativename
9137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
9167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_nativename) {
9177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
9187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
9217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
9227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jint)_returnValue;
9247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glUseProgramStages ( GLuint pipeline, GLbitfield stages, GLuint program ) */
9277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
9287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glUseProgramStages__III
9297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint stages, jint program) {
9307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glUseProgramStages(
9317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
9327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)stages,
9337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program
9347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glActiveShaderProgram ( GLuint pipeline, GLuint program ) */
9387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
9397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glActiveShaderProgram__II
9407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint program) {
9417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glActiveShaderProgram(
9427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
9437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program
9447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLuint glCreateShaderProgramv ( GLenum type, GLsizei count, const GLchar *const *strings ) */
9487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
9497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glCreateShaderProgramv
9507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint type, jobjectArray strings) {
9517f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    jint _exception = 0;
9527f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const char * _exceptionType = NULL;
9537f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const char * _exceptionMessage = NULL;
9547f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    GLsizei _count;
9557f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const GLchar** _strings = NULL;
9567f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    jstring* _jstrings = NULL;
9577f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    GLuint _returnValue = 0;
9587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9597f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!strings) {
9607f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9617f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
9627f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "strings == null";
9637f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9647f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9657f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9667f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _count = _env->GetArrayLength(strings);
9677f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9687f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _strings = (const GLchar**) calloc(_count, sizeof(const GLchar*));
9697f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!_strings) {
9707f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9717f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/OutOfMemoryError";
9727f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "out of memory";
9737f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9747f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9757f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9767f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _jstrings = (jstring*) calloc(_count, sizeof(jstring));
9777f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!_jstrings) {
9787f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9797f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/OutOfMemoryError";
9807f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "out of memory";
9817f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9827f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9837f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9847f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    for(int i = 0; i < _count; i++) {
9857f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _jstrings[i] = (jstring) _env->GetObjectArrayElement(strings, i);
9867f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        if (!_jstrings[i]) {
9877f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exception = 1;
9887f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
9897f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exceptionMessage = "strings == null";
9907f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            goto exit;
9917f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        }
9927f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _strings[i] = _env->GetStringUTFChars(_jstrings[i], 0);
9937f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9947f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9957f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _returnValue = glCreateShaderProgramv((GLenum)type, _count, _strings);
9967f16ec21711fdb97930166175c29d8235f75202ePablo Ceballosexit:
9977f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_strings && _jstrings) {
9987f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        for(int i = 0; i < _count; i++) {
9997f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            if (_strings[i] && _jstrings[i]) {
10007f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos                _env->ReleaseStringUTFChars(_jstrings[i], _strings[i]);
10017f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            }
10027f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        }
10037f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10047f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_strings) {
10057f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        free(_strings);
10067f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10077f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_jstrings) {
10087f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        free(_jstrings);
10097f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10107f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_exception) {
10117f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
10127f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10137f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    return (jint)_returnValue;
10147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindProgramPipeline ( GLuint pipeline ) */
10167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindProgramPipeline__I
10187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
10197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindProgramPipeline(
10207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
10217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDeleteProgramPipelines ( GLsizei n, const GLuint *pipelines ) */
10257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDeleteProgramPipelines__I_3II
10277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray pipelines_ref, jint offset) {
10287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
10297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
10307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
10317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines_base = (GLuint *) 0;
10327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!pipelines_ref) {
10367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
10377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
10387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "pipelines == null";
10397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
10407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
10427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
10437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
10447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
10457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
10467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(pipelines_ref) - offset;
10487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines_base = (GLuint *)
10493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
10507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines = pipelines_base + offset;
10517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDeleteProgramPipelines(
10537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
10587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines_base) {
10593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
10607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
10617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
10637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
10647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDeleteProgramPipelines ( GLsizei n, const GLuint *pipelines ) */
10687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2
10707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
107184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
107284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
107384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
10743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
10757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
10767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
107984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!pipelines_buf) {
108084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
108184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
108284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "pipelines == null";
108384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
108484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
10853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
10867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines == NULL) {
10873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
10887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
10897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDeleteProgramPipelines(
10917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
109484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
109584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
10967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
10973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)pipelines, JNI_ABORT);
10987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
109984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
110084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
110184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
11027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGenProgramPipelines ( GLsizei n, GLuint *pipelines ) */
11057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGenProgramPipelines__I_3II
11077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray pipelines_ref, jint offset) {
11087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
11097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
11107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
11117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines_base = (GLuint *) 0;
11127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
11137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
11147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!pipelines_ref) {
11167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
11177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
11187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "pipelines == null";
11197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
11207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
11227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
11237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
11247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
11257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
11267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(pipelines_ref) - offset;
11287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines_base = (GLuint *)
11293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
11307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines = pipelines_base + offset;
11317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGenProgramPipelines(
11337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
11347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
11357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
11387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines_base) {
11393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
11407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
11417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
11437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
11447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGenProgramPipelines ( GLsizei n, GLuint *pipelines ) */
11487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGenProgramPipelines__ILjava_nio_IntBuffer_2
11507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
115184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
115284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
115384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
11543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
11557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
11567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
11577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
11587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
115984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!pipelines_buf) {
116084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
116184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
116284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "pipelines == null";
116384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
116484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
11653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
11667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines == NULL) {
11673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
11687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
11697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGenProgramPipelines(
11717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
11727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
11737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
117484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
117584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
11767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
117784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)pipelines, _exception ? JNI_ABORT : 0);
117884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
117984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
118084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
11817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLboolean glIsProgramPipeline ( GLuint pipeline ) */
11857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jboolean
11867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glIsProgramPipeline__I
11877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
11887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean _returnValue;
11897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glIsProgramPipeline(
11907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
11917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jboolean)_returnValue;
11937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineiv ( GLuint pipeline, GLenum pname, GLint *params ) */
11967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramPipelineiv__II_3II
11987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint pname, jintArray params_ref, jint offset) {
11997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
12007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
12017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
12027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
12037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
12047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
12057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
12077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
12087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
12097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
12107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
12117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
12137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
12147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
12157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
12167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
12177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
12197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
12203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
12217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
12227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(
12247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
12257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
12267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
12277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
12307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
12313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
12327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
12337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
12357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
12367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineiv ( GLuint pipeline, GLenum pname, GLint *params ) */
12407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2
12427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint pname, jobject params_buf) {
124384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
124484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
124584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
12463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
12477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
12487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
12497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
12507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
125184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
125284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
125384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
125484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
125584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
125684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
12573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
12587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
12593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
12607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
12617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(
12637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
12647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
12657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
12667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
126784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
126884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
12697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
127084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
127184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
127284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
127384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
12747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1i ( GLuint program, GLint location, GLint v0 ) */
12787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1i__III
12807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0) {
12817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1i(
12827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0
12857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2i ( GLuint program, GLint location, GLint v0, GLint v1 ) */
12897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2i__IIII
12917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1) {
12927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2i(
12937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
12967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1
12977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3i ( GLuint program, GLint location, GLint v0, GLint v1, GLint v2 ) */
13017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3i__IIIII
13037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2) {
13047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3i(
13057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
13087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1,
13097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v2
13107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4i ( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3 ) */
13147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4i__IIIIII
13167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2, jint v3) {
13177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4i(
13187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
13217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1,
13227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v2,
13237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v3
13247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1ui ( GLuint program, GLint location, GLuint v0 ) */
13287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1ui__III
13307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0) {
13317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1ui(
13327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0
13357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2ui ( GLuint program, GLint location, GLuint v0, GLuint v1 ) */
13397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2ui__IIII
13417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1) {
13427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2ui(
13437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
13467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1
13477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3ui ( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
13517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3ui__IIIII
13537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2) {
13547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3ui(
13557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
13587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1,
13597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v2
13607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4ui ( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
13647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4ui__IIIIII
13667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2, jint v3) {
13677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4ui(
13687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
13717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1,
13727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v2,
13737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v3
13747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1f ( GLuint program, GLint location, GLfloat v0 ) */
13787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1f__IIF
13807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0) {
13817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1f(
13827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0
13857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2f ( GLuint program, GLint location, GLfloat v0, GLfloat v1 ) */
13897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2f__IIFF
13917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1) {
13927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2f(
13937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
13967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1
13977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3f ( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2 ) */
14017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3f__IIFFF
14037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1, jfloat v2) {
14047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3f(
14057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
14087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1,
14097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v2
14107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4f ( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3 ) */
14147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4f__IIFFFF
14167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1, jfloat v2, jfloat v3) {
14177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4f(
14187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
14217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1,
14227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v2,
14237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v3
14247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
14287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1iv__III_3II
14307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
14317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
14327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
14337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
14347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
14357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
14397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
14427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
14457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
14487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
14517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
14523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
14537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
14547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1iv(
14567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
14597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
14607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
14637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
14643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
14657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
14667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
14687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
14697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
14737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1iv__IIILjava_nio_IntBuffer_2
14757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
147684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
147784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
147884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
14793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
14807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
14817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
148484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
148584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
148684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
148784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
148884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
148984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
14903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
14917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
14923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
14937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
14947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1iv(
14967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
14997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
150184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
150284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
15037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
15043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
15057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
150684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
150784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
150884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2iv__III_3II
15147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
15157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
15167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
15177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
15187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
15197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
15237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
15247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
15257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
15267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
15277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
15297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
15307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
15317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
15327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
15337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
15357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
15363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
15377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
15387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2iv(
15407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
15457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
15477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
15483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
15497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
15507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
15527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
15537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2iv__IIILjava_nio_IntBuffer_2
15597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
156084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
156184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
156284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
15633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
15647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
15657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
156884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
156984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
157084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
157184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
157284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
157384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
15757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
15763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
15777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
15787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2iv(
15807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
158584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
158684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
15877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
15883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
15897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
159084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
159184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
159284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3iv__III_3II
15987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
15997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
16007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
16017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
16027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
16037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
16057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
16077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
16107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
16137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
16167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
16197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
16203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
16217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
16227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3iv(
16247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
16257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
16267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
16277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
16287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
16297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
16317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
16323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
16337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
16347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
16367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
16377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
16417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3iv__IIILjava_nio_IntBuffer_2
16437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
164484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
164584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
164684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
16473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
16487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
16497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
16517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
165284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
165384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
165484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
165584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
165684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
165784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
16583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
16597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
16603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
16617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
16627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3iv(
16647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
16657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
16667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
16677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
16687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
166984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
167084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
16717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
16723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
16737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
167484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
167584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
167684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
16777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
16807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4iv__III_3II
16827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
16837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
16847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
16857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
16867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
16877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
16897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
16917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
16947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
16977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
17007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
17037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
17043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
17057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
17067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4iv(
17087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
17127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
17157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
17163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
17177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
17187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
17207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
17217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
17257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4iv__IIILjava_nio_IntBuffer_2
17277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
172884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
172984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
173084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
17313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
17327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
17337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
17357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
173684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
173784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
173884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
173984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
174084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
174184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
17423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
17437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
17443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
17457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
17467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4iv(
17487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
17527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
175384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
175484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
17557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
17563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
17577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
175884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
175984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
176084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
17617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
17647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1uiv__III_3II
17667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
17677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
17687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
17697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
17707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
17717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
17737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
17757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
17767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
17787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
17817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
17827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
17847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
17877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
17883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
17897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
17907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1uiv(
17927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
17967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
17997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
18003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
18017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
18027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
18047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
18057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2
18117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
181284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
181384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
181484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
18153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
18167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
18177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
18197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
182084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
182184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
182284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
182384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
182484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
182584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
18263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
18277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
18283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
18297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
18307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1uiv(
18327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
183784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
183884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
18397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
18403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
18417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
184284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
184384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
184484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
18457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2uiv__III_3II
18507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
18517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
18527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
18537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
18547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
18557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
18577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
18597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
18627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
18637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
18657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
18687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
18697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
18717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
18723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
18737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
18747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2uiv(
18767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
18817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
18837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
18843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
18857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
18867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
18887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
18897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2
18957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
189684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
189784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
189884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
18993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
19007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
19017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
19037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
190484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
190584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
190684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
190784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
190884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
190984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
19117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
19123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
19137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
19147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2uiv(
19167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
19207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
192184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
192284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
19237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
19243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
19257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
192684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
192784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
192884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
19327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
19337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3uiv__III_3II
19347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
19357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
19367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
19377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
19387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
19397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
19417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
19437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
19467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
19497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
19527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
19557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
19563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
19577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
19587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3uiv(
19607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
19647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
19657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
19677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
19683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
19697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
19707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
19727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
19737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
19777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
19787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2
19797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
198084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
198184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
198284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
19833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
19847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
19857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
19877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
198884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
198984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
199084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
199184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
199284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
199384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
19957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
19963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
19977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
19987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3uiv(
20007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
20047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
200584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
200684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
20077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
20083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
20097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
201084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
201184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
201284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
20167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4uiv__III_3II
20187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
20197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
20207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
20217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
20227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
20237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
20257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
20277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
20287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
20307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
20317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
20337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
20347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
20367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
20377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
20397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
20403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
20417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
20427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4uiv(
20447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
20487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
20497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
20517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
20523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
20537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
20547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
20567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
20577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
20617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2
20637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
206484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
206584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
206684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
20673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
20687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
20697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
20717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
207284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
207384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
207484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
207584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
207684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
207784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
20797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
20803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
20817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
20827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4uiv(
20847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
20887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
208984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
209084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
20917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
20923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
20937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
209484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
209584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
209684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1fv__III_3FI
21027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
21037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
21047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
21057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
21067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
21077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
21117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
21147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
21177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
21207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
21237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
21243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
21257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
21267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1fv(
21287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
21337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
21357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
21363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
21377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
21387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
21407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
21417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
21437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2
21477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
214884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
214984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
215084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
21513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
21527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
21537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
215684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
215784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
215884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
215984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
216084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
216184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
21623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
21637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
21643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
21657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
21667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1fv(
21687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
217384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
217484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
21757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
21763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
21777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
217884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
217984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
218084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
21817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
21827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2fv__III_3FI
21867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
21877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
21887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
21897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
21907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
21917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
21957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
21987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
22017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
22047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
22077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
22083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
22097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
22107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2fv(
22127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
22167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
22177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
22197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
22203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
22217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
22227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
22247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
22257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
22297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2
22317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
223284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
223384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
223484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
22353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
22367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
22377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
224084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
224184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
224284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
224384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
224484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
224584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
22463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
22477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
22483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
22497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
22507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2fv(
22527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
22567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
225784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
225884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
22597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
22603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
22617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
226284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
226384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
226484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
22657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
22687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3fv__III_3FI
22707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
22717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
22727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
22737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
22747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
22757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
22797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
22827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
22857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
22887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
22917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
22923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
22937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
22947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3fv(
22967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
23037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
23043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
23057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
23067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
23087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
23097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
23137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2
23157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
231684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
231784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
231884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
23193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
23207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
23217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
232484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
232584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
232684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
232784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
232884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
232984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
23303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
23317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
23323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
23337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
23347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3fv(
23367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
23377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
234184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
234284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
23437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
23443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
23457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
234684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
234784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
234884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
23497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
23527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4fv__III_3FI
23547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
23557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
23567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
23577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
23587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
23597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
23637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
23667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
23697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
23727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
23757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
23763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
23777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
23787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4fv(
23807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
23817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
23877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
23883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
23897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
23907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
23927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
23937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
23977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2
23997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
240084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
240184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
240284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
24033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
24047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
24057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
240884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
240984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
241084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
241184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
241284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
241384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
24143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
24157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
24163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
24177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
24187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4fv(
24207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
242584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
242684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
24277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
24283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
24297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
243084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
243184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
243284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
24337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
24367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
24377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2fv__IIIZ_3FI
24387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
24397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
24407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
24417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
24427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
24437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
24477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
24507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
24537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
24567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
24597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
24603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
24617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
24627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2fv(
24647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
24687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
24707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
24727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
24733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
24747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
24757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
24777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
24787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
24827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
24837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2
24847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
248584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
248684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
248784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
24883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
24897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
24907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
249384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
249484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
249584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
249684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
249784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
249884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
24993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
25007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
25013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
25027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
25037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2fv(
25057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
251184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
251284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
25137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
25143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
25157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
251684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
251784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
251884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
25197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3fv__IIIZ_3FI
25247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
25257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
25267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
25277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
25287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
25297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
25337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
25347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
25357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
25367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
25377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
25397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
25407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
25417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
25427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
25437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
25457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
25463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
25477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
25487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3fv(
25507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
25567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
25587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
25593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
25607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
25617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
25637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
25647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2
25707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
257184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
257284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
257384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
25743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
25757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
25767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
257984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
258084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
258184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
258284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
258384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
258484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
25853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
25867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
25873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
25887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
25897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3fv(
25917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
259784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
259884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
25997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
26003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
26017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
260284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
260384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
260484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4fv__IIIZ_3FI
26107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
26117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
26127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
26137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
26147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
26157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
26197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
26227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
26257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
26287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
26317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
26323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
26337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
26347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4fv(
26367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
26387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
26397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
26407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
26417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
26427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
26447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
26453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
26467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
26477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
26497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
26507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2
26567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
265784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
265884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
265984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
26603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
26617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
26627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
266584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
266684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
266784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
266884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
266984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
267084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
26727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
26733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
26747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
26757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4fv(
26777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
26797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
26807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
26817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
26827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
268384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
268484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
26857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
26863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
26877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
268884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
268984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
269084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x3fv__IIIZ_3FI
26967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
26977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
26987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
26997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
27007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
27017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
27057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
27087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
27117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
27147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
27177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
27183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
27197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
27207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x3fv(
27227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
27237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
27287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
27307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
27313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
27327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
27337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
27357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
27367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2
27427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
274384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
274484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
274584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
27463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
27477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
27487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
275184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
275284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
275384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
275484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
275584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
275684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
27573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
27587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
27593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
27607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
27617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x3fv(
27637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
27647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
276984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
277084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
27717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
27723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
27737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
277484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
277584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
277684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
27777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x2fv__IIIZ_3FI
27827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
27837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
27847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
27857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
27867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
27877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
27917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
27947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
27977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
28007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
28037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
28043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
28057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
28067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x2fv(
28087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
28137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
28147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
28167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
28173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
28187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
28197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
28217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
28227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
28267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2
28287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
282984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
283084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
283184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
28323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
28337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
28347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
28357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
28367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
283784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
283884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
283984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
284084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
284184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
284284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
28433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
28447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
28453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
28467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
28477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x2fv(
28497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
28547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
285584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
285684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
28577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
28583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
28597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
286084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
286184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
286284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
28637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
28667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x4fv__IIIZ_3FI
28687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
28697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
28707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
28717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
28727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
28737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
28747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
28757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
28777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
28787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
28807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
28837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
28847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
28867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
28897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
28903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
28917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
28927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x4fv(
28947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
28997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
29027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
29033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
29047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
29057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
29077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
29087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
29127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2
29147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
291584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
291684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
291784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
29183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
29197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
29207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
29217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
29227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
292384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
292484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
292584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
292684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
292784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
292884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
29293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
29307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
29313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
29327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
29337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x4fv(
29357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
29367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
29377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
29387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
29397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
29407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
294184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
294284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
29437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
29443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
29457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
294684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
294784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
294884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
29497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
29527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x2fv__IIIZ_3FI
29547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
29557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
29567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
29577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
29587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
29597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
29607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
29617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
29637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
29647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
29657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
29667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
29677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
29697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
29707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
29717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
29727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
29737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
29757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
29763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
29777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
29787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x2fv(
29807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
29817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
29827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
29837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
29847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
29857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
29887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
29893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
29907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
29917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
29937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
29947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
29987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2
30007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
300184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
300284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
300384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
30043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
30057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
30067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
30087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
300984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
301084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
301184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
301284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
301384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
301484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
30153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
30167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
30173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
30187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
30197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x2fv(
30217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
30227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
30237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
30247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
30257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
30267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
302784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
302884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
30297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
30303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
30317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
303284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
303384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
303484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
30357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
30387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x4fv__IIIZ_3FI
30407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
30417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
30427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
30437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
30447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
30457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
30477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
30497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
30507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
30517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
30527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
30537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
30557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
30567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
30577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
30587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
30597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
30617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
30623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
30637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
30647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x4fv(
30667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
30677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
30687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
30697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
30707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
30717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
30727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
30747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
30753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
30767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
30777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
30797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
30807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
30847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2
30867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
308784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
308884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
308984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
30903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
30917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
30927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
30947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
309584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
309684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
309784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
309884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
309984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
310084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
31027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
31033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
31047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
31057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x4fv(
31077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
31087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
31097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
31107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
31117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
31127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
311384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
311484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
31157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
31163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
31177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
311884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
311984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
312084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
31247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x3fv__IIIZ_3FI
31267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
31277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
31287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
31297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
31307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
31317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
31327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
31337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
31357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
31367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
31377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
31387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
31397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
31417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
31427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
31437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
31447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
31457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
31477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
31483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
31497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
31507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x3fv(
31527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
31537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
31547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
31557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
31567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
31577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
31587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
31607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
31613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
31627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
31637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
31657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
31667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
31707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2
31727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
317384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
317484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
317584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
31763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
31777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
31787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
31797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
31807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
318184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
318284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
318384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
318484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
318584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
318684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
31887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
31893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
31907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
31917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x3fv(
31937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
31947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
31957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
31967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
31977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
31987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
319984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
320084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
32017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
32023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
32037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
320484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
320584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
320684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
32077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glValidateProgramPipeline ( GLuint pipeline ) */
32107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glValidateProgramPipeline__I
32127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
32137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glValidateProgramPipeline(
32147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
32157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <stdlib.h>
32197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
32217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jstring android_glGetProgramPipelineInfoLog(JNIEnv *_env, jobject, jint shader) {
32227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint infoLen = 0;
32237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
32247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!infoLen) {
32257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return _env->NewStringUTF("");
32267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    char* buf = (char*) malloc(infoLen);
32287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (buf == NULL) {
32297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/OutOfMemoryError", "out of memory");
32307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return NULL;
32317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineInfoLog(shader, infoLen, NULL, buf);
32337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jstring result = _env->NewStringUTF(buf);
32347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    free(buf);
32357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return result;
32367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindImageTexture ( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format ) */
32387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindImageTexture__IIIZIII
32407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint unit, jint texture, jint level, jboolean layered, jint layer, jint access, jint format) {
32417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindImageTexture(
32427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)unit,
32437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)texture,
32447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
32457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)layered,
32467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)layer,
32477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)access,
32487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)format
32497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetBooleani_v ( GLenum target, GLuint index, GLboolean *data ) */
32537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetBooleani_v__II_3ZI
32557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jbooleanArray data_ref, jint offset) {
32567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
32577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
32587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
32597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data_base = (GLboolean *) 0;
32607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
32617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data = (GLboolean *) 0;
32627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!data_ref) {
32647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
32657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
32667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "data == null";
32677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
32687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
32707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
32717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
32727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
32737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
32747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
32767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    data_base = (GLboolean *)
32773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetBooleanArrayElements(data_ref, (jboolean *)0);
32787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    data = data_base + offset;
32797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetBooleani_v(
32817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
32827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
32837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean *)data
32847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
32877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (data_base) {
32883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(data_ref, (jboolean*)data_base,
32897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
32907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
32927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
32937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetBooleani_v ( GLenum target, GLuint index, GLboolean *data ) */
32977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetBooleani_v__IILjava_nio_IntBuffer_2
32997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
330084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
330184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
330284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
33033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
33047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
33057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
33067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data = (GLboolean *) 0;
33077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
330884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!data_buf) {
330984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
331084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
331184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "data == null";
331284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
331384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
33143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLboolean *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
33157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (data == NULL) {
33163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
33177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        data = (GLboolean *) (_dataBase + _bufferOffset);
33187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetBooleani_v(
33207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
33217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
33227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean *)data
33237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
332484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
332584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
33267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
332784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)data, _exception ? JNI_ABORT : 0);
332884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
332984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
333084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
33317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glMemoryBarrier ( GLbitfield barriers ) */
33357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glMemoryBarrier__I
33377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint barriers) {
33387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glMemoryBarrier(
33397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)barriers
33407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glMemoryBarrierByRegion ( GLbitfield barriers ) */
33447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glMemoryBarrierByRegion__I
33467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint barriers) {
33477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glMemoryBarrierByRegion(
33487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)barriers
33497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glTexStorage2DMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations ) */
33537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glTexStorage2DMultisample__IIIIIZ
33557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height, jboolean fixedsamplelocations) {
33567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glTexStorage2DMultisample(
33577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
33587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)samples,
33597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)internalformat,
33607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)width,
33617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)height,
33627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)fixedsamplelocations
33637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetMultisamplefv ( GLenum pname, GLuint index, GLfloat *val ) */
33677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetMultisamplefv__II_3FI
33697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jint index, jfloatArray val_ref, jint offset) {
33707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
33717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
33727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
33737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val_base = (GLfloat *) 0;
33747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
33757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val = (GLfloat *) 0;
33767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!val_ref) {
33787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
33797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
33807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "val == null";
33817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
33827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
33847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
33857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
33867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
33877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
33887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(val_ref) - offset;
33907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    val_base = (GLfloat *)
33913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(val_ref, (jboolean *)0);
33927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    val = val_base + offset;
33937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetMultisamplefv(
33957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
33967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
33977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)val
33987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
34017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (val_base) {
34023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(val_ref, (jfloat*)val_base,
34037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
34047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
34067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
34077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
34097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetMultisamplefv ( GLenum pname, GLuint index, GLfloat *val ) */
34117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
34127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetMultisamplefv__IILjava_nio_FloatBuffer_2
34137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jint index, jobject val_buf) {
341484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
341584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
341684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
34173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
34187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
34197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
34207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val = (GLfloat *) 0;
34217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
342284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!val_buf) {
342384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
342484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
342584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "val == null";
342684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
342784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
34283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    val = (GLfloat *)getPointer(_env, val_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
34297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (val == NULL) {
34303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
34317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        val = (GLfloat *) (_valBase + _bufferOffset);
34327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetMultisamplefv(
34347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
34357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
34367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)val
34377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
343884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
343984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
34407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
344184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseFloatArrayElements(_array, (jfloat*)val, _exception ? JNI_ABORT : 0);
344284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
344384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
344484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
34457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
34477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glSampleMaski ( GLuint maskNumber, GLbitfield mask ) */
34497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
34507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glSampleMaski__II
34517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint maskNumber, jint mask) {
34527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glSampleMaski(
34537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)maskNumber,
34547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)mask
34557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
34567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
34577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params ) */
34597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
34607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameteriv__III_3II
34617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jintArray params_ref, jint offset) {
34627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
34637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
34647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
34657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
34667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
34677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
34687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
34707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
34717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
34727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
34737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
34747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
34767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
34777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
34787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
34797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
34807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
34827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
34833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
34847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
34857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameteriv(
34877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
34887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
34897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
34907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
34917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
34927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
34947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
34953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
34967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
34977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
34997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
35007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
35027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params ) */
35047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
35057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2
35067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
350784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
350884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
350984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
35103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
35117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
35127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
35137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
35147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
351584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
351684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
351784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
351884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
351984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
352084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
35213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
35227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
35233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
35247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
35257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameteriv(
35277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
35287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
35297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
35307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
35317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
353284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
353384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
35347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
353584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
353684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
353784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
353884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
35397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
35417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params ) */
35437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
35447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameterfv__III_3FI
35457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jfloatArray params_ref, jint offset) {
35467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
35477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
35487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
35497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params_base = (GLfloat *) 0;
35507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
35517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params = (GLfloat *) 0;
35527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
35547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
35557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
35567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
35577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
35587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
35607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
35617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
35627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
35637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
35647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
35667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLfloat *)
35673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
35687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
35697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameterfv(
35717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
35727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
35737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
35747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)params
35757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
35767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
35787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
35793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
35807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
35817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
35837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
35847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
35867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params ) */
35887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
35897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2
35907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
359184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
359284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
359384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
35943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
35957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
35967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
35977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params = (GLfloat *) 0;
35987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
359984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
360084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
360184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
360284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
360384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
360484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
36053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
36067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
36073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
36087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLfloat *) (_paramsBase + _bufferOffset);
36097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
36107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameterfv(
36117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
36127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
36137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
36147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)params
36157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
361684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
361784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
36187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
361984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
362084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
362184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
362284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
36237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
36247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindVertexBuffer ( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride ) */
36277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindVertexBuffer__IIJI
36297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint bindingindex, jint buffer, jlong offset, jint stride) {
36307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (sizeof(GLintptr) != sizeof(jlong) && (offset < LONG_MIN || offset > LONG_MAX)) {
36317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "offset too large");
36327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
36337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
36347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindVertexBuffer(
36357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex,
36367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)buffer,
36377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLintptr)offset,
36387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)stride
36397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribFormat ( GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset ) */
36427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribFormat__IIIZI
36447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint size, jint type, jboolean normalized, jint relativeoffset) {
36457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribFormat(
36467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
36477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)size,
36487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)type,
36497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)normalized,
36507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)relativeoffset
36517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribIFormat ( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset ) */
36557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribIFormat__IIII
36577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint size, jint type, jint relativeoffset) {
36587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribIFormat(
36597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
36607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)size,
36617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)type,
36627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)relativeoffset
36637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribBinding ( GLuint attribindex, GLuint bindingindex ) */
36677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribBinding__II
36697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint bindingindex) {
36707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribBinding(
36717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
36727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex
36737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexBindingDivisor ( GLuint bindingindex, GLuint divisor ) */
36777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexBindingDivisor__II
36797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint bindingindex, jint divisor) {
36807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexBindingDivisor(
36817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex,
36827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)divisor
36837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic const char *classPathName = "android/opengl/GLES31";
36877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
368876f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = {
36897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"_nativeClassInit", "()V", (void*)nativeClassInit },
36907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDispatchCompute", "(III)V", (void *) android_glDispatchCompute__III },
36917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDispatchComputeIndirect", "(J)V", (void *) android_glDispatchComputeIndirect },
36927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDrawArraysIndirect", "(IJ)V", (void *) android_glDrawArraysIndirect },
36937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDrawElementsIndirect", "(IIJ)V", (void *) android_glDrawElementsIndirect },
36947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glFramebufferParameteri", "(III)V", (void *) android_glFramebufferParameteri__III },
36957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetFramebufferParameteriv", "(II[II)V", (void *) android_glGetFramebufferParameteriv__II_3II },
36967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetFramebufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2 },
36977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramInterfaceiv", "(III[II)V", (void *) android_glGetProgramInterfaceiv__III_3II },
36987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramInterfaceiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2 },
36997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceIndex", "(IILjava/lang/String;)I", (void *) android_glGetProgramResourceIndex__IILjava_lang_String_2 },
37007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceName", "(III)Ljava/lang/String;", (void *) android_glGetProgramResourceName },
37017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceiv", "(IIII[III[II[II)V", (void *) android_glGetProgramResourceiv__IIII_3III_3II_3II },
37027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceiv", "(IIIILjava/nio/IntBuffer;ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetProgramResourceiv__IIIILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
37037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceLocation", "(IILjava/lang/String;)I", (void *) android_glGetProgramResourceLocation__IILjava_lang_String_2 },
37047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glUseProgramStages", "(III)V", (void *) android_glUseProgramStages__III },
37057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glActiveShaderProgram", "(II)V", (void *) android_glActiveShaderProgram__II },
37067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glCreateShaderProgramv", "(I[Ljava/lang/String;)I", (void *) android_glCreateShaderProgramv },
37077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindProgramPipeline", "(I)V", (void *) android_glBindProgramPipeline__I },
37087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDeleteProgramPipelines", "(I[II)V", (void *) android_glDeleteProgramPipelines__I_3II },
37097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDeleteProgramPipelines", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2 },
37107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGenProgramPipelines", "(I[II)V", (void *) android_glGenProgramPipelines__I_3II },
37117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGenProgramPipelines", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenProgramPipelines__ILjava_nio_IntBuffer_2 },
37127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glIsProgramPipeline", "(I)Z", (void *) android_glIsProgramPipeline__I },
37137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineiv", "(II[II)V", (void *) android_glGetProgramPipelineiv__II_3II },
37147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2 },
37157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1i", "(III)V", (void *) android_glProgramUniform1i__III },
37167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2i", "(IIII)V", (void *) android_glProgramUniform2i__IIII },
37177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3i", "(IIIII)V", (void *) android_glProgramUniform3i__IIIII },
37187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4i", "(IIIIII)V", (void *) android_glProgramUniform4i__IIIIII },
37197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1ui", "(III)V", (void *) android_glProgramUniform1ui__III },
37207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2ui", "(IIII)V", (void *) android_glProgramUniform2ui__IIII },
37217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3ui", "(IIIII)V", (void *) android_glProgramUniform3ui__IIIII },
37227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4ui", "(IIIIII)V", (void *) android_glProgramUniform4ui__IIIIII },
37237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1f", "(IIF)V", (void *) android_glProgramUniform1f__IIF },
37247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2f", "(IIFF)V", (void *) android_glProgramUniform2f__IIFF },
37257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3f", "(IIFFF)V", (void *) android_glProgramUniform3f__IIFFF },
37267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4f", "(IIFFFF)V", (void *) android_glProgramUniform4f__IIFFFF },
37277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1iv", "(III[II)V", (void *) android_glProgramUniform1iv__III_3II },
37287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform1iv__IIILjava_nio_IntBuffer_2 },
37297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2iv", "(III[II)V", (void *) android_glProgramUniform2iv__III_3II },
37307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform2iv__IIILjava_nio_IntBuffer_2 },
37317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3iv", "(III[II)V", (void *) android_glProgramUniform3iv__III_3II },
37327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform3iv__IIILjava_nio_IntBuffer_2 },
37337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4iv", "(III[II)V", (void *) android_glProgramUniform4iv__III_3II },
37347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform4iv__IIILjava_nio_IntBuffer_2 },
37357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1uiv", "(III[II)V", (void *) android_glProgramUniform1uiv__III_3II },
37367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2 },
37377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2uiv", "(III[II)V", (void *) android_glProgramUniform2uiv__III_3II },
37387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2 },
37397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3uiv", "(III[II)V", (void *) android_glProgramUniform3uiv__III_3II },
37407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2 },
37417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4uiv", "(III[II)V", (void *) android_glProgramUniform4uiv__III_3II },
37427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2 },
37437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1fv", "(III[FI)V", (void *) android_glProgramUniform1fv__III_3FI },
37447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2 },
37457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2fv", "(III[FI)V", (void *) android_glProgramUniform2fv__III_3FI },
37467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2 },
37477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3fv", "(III[FI)V", (void *) android_glProgramUniform3fv__III_3FI },
37487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2 },
37497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4fv", "(III[FI)V", (void *) android_glProgramUniform4fv__III_3FI },
37507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2 },
37517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2fv__IIIZ_3FI },
37527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2 },
37537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3fv__IIIZ_3FI },
37547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2 },
37557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4fv__IIIZ_3FI },
37567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2 },
37577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2x3fv__IIIZ_3FI },
37587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2 },
37597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3x2fv__IIIZ_3FI },
37607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2 },
37617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2x4fv__IIIZ_3FI },
37627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2 },
37637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4x2fv__IIIZ_3FI },
37647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2 },
37657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3x4fv__IIIZ_3FI },
37667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2 },
37677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4x3fv__IIIZ_3FI },
37687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2 },
37697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glValidateProgramPipeline", "(I)V", (void *) android_glValidateProgramPipeline__I },
37707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineInfoLog", "(I)Ljava/lang/String;", (void *) android_glGetProgramPipelineInfoLog },
37717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindImageTexture", "(IIIZIII)V", (void *) android_glBindImageTexture__IIIZIII },
37727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetBooleani_v", "(II[ZI)V", (void *) android_glGetBooleani_v__II_3ZI },
37737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetBooleani_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetBooleani_v__IILjava_nio_IntBuffer_2 },
37747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glMemoryBarrier", "(I)V", (void *) android_glMemoryBarrier__I },
37757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glMemoryBarrierByRegion", "(I)V", (void *) android_glMemoryBarrierByRegion__I },
37767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glTexStorage2DMultisample", "(IIIIIZ)V", (void *) android_glTexStorage2DMultisample__IIIIIZ },
37777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetMultisamplefv", "(II[FI)V", (void *) android_glGetMultisamplefv__II_3FI },
37787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetMultisamplefv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetMultisamplefv__IILjava_nio_FloatBuffer_2 },
37797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glSampleMaski", "(II)V", (void *) android_glSampleMaski__II },
37807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameteriv", "(III[II)V", (void *) android_glGetTexLevelParameteriv__III_3II },
37817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameteriv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2 },
37827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameterfv", "(III[FI)V", (void *) android_glGetTexLevelParameterfv__III_3FI },
37837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameterfv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2 },
37847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindVertexBuffer", "(IIJI)V", (void *) android_glBindVertexBuffer__IIJI },
37857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribFormat", "(IIIZI)V", (void *) android_glVertexAttribFormat__IIIZI },
37867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribIFormat", "(IIII)V", (void *) android_glVertexAttribIFormat__IIII },
37877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribBinding", "(II)V", (void *) android_glVertexAttribBinding__II },
37887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexBindingDivisor", "(II)V", (void *) android_glVertexBindingDivisor__II },
37897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall};
37907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
37917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallint register_android_opengl_jni_GLES31(JNIEnv *_env)
37927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
37937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int err;
37947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
37957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return err;
37967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3797