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-but-set-variable"
21bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-function"
22bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe
237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <stdint.h>
247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <GLES3/gl31.h>
259626f8203a8c222b8960a49cdc66d540fdb688b0Jesse Hall#include <jni.h>
262279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h>
277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <android_runtime/AndroidRuntime.h>
287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <utils/misc.h>
297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <assert.h>
307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic int initialized = 0;
327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jclass nioAccessClass;
347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jclass bufferClass;
357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jmethodID getBasePointerID;
367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jmethodID getBaseArrayID;
377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jmethodID getBaseArrayOffsetID;
387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jfieldID positionID;
397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jfieldID limitID;
407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jfieldID elementSizeShiftID;
417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* special calls implemented in Android's GLES wrapper used to more
447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * efficiently bound-check passed arrays */
457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallextern "C" {
467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_VERSION_ES_CM_1_1
477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        const GLvoid *ptr, GLsizei count);
497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        const GLvoid *pointer, GLsizei count);
517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallGL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_2_0
637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_3_0
697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count) {
717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribIPointer(indx, size, type, stride, pointer);
727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* Cache method IDs each time the class is loaded. */
777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallnativeClassInit(JNIEnv *_env, jclass glImplClass)
807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            "getBasePointer", "(Ljava/nio/Buffer;)J");
897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    positionID = _env->GetFieldID(bufferClass, "position", "I");
957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    limitID = _env->GetFieldID(bufferClass, "limit", "I");
967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    elementSizeShiftID =
977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void *
1017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
1027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
1037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint position;
1047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint limit;
1057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint elementSizeShift;
1067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jlong pointer;
1077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    position = _env->GetIntField(buffer, positionID);
1097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    limit = _env->GetIntField(buffer, limitID);
1107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
1117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    *remaining = (limit - position) << elementSizeShift;
1127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pointer = _env->CallStaticLongMethod(nioAccessClass,
1137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            getBasePointerID, buffer);
1147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pointer != 0L) {
1157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        *array = NULL;
1167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return reinterpret_cast<void*>(pointer);
1177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
1187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
1207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            getBaseArrayID, buffer);
1217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    *offset = _env->CallStaticIntMethod(nioAccessClass,
1227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            getBaseArrayOffsetID, buffer);
1237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return NULL;
1257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
1267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
1273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayGetter {
1283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
1303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetByteArrayElements(array, is_copy);
1313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayGetter {
1343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
1363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetBooleanArrayElements(array, is_copy);
1373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayGetter {
1403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
1423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetCharArrayElements(array, is_copy);
1433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayGetter {
1463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
1483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetShortArrayElements(array, is_copy);
1493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayGetter {
1523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
1543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetIntArrayElements(array, is_copy);
1553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayGetter {
1583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
1603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetLongArrayElements(array, is_copy);
1613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayGetter {
1643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
1663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetFloatArrayElements(array, is_copy);
1673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayGetter {
1703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
1723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetDoubleArrayElements(array, is_copy);
1733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename ARRAYGETTER>
1773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void*
1783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchigetArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
1793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    return ARRAYGETTER::Get(_env, array, is_copy);
1803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
1813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayReleaser {
1833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
1853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
1863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayReleaser {
1893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
1913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
1923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayReleaser {
1953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
1973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
1983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayReleaser {
2013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
2033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
2043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayReleaser {
2073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
2093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
2103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayReleaser {
2133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
2153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
2163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayReleaser {
2193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
2213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
2223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayReleaser {
2253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
2273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
2283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
2313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
2323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void
2333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchireleaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
2343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ARRAYRELEASER::Release(_env, array, data, commit);
2353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
2363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
2377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
2387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
2397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
2407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _env->ReleasePrimitiveArrayCritical(array, data,
2417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall                       commit ? 0 : JNI_ABORT);
2427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
2437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void *
2457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse HallgetDirectBufferPointer(JNIEnv *_env, jobject buffer) {
2467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
2477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (buf) {
2487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jint position = _env->GetIntField(buffer, positionID);
2497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
2507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        buf += position << elementSizeShift;
2517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    } else {
2527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException",
2537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall                          "Must use a native order direct Buffer");
2547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
2557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (void*) buf;
2567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
2577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall// --------------------------------------------------------------------------
2597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/*
2617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * returns the number of values glGet returns for a given pname.
2627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
2637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * The code below is written such that pnames requiring only one values
2647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * are the default (and are not explicitely tested for). This makes the
2657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * checking code much shorter/readable/efficient.
2667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall *
2677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * This means that unknown pnames (e.g.: extensions) will default to 1. If
2687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * that unknown pname needs more than 1 value, then the validation check
2697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall * is incomplete and the app may crash if it passed the wrong number params.
2707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall */
2717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic int getNeededCount(GLint pname) {
2727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int needed = 1;
273dc43a6c99c21e99723058bab4041e80557795a74Romain Guy#ifdef GL_ES_VERSION_3_0
274dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    // GLES 3.x pnames
275dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    switch (pname) {
276dc43a6c99c21e99723058bab4041e80557795a74Romain Guy        case GL_MAX_VIEWPORT_DIMS:
277dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            needed = 2;
278dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            break;
279dc43a6c99c21e99723058bab4041e80557795a74Romain Guy
280dc43a6c99c21e99723058bab4041e80557795a74Romain Guy        case GL_PROGRAM_BINARY_FORMATS:
281dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &needed);
282dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            break;
283dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    }
284dc43a6c99c21e99723058bab4041e80557795a74Romain Guy#endif
285dc43a6c99c21e99723058bab4041e80557795a74Romain Guy
2867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_2_0
2877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GLES 2.x pnames
2887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    switch (pname) {
2897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
2907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
2917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 2;
2927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
2937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_BLEND_COLOR:
2957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_CLEAR_VALUE:
2967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_WRITEMASK:
2977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SCISSOR_BOX:
2987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_VIEWPORT:
2997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 4;
3007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
3037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
3047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SHADER_BINARY_FORMATS:
3077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
3087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
3117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_VERSION_ES_CM_1_1
3137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GLES 1.x pnames
3147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    switch (pname) {
3157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
3167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
3177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_DEPTH_RANGE:
3187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SMOOTH_LINE_WIDTH_RANGE:
3197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SMOOTH_POINT_SIZE_RANGE:
3207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 2;
3217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_NORMAL:
3247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_POINT_DISTANCE_ATTENUATION:
3257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 3;
3267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_CLEAR_VALUE:
3297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_WRITEMASK:
3307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_COLOR:
3317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_TEXTURE_COORDS:
3327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_FOG_COLOR:
3337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_LIGHT_MODEL_AMBIENT:
3347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SCISSOR_BOX:
3357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_VIEWPORT:
3367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 4;
3377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_MODELVIEW_MATRIX:
3407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_PROJECTION_MATRIX:
3417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_TEXTURE_MATRIX:
3427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 16;
3437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
3467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
3477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
3507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return needed;
3517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
3557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
3567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallget
3577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
3587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
3597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType;
3607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage;
3617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params_base = (CTYPE *) 0;
3627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
3637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params = (CTYPE *) 0;
3647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int _needed = 0;
3657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
3677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
3707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
3737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
3767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _needed = getNeededCount(pname);
3807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // if we didn't find this pname, we just assume the user passed
3817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // an array of the right size -- this might happen with extensions
3827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // or if we forget an enum here.
3837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_remaining < _needed) {
3847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "length - offset < needed";
3877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
3903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env, params_ref, (jboolean *)0);
3917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
3927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GET(
3947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
3957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (CTYPE *)params
3967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
3977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
3997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
4003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, params_ref, params_base, !_exception);
4027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
4047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
4103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
4117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
4127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallgetarray
4137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
4147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
4157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType;
4167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage;
4173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    JTYPEARRAY _array = (JTYPEARRAY) 0;
4187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
4197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
4207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params = (CTYPE *) 0;
4217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int _needed = 0;
4227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining /= sizeof(CTYPE);    // convert from bytes to item count
4257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _needed = getNeededCount(pname);
4267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // if we didn't find this pname, we just assume the user passed
4277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // an array of the right size -- this might happen with extensions
4287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // or if we forget an enum here.
4297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_needed>0 && _remaining < _needed) {
4307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
4317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "remaining() < needed";
4337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
4347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
4363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
4373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (jboolean *) 0);
4387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (CTYPE *) (_paramsBase + _bufferOffset);
4397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GET(
4417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
4427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (CTYPE *)params
4437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
4447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
4467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
4473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
4497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
4517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall// --------------------------------------------------------------------------
4567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDispatchCompute ( GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z ) */
4577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
4587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDispatchCompute__III
4597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint num_groups_x, jint num_groups_y, jint num_groups_z) {
4607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDispatchCompute(
4617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_x,
4627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_y,
4637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_z
4647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
4657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDispatchComputeIndirect ( GLintptr indirect ) */
4687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDispatchComputeIndirect(JNIEnv *_env, jobject, jlong indirect) {
4697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // 'indirect' is a byte offset, not a pointer. GL checks for negative and too-large values.
4707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // Here we only need to check for successful 64-bit to 32-bit conversion.
4717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // - jlong is a int64_t (jni.h)
4727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // - GLintptr is a long (khrplatform.h)
4737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (sizeof(GLintptr) != sizeof(jlong) && (indirect < LONG_MIN || indirect > LONG_MAX)) {
4747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDispatchComputeIndirect((GLintptr)indirect);
4787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDrawArraysIndirect ( GLenum mode, const void *indirect ) */
4817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDrawArraysIndirect(JNIEnv *_env, jobject, int mode, jlong indirect) {
4827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer.
4837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GL checks for too-large values. Here we only need to check for successful signed 64-bit
4847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // to unsigned 32-bit conversion.
485bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe    if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) {
4867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDrawArraysIndirect(mode, (const void*)indirect);
4907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDrawElementsIndirect ( GLenum mode, GLenum type, const void *indirect ) */
4937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDrawElementsIndirect(JNIEnv *_env, jobject, jint mode, jint type, jlong indirect) {
4947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer.
4957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GL checks for too-large values. Here we only need to check for successful signed 64-bit
4967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // to unsigned 32-bit conversion.
497bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe    if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) {
4987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
5007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDrawElementsIndirect(mode, type, (const void*)indirect);
5027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glFramebufferParameteri ( GLenum target, GLenum pname, GLint param ) */
5057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glFramebufferParameteri__III
5077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
5087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glFramebufferParameteri(
5097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)param
5127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetFramebufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
5167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetFramebufferParameteriv__II_3II
5187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
5197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
5207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
5217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
5227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
5237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
5277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
5307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
5337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
5367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
5403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
5427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetFramebufferParameteriv(
5447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
5477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
5507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
5513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
5537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
5557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetFramebufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
5607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2
5627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
56384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
56484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
56584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
5663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
5687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
57184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
57284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
57384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
57484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
57584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
57684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
5793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetFramebufferParameteriv(
5837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
5867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
58784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
58884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
59084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
59184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
59284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
59384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramInterfaceiv ( GLuint program, GLenum programInterface, GLenum pname, GLint *params ) */
5987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramInterfaceiv__III_3II
6007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jintArray params_ref, jint offset) {
6017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
6027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
6037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
6047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
6057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
6067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
6077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
6097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
6127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
6157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
6187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
6217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
6223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
6237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
6247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramInterfaceiv(
6267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
6297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
6307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
6317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
6337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
6343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
6357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
6367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
6387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
6397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramInterfaceiv ( GLuint program, GLenum programInterface, GLenum pname, GLint *params ) */
6437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
6447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2
6457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jobject params_buf) {
64684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
64784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
64884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
6493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
6507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
6517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
6527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
6537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
65484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
65584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
65684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
65784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
65884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
65984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
6603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
6617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
6623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
6637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
6647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramInterfaceiv(
6667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
6697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
6707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
67184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
67284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
6737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
67484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
67584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
67684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
67784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
6787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLuint glGetProgramResourceIndex ( GLuint program, GLenum programInterface, const GLchar *name ) */
6827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
6837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceIndex__IILjava_lang_String_2
6847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jstring name) {
6857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
6867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
6877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
6887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint _returnValue = 0;
6897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char* _nativename = 0;
6907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!name) {
6927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "name == null";
6957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
6987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glGetProgramResourceIndex(
7007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
7017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
7027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLchar *)_nativename
7037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
7047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
7067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_nativename) {
7077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
7087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
7117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
7127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jint)_returnValue;
7147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
7157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceName ( GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name ) */
7177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jstring
7187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceName
7197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index) {
7207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
7217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return NULL;
7227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
7237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceiv ( GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params ) */
7257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
7267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceiv__IIII_3III_3II_3II
7277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse 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) {
7287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
7297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
7307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
7317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props_base = (GLenum *) 0;
7327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsRemaining;
7337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props = (GLenum *) 0;
7347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length_base = (GLsizei *) 0;
7357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthRemaining;
7367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length = (GLsizei *) 0;
7377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
7387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsRemaining;
7397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
7407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!props_ref) {
7427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "props == null";
7457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (propsOffset < 0) {
7487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "propsOffset < 0";
7517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _propsRemaining = _env->GetArrayLength(props_ref) - propsOffset;
7547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    props_base = (GLenum *)
7553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(props_ref, (jboolean *)0);
7567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    props = props_base + propsOffset;
7577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7586aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
7596aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
7606aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
7616aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
7626aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
7636aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
7646aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
7656aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
7666aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
7676aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
7686aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
7697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
7727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
7757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (paramsOffset < 0) {
7787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "paramsOffset < 0";
7817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
7847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
7853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
7867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + paramsOffset;
7877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramResourceiv(
7897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
7907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
7917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
7927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)propCount,
7937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum *)props,
7947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)bufSize,
7957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei *)length,
7967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
7977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
7987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
8007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
8013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
8027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
8037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (length_base) {
8053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
8067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
8077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (props_base) {
8093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(props_ref, (jint*)props_base,
8107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
8117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
8137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
8147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceiv ( GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params ) */
8187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
8197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceiv__IIIILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
8207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index, jint propCount, jobject props_buf, jint bufSize, jobject length_buf, jobject params_buf) {
82184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
82284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
82384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
8243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _propsArray = (jintArray) 0;
8257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsBufferOffset = (jint) 0;
8263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
8277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthBufferOffset = (jint) 0;
8283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _paramsArray = (jintArray) 0;
8297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsBufferOffset = (jint) 0;
8307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsRemaining;
8317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props = (GLenum *) 0;
8327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthRemaining;
8337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length = (GLsizei *) 0;
8347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsRemaining;
8357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
8367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
83784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!props_buf) {
83884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
83984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
84084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "props == null";
84184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
84284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    props = (GLenum *)getPointer(_env, props_buf, (jarray*)&_propsArray, &_propsRemaining, &_propsBufferOffset);
8446aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
8456aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
8466aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
84784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
84884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
84984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
85084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
85184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
85284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
8547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (props == NULL) {
8553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _propsBase = (char *)_env->GetIntArrayElements(_propsArray, (jboolean *) 0);
8567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        props = (GLenum *) (_propsBase + _propsBufferOffset);
8577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8586aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
8593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
8607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
8617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
8633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
8647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _paramsBufferOffset);
8657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramResourceiv(
8677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
8687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
8697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
8707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)propCount,
8717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum *)props,
8727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)bufSize,
8737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei *)length,
8747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
8757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
87684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
87784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
8787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_paramsArray) {
87984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, _exception ? JNI_ABORT : 0);
8807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_lengthArray) {
88284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, _exception ? JNI_ABORT : 0);
8837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_propsArray) {
8853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_propsArray, (jint*)props, JNI_ABORT);
8867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
88784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
88884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
88984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLint glGetProgramResourceLocation ( GLuint program, GLenum programInterface, const GLchar *name ) */
8937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
8947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceLocation__IILjava_lang_String_2
8957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jstring name) {
8967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
8977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
8987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
8997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint _returnValue = 0;
9007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char* _nativename = 0;
9017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!name) {
9037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
9047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
9057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "name == null";
9067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
9077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
9097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glGetProgramResourceLocation(
9117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
9127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
9137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLchar *)_nativename
9147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
9177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_nativename) {
9187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
9197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
9227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
9237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jint)_returnValue;
9257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glUseProgramStages ( GLuint pipeline, GLbitfield stages, GLuint program ) */
9287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
9297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glUseProgramStages__III
9307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint stages, jint program) {
9317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glUseProgramStages(
9327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
9337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)stages,
9347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program
9357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glActiveShaderProgram ( GLuint pipeline, GLuint program ) */
9397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
9407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glActiveShaderProgram__II
9417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint program) {
9427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glActiveShaderProgram(
9437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
9447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program
9457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLuint glCreateShaderProgramv ( GLenum type, GLsizei count, const GLchar *const *strings ) */
9497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
9507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glCreateShaderProgramv
9517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint type, jobjectArray strings) {
9527f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    jint _exception = 0;
9537f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const char * _exceptionType = NULL;
9547f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const char * _exceptionMessage = NULL;
9557f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    GLsizei _count;
9567f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const GLchar** _strings = NULL;
9577f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    jstring* _jstrings = NULL;
9587f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    GLuint _returnValue = 0;
9597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9607f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!strings) {
9617f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9627f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
9637f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "strings == null";
9647f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9657f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9667f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9677f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _count = _env->GetArrayLength(strings);
9687f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9697f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _strings = (const GLchar**) calloc(_count, sizeof(const GLchar*));
9707f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!_strings) {
9717f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9727f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/OutOfMemoryError";
9737f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "out of memory";
9747f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9757f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9767f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9777f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _jstrings = (jstring*) calloc(_count, sizeof(jstring));
9787f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!_jstrings) {
9797f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9807f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/OutOfMemoryError";
9817f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "out of memory";
9827f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9837f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9847f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9857f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    for(int i = 0; i < _count; i++) {
9867f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _jstrings[i] = (jstring) _env->GetObjectArrayElement(strings, i);
9877f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        if (!_jstrings[i]) {
9887f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exception = 1;
9897f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
9907f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exceptionMessage = "strings == null";
9917f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            goto exit;
9927f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        }
9937f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _strings[i] = _env->GetStringUTFChars(_jstrings[i], 0);
9947f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9957f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9967f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _returnValue = glCreateShaderProgramv((GLenum)type, _count, _strings);
9977f16ec21711fdb97930166175c29d8235f75202ePablo Ceballosexit:
9987f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_strings && _jstrings) {
9997f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        for(int i = 0; i < _count; i++) {
10007f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            if (_strings[i] && _jstrings[i]) {
10017f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos                _env->ReleaseStringUTFChars(_jstrings[i], _strings[i]);
10027f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            }
10037f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        }
10047f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10057f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_strings) {
10067f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        free(_strings);
10077f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10087f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_jstrings) {
10097f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        free(_jstrings);
10107f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10117f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_exception) {
10127f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
10137f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
10147f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    return (jint)_returnValue;
10157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindProgramPipeline ( GLuint pipeline ) */
10177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindProgramPipeline__I
10197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
10207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindProgramPipeline(
10217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
10227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDeleteProgramPipelines ( GLsizei n, const GLuint *pipelines ) */
10267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDeleteProgramPipelines__I_3II
10287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray pipelines_ref, jint offset) {
10297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
10307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
10317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
10327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines_base = (GLuint *) 0;
10337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!pipelines_ref) {
10377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
10387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
10397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "pipelines == null";
10407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
10417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
10437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
10447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
10457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
10467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
10477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(pipelines_ref) - offset;
10497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines_base = (GLuint *)
10503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
10517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines = pipelines_base + offset;
10527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDeleteProgramPipelines(
10547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
10597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines_base) {
10603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
10617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
10627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
10647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
10657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDeleteProgramPipelines ( GLsizei n, const GLuint *pipelines ) */
10697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2
10717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
107284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
107384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
107484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
10753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
10767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
10777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
108084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!pipelines_buf) {
108184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
108284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
108384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "pipelines == null";
108484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
108584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
10863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
10877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines == NULL) {
10883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
10897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
10907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDeleteProgramPipelines(
10927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
109584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
109684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
10977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
10983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)pipelines, JNI_ABORT);
10997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
110084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
110184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
110284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
11037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGenProgramPipelines ( GLsizei n, GLuint *pipelines ) */
11067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGenProgramPipelines__I_3II
11087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray pipelines_ref, jint offset) {
11097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
11107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
11117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
11127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines_base = (GLuint *) 0;
11137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
11147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
11157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!pipelines_ref) {
11177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
11187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
11197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "pipelines == null";
11207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
11217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
11237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
11247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
11257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
11267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
11277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(pipelines_ref) - offset;
11297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines_base = (GLuint *)
11303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
11317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines = pipelines_base + offset;
11327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGenProgramPipelines(
11347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
11357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
11367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
11397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines_base) {
11403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
11417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
11427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
11447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
11457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGenProgramPipelines ( GLsizei n, GLuint *pipelines ) */
11497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGenProgramPipelines__ILjava_nio_IntBuffer_2
11517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
115284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
115384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
115484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
11553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
11567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
11577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
11587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
11597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
116084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!pipelines_buf) {
116184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
116284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
116384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "pipelines == null";
116484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
116584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
11663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
11677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines == NULL) {
11683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
11697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
11707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGenProgramPipelines(
11727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
11737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
11747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
117584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
117684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
11777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
117884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)pipelines, _exception ? JNI_ABORT : 0);
117984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
118084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
118184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
11827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLboolean glIsProgramPipeline ( GLuint pipeline ) */
11867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jboolean
11877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glIsProgramPipeline__I
11887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
11897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean _returnValue;
11907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glIsProgramPipeline(
11917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
11927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jboolean)_returnValue;
11947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineiv ( GLuint pipeline, GLenum pname, GLint *params ) */
11977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramPipelineiv__II_3II
11997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint pname, jintArray params_ref, jint offset) {
12007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
12017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
12027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
12037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
12047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
12057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
12067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
12087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
12097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
12107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
12117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
12127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
12147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
12157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
12167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
12177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
12187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
12207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
12213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
12227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
12237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(
12257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
12267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
12277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
12287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
12317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
12323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
12337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
12347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
12367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
12377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineiv ( GLuint pipeline, GLenum pname, GLint *params ) */
12417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2
12437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint pname, jobject params_buf) {
124484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
124584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
124684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
12473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
12487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
12497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
12507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
12517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
125284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
125384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
125484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
125584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
125684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
125784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
12583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
12597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
12603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
12617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
12627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(
12647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
12657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
12667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
12677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
126884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
126984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
12707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
127184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
127284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
127384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
127484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
12757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
12767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1i ( GLuint program, GLint location, GLint v0 ) */
12797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1i__III
12817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0) {
12827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1i(
12837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0
12867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2i ( GLuint program, GLint location, GLint v0, GLint v1 ) */
12907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2i__IIII
12927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1) {
12937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2i(
12947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
12977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1
12987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3i ( GLuint program, GLint location, GLint v0, GLint v1, GLint v2 ) */
13027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3i__IIIII
13047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2) {
13057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3i(
13067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
13097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1,
13107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v2
13117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4i ( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3 ) */
13157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4i__IIIIII
13177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2, jint v3) {
13187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4i(
13197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
13227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1,
13237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v2,
13247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v3
13257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1ui ( GLuint program, GLint location, GLuint v0 ) */
13297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1ui__III
13317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0) {
13327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1ui(
13337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0
13367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2ui ( GLuint program, GLint location, GLuint v0, GLuint v1 ) */
13407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2ui__IIII
13427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1) {
13437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2ui(
13447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
13477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1
13487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3ui ( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
13527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3ui__IIIII
13547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2) {
13557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3ui(
13567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
13597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1,
13607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v2
13617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4ui ( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
13657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4ui__IIIIII
13677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2, jint v3) {
13687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4ui(
13697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
13727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1,
13737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v2,
13747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v3
13757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1f ( GLuint program, GLint location, GLfloat v0 ) */
13797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1f__IIF
13817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0) {
13827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1f(
13837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0
13867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2f ( GLuint program, GLint location, GLfloat v0, GLfloat v1 ) */
13907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2f__IIFF
13927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1) {
13937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2f(
13947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
13977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1
13987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3f ( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2 ) */
14027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3f__IIFFF
14047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1, jfloat v2) {
14057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3f(
14067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
14097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1,
14107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v2
14117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4f ( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3 ) */
14157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4f__IIFFFF
14177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1, jfloat v2, jfloat v3) {
14187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4f(
14197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
14227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1,
14237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v2,
14247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v3
14257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
14297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1iv__III_3II
14317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
14327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
14337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
14347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
14357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
14367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
14407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
14437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
14467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
14497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
14527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
14533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
14547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
14557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1iv(
14577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
14607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
14617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
14647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
14653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
14667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
14677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
14697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
14707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
14747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1iv__IIILjava_nio_IntBuffer_2
14767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
147784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
147884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
147984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
14803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
14817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
14827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
148584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
148684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
148784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
148884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
148984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
149084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
14913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
14927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
14933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
14947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
14957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1iv(
14977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
150284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
150384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
15047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
15053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
15067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
150784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
150884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
150984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2iv__III_3II
15157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
15167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
15177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
15187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
15197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
15207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
15247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
15257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
15267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
15277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
15287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
15307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
15317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
15327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
15337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
15347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
15367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
15373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
15387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
15397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2iv(
15417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
15467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
15487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
15493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
15507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
15517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
15537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
15547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2iv__IIILjava_nio_IntBuffer_2
15607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
156184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
156284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
156384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
15643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
15657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
15667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
156984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
157084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
157184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
157284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
157384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
157484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
15767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
15773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
15787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
15797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2iv(
15817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
158684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
158784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
15887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
15893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
15907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
159184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
159284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
159384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3iv__III_3II
15997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
16007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
16017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
16027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
16037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
16047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
16067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
16087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
16117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
16147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
16177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
16207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
16213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
16227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
16237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3iv(
16257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
16267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
16277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
16287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
16297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
16307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
16327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
16333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
16347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
16357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
16377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
16387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
16427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3iv__IIILjava_nio_IntBuffer_2
16447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
164584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
164684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
164784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
16483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
16497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
16507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
16527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
165384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
165484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
165584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
165684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
165784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
165884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
16593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
16607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
16613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
16627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
16637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3iv(
16657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
16667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
16677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
16687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
16697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
167084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
167184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
16727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
16733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
16747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
167584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
167684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
167784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
16787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
16817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4iv__III_3II
16837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
16847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
16857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
16867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
16877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
16887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
16907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
16927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
16957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
16987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
17017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
17047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
17053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
17067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
17077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4iv(
17097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
17137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
17167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
17173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
17187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
17197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
17217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
17227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
17267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4iv__IIILjava_nio_IntBuffer_2
17287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
172984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
173084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
173184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
17323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
17337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
17347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
17367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
173784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
173884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
173984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
174084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
174184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
174284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
17433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
17447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
17453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
17467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
17477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4iv(
17497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
17537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
175484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
175584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
17567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
17573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
17587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
175984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
176084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
176184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
17627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
17657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1uiv__III_3II
17677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
17687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
17697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
17707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
17717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
17727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
17747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
17767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
17777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
17797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
17827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
17837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
17857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
17887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
17893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
17907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
17917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1uiv(
17937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
17977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
18007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
18013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
18027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
18037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
18057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
18067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2
18127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
181384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
181484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
181584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
18163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
18177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
18187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
18207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
182184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
182284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
182384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
182484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
182584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
182684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
18273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
18287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
18293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
18307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
18317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1uiv(
18337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
183884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
183984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
18407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
18413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
18427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
184384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
184484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
184584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
18467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2uiv__III_3II
18517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
18527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
18537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
18547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
18557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
18567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
18587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
18607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
18637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
18647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
18667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
18697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
18707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
18727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
18733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
18747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
18757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2uiv(
18777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
18827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
18847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
18853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
18867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
18877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
18897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
18907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2
18967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
189784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
189884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
189984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
19003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
19017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
19027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
19047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
190584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
190684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
190784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
190884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
190984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
191084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
19127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
19133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
19147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
19157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2uiv(
19177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
19217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
192284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
192384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
19247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
19253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
19267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
192784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
192884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
192984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
19337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
19347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3uiv__III_3II
19357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
19367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
19377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
19387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
19397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
19407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
19427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
19447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
19477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
19507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
19537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
19567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
19573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
19587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
19597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3uiv(
19617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
19657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
19667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
19687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
19693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
19707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
19717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
19737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
19747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
19787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
19797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2
19807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
198184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
198284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
198384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
19843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
19857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
19867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
19887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
198984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
199084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
199184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
199284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
199384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
199484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
19967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
19973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
19987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
19997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3uiv(
20017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
20057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
200684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
200784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
20087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
20093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
20107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
201184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
201284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
201384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
20177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4uiv__III_3II
20197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
20207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
20217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
20227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
20237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
20247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
20267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
20287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
20297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
20317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
20327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
20347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
20357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
20377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
20387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
20407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
20413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
20427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
20437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4uiv(
20457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
20497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
20507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
20527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
20533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
20547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
20557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
20577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
20587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
20627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2
20647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
206584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
206684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
206784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
20683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
20697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
20707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
20727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
207384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
207484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
207584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
207684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
207784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
207884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
20807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
20813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
20827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
20837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4uiv(
20857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
20897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
209084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
209184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
20927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
20933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
20947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
209584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
209684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
209784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1fv__III_3FI
21037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
21047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
21057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
21067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
21077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
21087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
21127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
21157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
21187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
21217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
21247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
21253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
21267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
21277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1fv(
21297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
21347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
21367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
21373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
21387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
21397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
21417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
21427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
21447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2
21487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
214984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
215084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
215184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
21523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
21537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
21547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
215784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
215884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
215984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
216084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
216184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
216284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
21633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
21647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
21653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
21667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
21677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1fv(
21697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
217484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
217584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
21767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
21773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
21787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
217984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
218084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
218184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
21827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
21837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2fv__III_3FI
21877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
21887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
21897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
21907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
21917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
21927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
21967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
21997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
22027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
22057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
22087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
22093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
22107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
22117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2fv(
22137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
22177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
22187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
22207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
22213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
22227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
22237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
22257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
22267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
22307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2
22327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
223384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
223484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
223584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
22363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
22377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
22387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
224184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
224284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
224384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
224484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
224584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
224684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
22473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
22487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
22493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
22507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
22517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2fv(
22537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
22577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
225884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
225984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
22607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
22613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
22627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
226384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
226484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
226584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
22667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
22697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3fv__III_3FI
22717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
22727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
22737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
22747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
22757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
22767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
22807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
22837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
22867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
22897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
22927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
22933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
22947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
22957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3fv(
22977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
23047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
23053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
23067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
23077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
23097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
23107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
23147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2
23167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
231784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
231884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
231984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
23203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
23217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
23227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
232584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
232684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
232784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
232884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
232984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
233084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
23313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
23327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
23333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
23347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
23357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3fv(
23377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
23387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
234284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
234384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
23447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
23453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
23467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
234784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
234884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
234984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
23507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
23537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4fv__III_3FI
23557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
23567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
23577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
23587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
23597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
23607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
23647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
23677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
23707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
23737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
23767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
23773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
23787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
23797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4fv(
23817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
23827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
23887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
23893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
23907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
23917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
23937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
23947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
23987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2
24007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
240184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
240284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
240384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
24043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
24057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
24067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
240984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
241084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
241184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
241284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
241384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
241484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
24153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
24167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
24173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
24187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
24197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4fv(
24217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
242684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
242784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
24287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
24293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
24307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
243184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
243284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
243384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
24347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
24377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
24387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2fv__IIIZ_3FI
24397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
24407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
24417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
24427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
24437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
24447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
24487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
24517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
24547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
24577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
24607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
24613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
24627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
24637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2fv(
24657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
24697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
24717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
24737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
24743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
24757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
24767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
24787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
24797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
24837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
24847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2
24857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
248684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
248784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
248884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
24893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
24907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
24917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
249484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
249584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
249684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
249784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
249884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
249984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
25003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
25017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
25023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
25037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
25047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2fv(
25067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
251284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
251384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
25147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
25153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
25167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
251784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
251884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
251984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
25207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3fv__IIIZ_3FI
25257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
25267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
25277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
25287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
25297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
25307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
25347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
25357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
25367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
25377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
25387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
25407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
25417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
25427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
25437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
25447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
25467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
25473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
25487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
25497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3fv(
25517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
25577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
25597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
25603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
25617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
25627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
25647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
25657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2
25717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
257284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
257384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
257484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
25753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
25767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
25777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
258084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
258184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
258284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
258384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
258484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
258584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
25863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
25877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
25883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
25897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
25907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3fv(
25927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
259884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
259984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
26007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
26013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
26027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
260384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
260484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
260584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4fv__IIIZ_3FI
26117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
26127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
26137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
26147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
26157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
26167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
26207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
26237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
26267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
26297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
26327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
26333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
26347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
26357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4fv(
26377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
26397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
26407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
26417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
26427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
26437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
26457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
26463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
26477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
26487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
26507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
26517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2
26577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
265884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
265984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
266084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
26613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
26627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
26637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
266684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
266784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
266884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
266984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
267084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
267184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
26737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
26743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
26757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
26767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4fv(
26787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
26807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
26817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
26827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
26837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
268484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
268584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
26867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
26873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
26887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
268984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
269084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
269184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x3fv__IIIZ_3FI
26977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
26987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
26997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
27007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
27017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
27027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
27067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
27097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
27127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
27157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
27187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
27193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
27207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
27217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x3fv(
27237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
27247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
27297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
27317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
27323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
27337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
27347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
27367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
27377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2
27437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
274484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
274584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
274684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
27473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
27487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
27497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
275284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
275384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
275484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
275584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
275684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
275784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
27583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
27597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
27603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
27617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
27627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x3fv(
27647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
27657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
277084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
277184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
27727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
27733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
27747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
277584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
277684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
277784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
27787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x2fv__IIIZ_3FI
27837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
27847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
27857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
27867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
27877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
27887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
27927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
27957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
27987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
28017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
28047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
28053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
28067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
28077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x2fv(
28097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
28147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
28157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
28177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
28183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
28197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
28207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
28227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
28237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
28277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2
28297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
283084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
283184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
283284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
28333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
28347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
28357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
28367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
28377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
283884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
283984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
284084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
284184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
284284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
284384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
28443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
28457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
28463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
28477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
28487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x2fv(
28507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
28557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
285684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
285784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
28587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
28593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
28607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
286184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
286284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
286384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
28647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
28677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x4fv__IIIZ_3FI
28697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
28707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
28717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
28727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
28737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
28747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
28757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
28767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
28787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
28797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
28817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
28847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
28857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
28877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
28907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
28913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
28927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
28937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x4fv(
28957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
29007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
29037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
29043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
29057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
29067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
29087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
29097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
29137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2
29157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
291684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
291784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
291884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
29193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
29207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
29217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
29227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
29237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
292484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
292584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
292684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
292784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
292884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
292984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
29303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
29317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
29323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
29337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
29347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x4fv(
29367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
29377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
29387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
29397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
29407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
29417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
294284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
294384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
29447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
29453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
29467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
294784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
294884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
294984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
29507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
29537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x2fv__IIIZ_3FI
29557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
29567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
29577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
29587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
29597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
29607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
29617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
29627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
29647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
29657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
29667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
29677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
29687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
29707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
29717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
29727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
29737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
29747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
29767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
29773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
29787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
29797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x2fv(
29817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
29827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
29837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
29847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
29857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
29867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
29897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
29903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
29917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
29927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
29947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
29957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
29997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2
30017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
300284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
300384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
300484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
30053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
30067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
30077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
30097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
301084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
301184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
301284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
301384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
301484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
301584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
30163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
30177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
30183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
30197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
30207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x2fv(
30227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
30237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
30247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
30257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
30267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
30277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
302884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
302984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
30307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
30313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
30327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
303384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
303484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
303584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
30367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
30397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x4fv__IIIZ_3FI
30417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
30427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
30437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
30447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
30457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
30467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
30487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
30507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
30517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
30527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
30537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
30547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
30567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
30577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
30587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
30597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
30607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
30627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
30633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
30647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
30657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x4fv(
30677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
30687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
30697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
30707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
30717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
30727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
30737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
30757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
30763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
30777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
30787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
30807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
30817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
30857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2
30877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
308884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
308984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
309084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
30913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
30927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
30937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
30957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
309684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
309784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
309884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
309984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
310084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
310184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
31037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
31043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
31057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
31067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x4fv(
31087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
31097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
31107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
31117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
31127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
31137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
311484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
311584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
31167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
31173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
31187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
311984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
312084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
312184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
31257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x3fv__IIIZ_3FI
31277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
31287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
31297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
31307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
31317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
31327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
31337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
31347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
31367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
31377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
31387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
31397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
31407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
31427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
31437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
31447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
31457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
31467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
31487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
31493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
31507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
31517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x3fv(
31537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
31547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
31557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
31567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
31577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
31587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
31597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
31617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
31623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
31637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
31647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
31667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
31677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
31717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2
31737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
317484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
317584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
317684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
31773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
31787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
31797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
31807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
31817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
318284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
318384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
318484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
318584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
318684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
318784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
31897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
31903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
31917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
31927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x3fv(
31947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
31957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
31967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
31977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
31987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
31997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
320084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
320184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
32027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
32033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
32047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
320584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
320684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
320784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
32087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glValidateProgramPipeline ( GLuint pipeline ) */
32117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glValidateProgramPipeline__I
32137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
32147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glValidateProgramPipeline(
32157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
32167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <stdlib.h>
32207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
32227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jstring android_glGetProgramPipelineInfoLog(JNIEnv *_env, jobject, jint shader) {
32237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint infoLen = 0;
32247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
32257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!infoLen) {
32267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return _env->NewStringUTF("");
32277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    char* buf = (char*) malloc(infoLen);
32297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (buf == NULL) {
32307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/OutOfMemoryError", "out of memory");
32317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return NULL;
32327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineInfoLog(shader, infoLen, NULL, buf);
32347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jstring result = _env->NewStringUTF(buf);
32357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    free(buf);
32367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return result;
32377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindImageTexture ( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format ) */
32397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindImageTexture__IIIZIII
32417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint unit, jint texture, jint level, jboolean layered, jint layer, jint access, jint format) {
32427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindImageTexture(
32437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)unit,
32447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)texture,
32457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
32467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)layered,
32477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)layer,
32487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)access,
32497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)format
32507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetBooleani_v ( GLenum target, GLuint index, GLboolean *data ) */
32547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetBooleani_v__II_3ZI
32567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jbooleanArray data_ref, jint offset) {
32577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
32587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
32597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
32607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data_base = (GLboolean *) 0;
32617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
32627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data = (GLboolean *) 0;
32637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!data_ref) {
32657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
32667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
32677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "data == null";
32687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
32697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
32717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
32727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
32737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
32747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
32757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
32777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    data_base = (GLboolean *)
32783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetBooleanArrayElements(data_ref, (jboolean *)0);
32797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    data = data_base + offset;
32807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetBooleani_v(
32827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
32837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
32847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean *)data
32857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
32887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (data_base) {
32893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(data_ref, (jboolean*)data_base,
32907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
32917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
32937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
32947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
32957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetBooleani_v ( GLenum target, GLuint index, GLboolean *data ) */
32987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetBooleani_v__IILjava_nio_IntBuffer_2
33007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
330184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
330284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
330384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
33043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
33057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
33067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
33077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data = (GLboolean *) 0;
33087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
330984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!data_buf) {
331084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
331184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
331284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "data == null";
331384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
331484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
33153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLboolean *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
33167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (data == NULL) {
33173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
33187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        data = (GLboolean *) (_dataBase + _bufferOffset);
33197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetBooleani_v(
33217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
33227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
33237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean *)data
33247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
332584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
332684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
33277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
332884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)data, _exception ? JNI_ABORT : 0);
332984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
333084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
333184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
33327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glMemoryBarrier ( GLbitfield barriers ) */
33367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glMemoryBarrier__I
33387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint barriers) {
33397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glMemoryBarrier(
33407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)barriers
33417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glMemoryBarrierByRegion ( GLbitfield barriers ) */
33457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glMemoryBarrierByRegion__I
33477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint barriers) {
33487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glMemoryBarrierByRegion(
33497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)barriers
33507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glTexStorage2DMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations ) */
33547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glTexStorage2DMultisample__IIIIIZ
33567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height, jboolean fixedsamplelocations) {
33577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glTexStorage2DMultisample(
33587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
33597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)samples,
33607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)internalformat,
33617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)width,
33627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)height,
33637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)fixedsamplelocations
33647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
33657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
33667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetMultisamplefv ( GLenum pname, GLuint index, GLfloat *val ) */
33687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
33697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetMultisamplefv__II_3FI
33707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jint index, jfloatArray val_ref, jint offset) {
33717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
33727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
33737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
33747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val_base = (GLfloat *) 0;
33757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
33767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val = (GLfloat *) 0;
33777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!val_ref) {
33797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
33807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
33817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "val == null";
33827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
33837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
33857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
33867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
33877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
33887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
33897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
33907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(val_ref) - offset;
33917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    val_base = (GLfloat *)
33923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(val_ref, (jboolean *)0);
33937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    val = val_base + offset;
33947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetMultisamplefv(
33967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
33977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
33987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)val
33997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
34007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
34027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (val_base) {
34033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(val_ref, (jfloat*)val_base,
34047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
34057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
34077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
34087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
34107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetMultisamplefv ( GLenum pname, GLuint index, GLfloat *val ) */
34127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
34137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetMultisamplefv__IILjava_nio_FloatBuffer_2
34147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jint index, jobject val_buf) {
341584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
341684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
341784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
34183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
34197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
34207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
34217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val = (GLfloat *) 0;
34227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
342384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!val_buf) {
342484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
342584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
342684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "val == null";
342784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
342884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
34293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    val = (GLfloat *)getPointer(_env, val_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
34307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (val == NULL) {
34313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
34327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        val = (GLfloat *) (_valBase + _bufferOffset);
34337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetMultisamplefv(
34357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
34367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
34377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)val
34387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
343984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
344084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
34417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
344284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseFloatArrayElements(_array, (jfloat*)val, _exception ? JNI_ABORT : 0);
344384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
344484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
344584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
34467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
34487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glSampleMaski ( GLuint maskNumber, GLbitfield mask ) */
34507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
34517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glSampleMaski__II
34527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint maskNumber, jint mask) {
34537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glSampleMaski(
34547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)maskNumber,
34557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)mask
34567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
34577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
34587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params ) */
34607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
34617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameteriv__III_3II
34627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jintArray params_ref, jint offset) {
34637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
34647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
34657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
34667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
34677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
34687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
34697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
34717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
34727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
34737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
34747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
34757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
34777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
34787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
34797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
34807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
34817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
34837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
34843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
34857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
34867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameteriv(
34887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
34897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
34907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
34917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
34927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
34937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
34947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
34957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
34963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
34977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
34987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
34997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
35007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
35017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
35037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params ) */
35057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
35067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2
35077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
350884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
350984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
351084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
35113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
35127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
35137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
35147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
35157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
351684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
351784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
351884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
351984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
352084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
352184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
35223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
35237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
35243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
35257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
35267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameteriv(
35287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
35297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
35307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
35317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
35327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
353384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
353484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
35357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
353684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
353784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
353884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
353984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
35407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
35427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params ) */
35447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
35457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameterfv__III_3FI
35467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jfloatArray params_ref, jint offset) {
35477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
35487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
35497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
35507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params_base = (GLfloat *) 0;
35517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
35527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params = (GLfloat *) 0;
35537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
35557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
35567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
35577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
35587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
35597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
35617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
35627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
35637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
35647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
35657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
35677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLfloat *)
35683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
35697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
35707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameterfv(
35727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
35737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
35747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
35757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)params
35767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
35777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
35797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
35803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
35817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
35827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
35847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
35857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
35867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
35877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
35887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params ) */
35897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
35907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2
35917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
359284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
359384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
359484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
35953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
35967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
35977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
35987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params = (GLfloat *) 0;
35997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
360084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
360184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
360284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
360384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
360484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
360584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
36063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
36077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
36083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
36097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLfloat *) (_paramsBase + _bufferOffset);
36107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
36117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameterfv(
36127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
36137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
36147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
36157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)params
36167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
361784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
361884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
36197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
362084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
362184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
362284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
362384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
36247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
36257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindVertexBuffer ( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride ) */
36287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindVertexBuffer__IIJI
36307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint bindingindex, jint buffer, jlong offset, jint stride) {
36317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (sizeof(GLintptr) != sizeof(jlong) && (offset < LONG_MIN || offset > LONG_MAX)) {
36327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "offset too large");
36337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
36347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
36357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindVertexBuffer(
36367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex,
36377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)buffer,
36387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLintptr)offset,
36397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)stride
36407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribFormat ( GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset ) */
36437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribFormat__IIIZI
36457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint size, jint type, jboolean normalized, jint relativeoffset) {
36467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribFormat(
36477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
36487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)size,
36497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)type,
36507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)normalized,
36517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)relativeoffset
36527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribIFormat ( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset ) */
36567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribIFormat__IIII
36587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint size, jint type, jint relativeoffset) {
36597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribIFormat(
36607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
36617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)size,
36627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)type,
36637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)relativeoffset
36647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribBinding ( GLuint attribindex, GLuint bindingindex ) */
36687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribBinding__II
36707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint bindingindex) {
36717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribBinding(
36727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
36737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex
36747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexBindingDivisor ( GLuint bindingindex, GLuint divisor ) */
36787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
36797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexBindingDivisor__II
36807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint bindingindex, jint divisor) {
36817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexBindingDivisor(
36827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex,
36837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)divisor
36847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
36857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
36867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
36877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic const char *classPathName = "android/opengl/GLES31";
36887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
368976f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = {
36907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"_nativeClassInit", "()V", (void*)nativeClassInit },
36917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDispatchCompute", "(III)V", (void *) android_glDispatchCompute__III },
36927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDispatchComputeIndirect", "(J)V", (void *) android_glDispatchComputeIndirect },
36937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDrawArraysIndirect", "(IJ)V", (void *) android_glDrawArraysIndirect },
36947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDrawElementsIndirect", "(IIJ)V", (void *) android_glDrawElementsIndirect },
36957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glFramebufferParameteri", "(III)V", (void *) android_glFramebufferParameteri__III },
36967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetFramebufferParameteriv", "(II[II)V", (void *) android_glGetFramebufferParameteriv__II_3II },
36977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetFramebufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2 },
36987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramInterfaceiv", "(III[II)V", (void *) android_glGetProgramInterfaceiv__III_3II },
36997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramInterfaceiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2 },
37007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceIndex", "(IILjava/lang/String;)I", (void *) android_glGetProgramResourceIndex__IILjava_lang_String_2 },
37017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceName", "(III)Ljava/lang/String;", (void *) android_glGetProgramResourceName },
37027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceiv", "(IIII[III[II[II)V", (void *) android_glGetProgramResourceiv__IIII_3III_3II_3II },
37037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse 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 },
37047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceLocation", "(IILjava/lang/String;)I", (void *) android_glGetProgramResourceLocation__IILjava_lang_String_2 },
37057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glUseProgramStages", "(III)V", (void *) android_glUseProgramStages__III },
37067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glActiveShaderProgram", "(II)V", (void *) android_glActiveShaderProgram__II },
37077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glCreateShaderProgramv", "(I[Ljava/lang/String;)I", (void *) android_glCreateShaderProgramv },
37087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindProgramPipeline", "(I)V", (void *) android_glBindProgramPipeline__I },
37097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDeleteProgramPipelines", "(I[II)V", (void *) android_glDeleteProgramPipelines__I_3II },
37107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDeleteProgramPipelines", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2 },
37117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGenProgramPipelines", "(I[II)V", (void *) android_glGenProgramPipelines__I_3II },
37127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGenProgramPipelines", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenProgramPipelines__ILjava_nio_IntBuffer_2 },
37137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glIsProgramPipeline", "(I)Z", (void *) android_glIsProgramPipeline__I },
37147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineiv", "(II[II)V", (void *) android_glGetProgramPipelineiv__II_3II },
37157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2 },
37167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1i", "(III)V", (void *) android_glProgramUniform1i__III },
37177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2i", "(IIII)V", (void *) android_glProgramUniform2i__IIII },
37187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3i", "(IIIII)V", (void *) android_glProgramUniform3i__IIIII },
37197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4i", "(IIIIII)V", (void *) android_glProgramUniform4i__IIIIII },
37207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1ui", "(III)V", (void *) android_glProgramUniform1ui__III },
37217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2ui", "(IIII)V", (void *) android_glProgramUniform2ui__IIII },
37227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3ui", "(IIIII)V", (void *) android_glProgramUniform3ui__IIIII },
37237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4ui", "(IIIIII)V", (void *) android_glProgramUniform4ui__IIIIII },
37247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1f", "(IIF)V", (void *) android_glProgramUniform1f__IIF },
37257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2f", "(IIFF)V", (void *) android_glProgramUniform2f__IIFF },
37267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3f", "(IIFFF)V", (void *) android_glProgramUniform3f__IIFFF },
37277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4f", "(IIFFFF)V", (void *) android_glProgramUniform4f__IIFFFF },
37287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1iv", "(III[II)V", (void *) android_glProgramUniform1iv__III_3II },
37297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform1iv__IIILjava_nio_IntBuffer_2 },
37307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2iv", "(III[II)V", (void *) android_glProgramUniform2iv__III_3II },
37317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform2iv__IIILjava_nio_IntBuffer_2 },
37327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3iv", "(III[II)V", (void *) android_glProgramUniform3iv__III_3II },
37337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform3iv__IIILjava_nio_IntBuffer_2 },
37347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4iv", "(III[II)V", (void *) android_glProgramUniform4iv__III_3II },
37357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform4iv__IIILjava_nio_IntBuffer_2 },
37367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1uiv", "(III[II)V", (void *) android_glProgramUniform1uiv__III_3II },
37377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2 },
37387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2uiv", "(III[II)V", (void *) android_glProgramUniform2uiv__III_3II },
37397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2 },
37407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3uiv", "(III[II)V", (void *) android_glProgramUniform3uiv__III_3II },
37417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2 },
37427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4uiv", "(III[II)V", (void *) android_glProgramUniform4uiv__III_3II },
37437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2 },
37447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1fv", "(III[FI)V", (void *) android_glProgramUniform1fv__III_3FI },
37457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2 },
37467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2fv", "(III[FI)V", (void *) android_glProgramUniform2fv__III_3FI },
37477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2 },
37487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3fv", "(III[FI)V", (void *) android_glProgramUniform3fv__III_3FI },
37497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2 },
37507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4fv", "(III[FI)V", (void *) android_glProgramUniform4fv__III_3FI },
37517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2 },
37527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2fv__IIIZ_3FI },
37537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2 },
37547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3fv__IIIZ_3FI },
37557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2 },
37567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4fv__IIIZ_3FI },
37577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2 },
37587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2x3fv__IIIZ_3FI },
37597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2 },
37607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3x2fv__IIIZ_3FI },
37617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2 },
37627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2x4fv__IIIZ_3FI },
37637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2 },
37647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4x2fv__IIIZ_3FI },
37657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2 },
37667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3x4fv__IIIZ_3FI },
37677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2 },
37687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4x3fv__IIIZ_3FI },
37697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2 },
37707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glValidateProgramPipeline", "(I)V", (void *) android_glValidateProgramPipeline__I },
37717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineInfoLog", "(I)Ljava/lang/String;", (void *) android_glGetProgramPipelineInfoLog },
37727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindImageTexture", "(IIIZIII)V", (void *) android_glBindImageTexture__IIIZIII },
37737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetBooleani_v", "(II[ZI)V", (void *) android_glGetBooleani_v__II_3ZI },
37747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetBooleani_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetBooleani_v__IILjava_nio_IntBuffer_2 },
37757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glMemoryBarrier", "(I)V", (void *) android_glMemoryBarrier__I },
37767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glMemoryBarrierByRegion", "(I)V", (void *) android_glMemoryBarrierByRegion__I },
37777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glTexStorage2DMultisample", "(IIIIIZ)V", (void *) android_glTexStorage2DMultisample__IIIIIZ },
37787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetMultisamplefv", "(II[FI)V", (void *) android_glGetMultisamplefv__II_3FI },
37797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetMultisamplefv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetMultisamplefv__IILjava_nio_FloatBuffer_2 },
37807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glSampleMaski", "(II)V", (void *) android_glSampleMaski__II },
37817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameteriv", "(III[II)V", (void *) android_glGetTexLevelParameteriv__III_3II },
37827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameteriv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2 },
37837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameterfv", "(III[FI)V", (void *) android_glGetTexLevelParameterfv__III_3FI },
37847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameterfv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2 },
37857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindVertexBuffer", "(IIJI)V", (void *) android_glBindVertexBuffer__IIJI },
37867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribFormat", "(IIIZI)V", (void *) android_glVertexAttribFormat__IIIZI },
37877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribIFormat", "(IIII)V", (void *) android_glVertexAttribIFormat__IIII },
37887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribBinding", "(II)V", (void *) android_glVertexAttribBinding__II },
37897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexBindingDivisor", "(II)V", (void *) android_glVertexBindingDivisor__II },
37907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall};
37917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
37927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallint register_android_opengl_jni_GLES31(JNIEnv *_env)
37937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
37947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int err;
37957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
37967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return err;
37977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3798