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>
269626f8203a8c222b8960a49cdc66d540fdb688b0Jesse Hall#include <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;
2737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_ES_VERSION_2_0
2747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GLES 2.x pnames
2757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    switch (pname) {
2767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
2777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
2787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 2;
2797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
2807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_BLEND_COLOR:
2827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_CLEAR_VALUE:
2837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_WRITEMASK:
2847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SCISSOR_BOX:
2857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_VIEWPORT:
2867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 4;
2877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
2887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
2907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
2917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
2927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SHADER_BINARY_FORMATS:
2947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
2957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
2967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
2977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
2987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
2997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#ifdef GL_VERSION_ES_CM_1_1
3007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GLES 1.x pnames
3017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    switch (pname) {
3027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
3037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
3047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_DEPTH_RANGE:
3057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SMOOTH_LINE_WIDTH_RANGE:
3067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SMOOTH_POINT_SIZE_RANGE:
3077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 2;
3087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_NORMAL:
3117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_POINT_DISTANCE_ATTENUATION:
3127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 3;
3137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_CLEAR_VALUE:
3167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COLOR_WRITEMASK:
3177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_COLOR:
3187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_CURRENT_TEXTURE_COORDS:
3197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_FOG_COLOR:
3207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_LIGHT_MODEL_AMBIENT:
3217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_SCISSOR_BOX:
3227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_VIEWPORT:
3237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 4;
3247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_MODELVIEW_MATRIX:
3277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_PROJECTION_MATRIX:
3287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_TEXTURE_MATRIX:
3297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            needed = 16;
3307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
3337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
3347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            break;
3357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#endif
3377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return needed;
3387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
3427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
3437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallget
3447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
3457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
3467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType;
3477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage;
3487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params_base = (CTYPE *) 0;
3497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
3507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params = (CTYPE *) 0;
3517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int _needed = 0;
3527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
3547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
3577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
3607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
3637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _needed = getNeededCount(pname);
3677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // if we didn't find this pname, we just assume the user passed
3687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // an array of the right size -- this might happen with extensions
3697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // or if we forget an enum here.
3707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_remaining < _needed) {
3717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
3727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "length - offset < needed";
3747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
3757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
3773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env, params_ref, (jboolean *)0);
3787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
3797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GET(
3817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
3827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (CTYPE *)params
3837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
3847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
3867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
3873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
3883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, params_ref, params_base, !_exception);
3897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
3917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
3937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
3963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
3987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
3997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallgetarray
4007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
4017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
4027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType;
4037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage;
4043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    JTYPEARRAY _array = (JTYPEARRAY) 0;
4057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
4067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
4077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    CTYPE *params = (CTYPE *) 0;
4087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int _needed = 0;
4097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining /= sizeof(CTYPE);    // convert from bytes to item count
4127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _needed = getNeededCount(pname);
4137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // if we didn't find this pname, we just assume the user passed
4147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // an array of the right size -- this might happen with extensions
4157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // or if we forget an enum here.
4167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_needed>0 && _remaining < _needed) {
4177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
4187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "remaining() < needed";
4207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
4217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
4233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
4243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (jboolean *) 0);
4257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (CTYPE *) (_paramsBase + _bufferOffset);
4267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GET(
4287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
4297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (CTYPE *)params
4307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
4317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
4337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
4343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
4367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
4387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall// --------------------------------------------------------------------------
4437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDispatchCompute ( GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z ) */
4447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
4457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDispatchCompute__III
4467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint num_groups_x, jint num_groups_y, jint num_groups_z) {
4477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDispatchCompute(
4487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_x,
4497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_y,
4507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)num_groups_z
4517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
4527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDispatchComputeIndirect ( GLintptr indirect ) */
4557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDispatchComputeIndirect(JNIEnv *_env, jobject, jlong indirect) {
4567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // 'indirect' is a byte offset, not a pointer. GL checks for negative and too-large values.
4577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // Here we only need to check for successful 64-bit to 32-bit conversion.
4587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // - jlong is a int64_t (jni.h)
4597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // - GLintptr is a long (khrplatform.h)
4607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (sizeof(GLintptr) != sizeof(jlong) && (indirect < LONG_MIN || indirect > LONG_MAX)) {
4617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDispatchComputeIndirect((GLintptr)indirect);
4657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDrawArraysIndirect ( GLenum mode, const void *indirect ) */
4687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDrawArraysIndirect(JNIEnv *_env, jobject, int mode, jlong indirect) {
4697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer.
4707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GL checks for too-large values. Here we only need to check for successful signed 64-bit
4717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // to unsigned 32-bit conversion.
472bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe    if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) {
4737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDrawArraysIndirect(mode, (const void*)indirect);
4777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDrawElementsIndirect ( GLenum mode, GLenum type, const void *indirect ) */
4807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void android_glDrawElementsIndirect(JNIEnv *_env, jobject, jint mode, jint type, jlong indirect) {
4817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // In OpenGL ES, 'indirect' is a byte offset into a buffer, not a raw pointer.
4827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // GL checks for too-large values. Here we only need to check for successful signed 64-bit
4837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    // to unsigned 32-bit conversion.
484bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe    if (sizeof(void*) != sizeof(jlong) && indirect > static_cast<jlong>(UINT32_MAX)) {
4857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "indirect offset too large");
4867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
4877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
4887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDrawElementsIndirect(mode, type, (const void*)indirect);
4897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
4907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
4917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glFramebufferParameteri ( GLenum target, GLenum pname, GLint param ) */
4927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
4937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glFramebufferParameteri__III
4947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
4957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glFramebufferParameteri(
4967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
4977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
4987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)param
4997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetFramebufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
5037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetFramebufferParameteriv__II_3II
5057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
5067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
5077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
5087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
5097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
5107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
5147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
5177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
5207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
5237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
5273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
5297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetFramebufferParameteriv(
5317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
5347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
5377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
5383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
5407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
5427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetFramebufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
5477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2
5497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
5503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
5527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
5573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetFramebufferParameteriv(
5617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
5627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
5637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
5647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
5657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
5663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
5677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
5697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramInterfaceiv ( GLuint program, GLenum programInterface, GLenum pname, GLint *params ) */
5717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
5727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramInterfaceiv__III_3II
5737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jintArray params_ref, jint offset) {
5747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
5757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
5767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
5777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
5787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
5797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
5807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
5827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
5857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
5887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
5897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
5917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
5927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
5937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
5953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
5977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
5987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramInterfaceiv(
5997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
6027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
6037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
6047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
6067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
6073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
6087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
6097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
6117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
6127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramInterfaceiv ( GLuint program, GLenum programInterface, GLenum pname, GLint *params ) */
6167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
6177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2
6187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jobject params_buf) {
6193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
6207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
6217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
6227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
6237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
6257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
6263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
6277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
6287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramInterfaceiv(
6307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
6337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
6347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
6357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
6363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
6377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLuint glGetProgramResourceIndex ( GLuint program, GLenum programInterface, const GLchar *name ) */
6417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
6427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceIndex__IILjava_lang_String_2
6437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jstring name) {
6447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
6457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
6467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
6477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint _returnValue = 0;
6487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char* _nativename = 0;
6497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!name) {
6517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
6527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "name == null";
6547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
6557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
6577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glGetProgramResourceIndex(
6597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
6607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
6617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLchar *)_nativename
6627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
6637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
6657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_nativename) {
6667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
6677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
6707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
6717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
6727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jint)_returnValue;
6737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceName ( GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name ) */
6767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jstring
6777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceName
6787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index) {
6797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
6807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return NULL;
6817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
6827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
6837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceiv ( GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params ) */
6847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
6857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceiv__IIII_3III_3II_3II
6867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse 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) {
6877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
6887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
6897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
6907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props_base = (GLenum *) 0;
6917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsRemaining;
6927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props = (GLenum *) 0;
6937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length_base = (GLsizei *) 0;
6947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthRemaining;
6957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length = (GLsizei *) 0;
6967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
6977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsRemaining;
6987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
6997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!props_ref) {
7017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "props == null";
7047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (propsOffset < 0) {
7077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "propsOffset < 0";
7107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _propsRemaining = _env->GetArrayLength(props_ref) - propsOffset;
7137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    props_base = (GLenum *)
7143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(props_ref, (jboolean *)0);
7157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    props = props_base + propsOffset;
7167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7176aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
7186aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
7196aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
7206aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
7216aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
7226aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
7236aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
7246aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
7256aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
7266aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
7276aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
7287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
7317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
7347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (paramsOffset < 0) {
7377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
7387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "paramsOffset < 0";
7407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
7417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
7437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
7443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
7457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + paramsOffset;
7467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramResourceiv(
7487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
7497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
7507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
7517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)propCount,
7527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum *)props,
7537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)bufSize,
7547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei *)length,
7557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
7567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
7577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
7597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
7603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
7617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
7627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (length_base) {
7643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
7657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
7667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (props_base) {
7683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(props_ref, (jint*)props_base,
7697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
7707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
7727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
7737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
7747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
7757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramResourceiv ( GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params ) */
7777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
7787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceiv__IIIILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
7797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index, jint propCount, jobject props_buf, jint bufSize, jobject length_buf, jobject params_buf) {
7803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _propsArray = (jintArray) 0;
7817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsBufferOffset = (jint) 0;
7823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
7837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthBufferOffset = (jint) 0;
7843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _paramsArray = (jintArray) 0;
7857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsBufferOffset = (jint) 0;
7867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _propsRemaining;
7877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLenum *props = (GLenum *) 0;
7887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _lengthRemaining;
7897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLsizei *length = (GLsizei *) 0;
7907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _paramsRemaining;
7917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
7927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
7933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    props = (GLenum *)getPointer(_env, props_buf, (jarray*)&_propsArray, &_propsRemaining, &_propsBufferOffset);
7946aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
7956aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
7966aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
7973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
7987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (props == NULL) {
7993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _propsBase = (char *)_env->GetIntArrayElements(_propsArray, (jboolean *) 0);
8007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        props = (GLenum *) (_propsBase + _propsBufferOffset);
8017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8026aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
8033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
8047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
8057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
8073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
8087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _paramsBufferOffset);
8097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramResourceiv(
8117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
8127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
8137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
8147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)propCount,
8157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum *)props,
8167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)bufSize,
8177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei *)length,
8187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
8197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
8207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_paramsArray) {
8213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, 0);
8227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_lengthArray) {
8243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
8257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_propsArray) {
8273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_propsArray, (jint*)props, JNI_ABORT);
8287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLint glGetProgramResourceLocation ( GLuint program, GLenum programInterface, const GLchar *name ) */
8327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
8337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramResourceLocation__IILjava_lang_String_2
8347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint programInterface, jstring name) {
8357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
8367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
8377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
8387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint _returnValue = 0;
8397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char* _nativename = 0;
8407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!name) {
8427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
8437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
8447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "name == null";
8457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
8467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
8487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glGetProgramResourceLocation(
8507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
8517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)programInterface,
8527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLchar *)_nativename
8537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
8547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
8567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_nativename) {
8577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
8587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
8617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
8627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
8637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jint)_returnValue;
8647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glUseProgramStages ( GLuint pipeline, GLbitfield stages, GLuint program ) */
8677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
8687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glUseProgramStages__III
8697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint stages, jint program) {
8707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glUseProgramStages(
8717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
8727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)stages,
8737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program
8747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
8757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glActiveShaderProgram ( GLuint pipeline, GLuint program ) */
8787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
8797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glActiveShaderProgram__II
8807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint program) {
8817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glActiveShaderProgram(
8827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
8837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program
8847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
8857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
8867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLuint glCreateShaderProgramv ( GLenum type, GLsizei count, const GLchar *const *strings ) */
8887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jint
8897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glCreateShaderProgramv
8907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint type, jobjectArray strings) {
8917f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    jint _exception = 0;
8927f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const char * _exceptionType = NULL;
8937f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const char * _exceptionMessage = NULL;
8947f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    GLsizei _count;
8957f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    const GLchar** _strings = NULL;
8967f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    jstring* _jstrings = NULL;
8977f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    GLuint _returnValue = 0;
8987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
8997f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!strings) {
9007f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9017f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
9027f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "strings == null";
9037f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9047f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9057f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9067f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _count = _env->GetArrayLength(strings);
9077f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9087f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _strings = (const GLchar**) calloc(_count, sizeof(const GLchar*));
9097f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!_strings) {
9107f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9117f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/OutOfMemoryError";
9127f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "out of memory";
9137f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9147f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9157f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9167f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _jstrings = (jstring*) calloc(_count, sizeof(jstring));
9177f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (!_jstrings) {
9187f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exception = 1;
9197f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionType = "java/lang/OutOfMemoryError";
9207f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _exceptionMessage = "out of memory";
9217f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        goto exit;
9227f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9237f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9247f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    for(int i = 0; i < _count; i++) {
9257f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _jstrings[i] = (jstring) _env->GetObjectArrayElement(strings, i);
9267f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        if (!_jstrings[i]) {
9277f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exception = 1;
9287f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
9297f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            _exceptionMessage = "strings == null";
9307f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            goto exit;
9317f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        }
9327f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        _strings[i] = _env->GetStringUTFChars(_jstrings[i], 0);
9337f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9347f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos
9357f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    _returnValue = glCreateShaderProgramv((GLenum)type, _count, _strings);
9367f16ec21711fdb97930166175c29d8235f75202ePablo Ceballosexit:
9377f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_strings && _jstrings) {
9387f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        for(int i = 0; i < _count; i++) {
9397f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            if (_strings[i] && _jstrings[i]) {
9407f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos                _env->ReleaseStringUTFChars(_jstrings[i], _strings[i]);
9417f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos            }
9427f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        }
9437f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9447f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_strings) {
9457f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        free(_strings);
9467f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9477f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_jstrings) {
9487f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        free(_jstrings);
9497f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9507f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    if (_exception) {
9517f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
9527f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    }
9537f16ec21711fdb97930166175c29d8235f75202ePablo Ceballos    return (jint)_returnValue;
9547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindProgramPipeline ( GLuint pipeline ) */
9567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
9577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindProgramPipeline__I
9587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
9597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindProgramPipeline(
9607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
9617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
9637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDeleteProgramPipelines ( GLsizei n, const GLuint *pipelines ) */
9657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
9667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDeleteProgramPipelines__I_3II
9677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray pipelines_ref, jint offset) {
9687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
9697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
9707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
9717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines_base = (GLuint *) 0;
9727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
9737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
9747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!pipelines_ref) {
9767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
9777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
9787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "pipelines == null";
9797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
9807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
9827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
9837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
9847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
9857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
9867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
9877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(pipelines_ref) - offset;
9887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines_base = (GLuint *)
9893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
9907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines = pipelines_base + offset;
9917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDeleteProgramPipelines(
9937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
9947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
9957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
9967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
9977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
9987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines_base) {
9993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
10007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
10017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
10037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
10047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glDeleteProgramPipelines ( GLsizei n, const GLuint *pipelines ) */
10087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2
10107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
10113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
10127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
10137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
10177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines == NULL) {
10183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
10197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
10207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glDeleteProgramPipelines(
10227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
10263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)pipelines, JNI_ABORT);
10277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGenProgramPipelines ( GLsizei n, GLuint *pipelines ) */
10317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGenProgramPipelines__I_3II
10337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray pipelines_ref, jint offset) {
10347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
10357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
10367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
10377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines_base = (GLuint *) 0;
10387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!pipelines_ref) {
10427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
10437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
10447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "pipelines == null";
10457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
10467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
10487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
10497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
10507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
10517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
10527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(pipelines_ref) - offset;
10547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines_base = (GLuint *)
10553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
10567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    pipelines = pipelines_base + offset;
10577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGenProgramPipelines(
10597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
10647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines_base) {
10653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
10667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
10677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
10697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
10707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGenProgramPipelines ( GLsizei n, GLuint *pipelines ) */
10747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
10757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGenProgramPipelines__ILjava_nio_IntBuffer_2
10767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
10773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
10787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
10797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
10807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *pipelines = (GLuint *) 0;
10817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
10837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (pipelines == NULL) {
10843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
10857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
10867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGenProgramPipelines(
10887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)n,
10897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)pipelines
10907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
10917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
10923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)pipelines, 0);
10937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
10947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
10957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
10967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* GLboolean glIsProgramPipeline ( GLuint pipeline ) */
10977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jboolean
10987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glIsProgramPipeline__I
10997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
11007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean _returnValue;
11017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _returnValue = glIsProgramPipeline(
11027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
11037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return (jboolean)_returnValue;
11057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineiv ( GLuint pipeline, GLenum pname, GLint *params ) */
11087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramPipelineiv__II_3II
11107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint pname, jintArray params_ref, jint offset) {
11117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
11127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
11137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
11147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
11157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
11167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
11177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
11197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
11207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
11217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
11227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
11237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
11257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
11267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
11277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
11287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
11297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
11317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
11323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
11337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
11347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(
11367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
11377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
11387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
11397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
11427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
11433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
11447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
11457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
11477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
11487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineiv ( GLuint pipeline, GLenum pname, GLint *params ) */
11527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2
11547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline, jint pname, jobject params_buf) {
11553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
11567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
11577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
11587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
11597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
11617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
11623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
11637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
11647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(
11667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline,
11677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
11687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
11697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
11713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
11727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
11737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1i ( GLuint program, GLint location, GLint v0 ) */
11767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1i__III
11787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0) {
11797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1i(
11807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
11817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
11827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0
11837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2i ( GLuint program, GLint location, GLint v0, GLint v1 ) */
11877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
11887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2i__IIII
11897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1) {
11907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2i(
11917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
11927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
11937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
11947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1
11957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
11967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
11977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
11987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3i ( GLuint program, GLint location, GLint v0, GLint v1, GLint v2 ) */
11997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3i__IIIII
12017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2) {
12027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3i(
12037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
12067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1,
12077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v2
12087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4i ( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3 ) */
12127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4i__IIIIII
12147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2, jint v3) {
12157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4i(
12167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v0,
12197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v1,
12207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v2,
12217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)v3
12227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1ui ( GLuint program, GLint location, GLuint v0 ) */
12267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1ui__III
12287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0) {
12297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1ui(
12307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0
12337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2ui ( GLuint program, GLint location, GLuint v0, GLuint v1 ) */
12377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2ui__IIII
12397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1) {
12407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2ui(
12417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
12447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1
12457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3ui ( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
12497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3ui__IIIII
12517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2) {
12527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3ui(
12537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
12567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1,
12577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v2
12587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4ui ( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
12627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4ui__IIIIII
12647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint v0, jint v1, jint v2, jint v3) {
12657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4ui(
12667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v0,
12697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v1,
12707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v2,
12717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)v3
12727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1f ( GLuint program, GLint location, GLfloat v0 ) */
12767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1f__IIF
12787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0) {
12797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1f(
12807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0
12837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2f ( GLuint program, GLint location, GLfloat v0, GLfloat v1 ) */
12877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
12887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2f__IIFF
12897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1) {
12907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2f(
12917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
12927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
12937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
12947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1
12957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
12967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
12977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
12987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3f ( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2 ) */
12997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3f__IIFFF
13017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1, jfloat v2) {
13027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3f(
13037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
13067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1,
13077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v2
13087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4f ( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3 ) */
13127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4f__IIFFFF
13147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jfloat v0, jfloat v1, jfloat v2, jfloat v3) {
13157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4f(
13167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v0,
13197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v1,
13207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v2,
13217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat)v3
13227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
13267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1iv__III_3II
13287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
13297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
13307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
13317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
13327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
13337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
13347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
13357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
13377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
13387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
13397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
13407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
13417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
13427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
13437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
13447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
13457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
13467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
13477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
13487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
13497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
13503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
13517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
13527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1iv(
13547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
13577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
13587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
13617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
13623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
13637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
13647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
13657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
13667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
13677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
13687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
13717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1iv__IIILjava_nio_IntBuffer_2
13737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
13743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
13757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
13767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
13777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
13787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
13807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
13813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
13827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
13837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
13847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1iv(
13857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
13867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
13877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
13887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
13897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
13907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
13913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
13927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
13937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
13947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
13957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
13967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
13977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2iv__III_3II
13987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
13997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
14007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
14017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
14027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
14037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
14077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
14107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
14137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
14167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
14197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
14203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
14217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
14227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2iv(
14247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
14277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
14287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
14317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
14323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
14337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
14347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
14367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
14377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
14417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2iv__IIILjava_nio_IntBuffer_2
14437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
14443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
14457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
14467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
14507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
14513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
14527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
14537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2iv(
14557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
14587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
14597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
14613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
14627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
14647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
14667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
14677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3iv__III_3II
14687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
14697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
14707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
14717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
14727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
14737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
14747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
14757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
14777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
14807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
14837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
14847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
14857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
14867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
14877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
14887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
14897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
14903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
14917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
14927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
14937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3iv(
14947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
14957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
14967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
14977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
14987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
14997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
15017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
15023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
15037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
15047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
15067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
15077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3iv__IIILjava_nio_IntBuffer_2
15137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
15143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
15157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
15167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
15207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
15213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
15227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
15237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3iv(
15257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
15307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
15313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
15327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4iv__III_3II
15387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
15397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
15407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
15417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
15427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value_base = (GLint *) 0;
15437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
15477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
15487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
15497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
15507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
15517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
15537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
15547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
15557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
15567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
15577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
15597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLint *)
15603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
15617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
15627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4iv(
15647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
15697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
15717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
15723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
15737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
15747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
15767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
15777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
15797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4iv ( GLuint program, GLint location, GLsizei count, const GLint *value ) */
15817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
15827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4iv__IIILjava_nio_IntBuffer_2
15837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
15843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
15857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
15867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
15877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *value = (GLint *) 0;
15887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
15893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
15907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
15913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
15927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
15937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
15947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4iv(
15957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
15967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
15977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
15987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)value
15997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
16007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
16013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
16027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
16067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1uiv__III_3II
16087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
16097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
16107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
16117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
16127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
16137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
16157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
16177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
16207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
16237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
16267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
16297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
16303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
16317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
16327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1uiv(
16347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
16357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
16367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
16377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
16387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
16397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
16417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
16423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
16437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
16447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
16467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
16477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
16517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2
16537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
16543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
16557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
16567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
16587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)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 = (GLuint *) (_valueBase + _bufferOffset);
16637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1uiv(
16657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
16667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
16677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
16687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
16697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
16707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
16713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
16727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
16747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
16767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
16777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2uiv__III_3II
16787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
16797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
16807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
16817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
16827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
16837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
16847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
16857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
16867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
16877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
16907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
16937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
16947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
16957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
16967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
16977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
16987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
16997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
17003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
17017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
17027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2uiv(
17047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
17087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
17117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
17123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
17137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
17147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
17167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
17177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
17217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2
17237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
17243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
17257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
17267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
17287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
17307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
17313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
17327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
17337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2uiv(
17357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
17397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
17413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
17427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
17467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3uiv__III_3II
17487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
17497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
17507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
17517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
17527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
17537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
17557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
17577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
17587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
17607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
17637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
17647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
17657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
17667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
17677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
17697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
17703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
17717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
17727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3uiv(
17747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
17757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
17767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
17777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
17787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
17797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
17817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
17823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
17837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
17847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
17867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
17877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
17887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
17897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
17917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
17927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2
17937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
17943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
17957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
17967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
17977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
17987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
17993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
18007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
18013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
18027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
18037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3uiv(
18057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
18107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
18113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
18127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4uiv__III_3II
18187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jintArray value_ref, jint offset) {
18197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
18207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
18217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
18227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value_base = (GLuint *) 0;
18237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
18257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
18277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
18307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
18317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
18337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
18367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
18377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
18397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLuint *)
18403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
18417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
18427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4uiv(
18447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
18497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
18517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
18523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
18537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
18547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
18567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
18577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4uiv ( GLuint program, GLint location, GLsizei count, const GLuint *value ) */
18617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2
18637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
18643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
18657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
18667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLuint *value = (GLuint *) 0;
18687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
18707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
18713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
18727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
18737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4uiv(
18757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
18767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
18777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
18787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint *)value
18797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
18807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
18813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
18827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
18837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
18847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
18867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
18877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1fv__III_3FI
18887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
18897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
18907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
18917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
18927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
18937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
18947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
18957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
18967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
18977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
18987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
18997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
19007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
19037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
19067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
19097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
19103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
19117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
19127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1fv(
19147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
19187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
19197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
19217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
19223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
19237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
19247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
19267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
19277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform1fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
19317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
19327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2
19337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
19343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
19357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
19367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
19387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
19407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
19413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
19427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
19437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform1fv(
19457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
19497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
19507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
19513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
19527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
19567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
19577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2fv__III_3FI
19587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
19597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
19607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
19617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
19627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
19637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
19647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
19657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
19677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
19707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
19737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
19747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
19757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
19767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
19777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
19797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
19803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
19817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
19827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2fv(
19847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
19857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
19867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
19877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
19887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
19897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
19907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
19917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
19923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
19937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
19947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
19967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
19977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
19987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
19997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform2fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
20017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2
20037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
20043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
20057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
20067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
20087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
20107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
20113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
20127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
20137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform2fv(
20157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
20197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
20207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
20213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
20227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
20267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3fv__III_3FI
20287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
20297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
20307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
20317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
20327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
20337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
20357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
20377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
20387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
20407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
20417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
20437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
20447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
20467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
20477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
20497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
20503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
20517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
20527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3fv(
20547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
20587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
20597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
20617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
20623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
20637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
20647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
20667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
20677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform3fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
20717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2
20737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
20743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
20757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
20767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
20777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
20787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
20807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
20813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
20827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
20837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform3fv(
20857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
20867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
20877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
20887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
20897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
20907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
20913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
20927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
20937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
20947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
20957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
20967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
20977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4fv__III_3FI
20987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jfloatArray value_ref, jint offset) {
20997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
21007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
21017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
21027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
21037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
21077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
21107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
21137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
21167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
21197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
21203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
21217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
21227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4fv(
21247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
21297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
21317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
21323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
21337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
21347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
21367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
21377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
21397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniform4fv ( GLuint program, GLint location, GLsizei count, const GLfloat *value ) */
21417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2
21437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
21443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
21457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
21467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
21507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
21513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
21527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
21537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniform4fv(
21557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
21607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
21613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
21627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
21647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
21667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
21677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2fv__IIIZ_3FI
21687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
21697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
21707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
21717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
21727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
21737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
21747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
21757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
21777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
21807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
21837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
21847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
21857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
21867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
21877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
21887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
21897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
21903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
21917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
21927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
21937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2fv(
21947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
21957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
21967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
21977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
21987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
21997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
22007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
22027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
22033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
22047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
22057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
22077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
22087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
22127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2
22147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
22153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
22167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
22177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
22217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
22223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
22237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
22247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2fv(
22267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
22307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
22317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
22327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
22333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
22347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
22387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3fv__IIIZ_3FI
22407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
22417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
22427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
22437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
22447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
22457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
22497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
22527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
22557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
22567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
22587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
22597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
22617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
22623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
22637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
22647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3fv(
22667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
22687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
22697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
22707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
22717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
22727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
22747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
22753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
22767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
22777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
22797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
22807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
22827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
22847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
22857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2
22867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
22873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
22887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
22897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
22907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
22917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
22923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
22937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
22943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
22957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
22967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
22977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3fv(
22987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
22997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
23027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
23053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
23067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
23107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4fv__IIIZ_3FI
23127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
23137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
23147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
23157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
23167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
23177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
23217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
23247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
23277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
23307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
23337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
23343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
23357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
23367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4fv(
23387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
23397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
23427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
23467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
23473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
23487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
23497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
23517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
23527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
23567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2
23587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
23593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
23607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
23617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
23657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
23663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
23677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
23687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4fv(
23707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
23717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
23727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
23737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
23747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
23757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
23767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
23773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
23787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
23807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
23827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
23837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x3fv__IIIZ_3FI
23847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
23857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
23867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
23877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
23887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
23897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
23907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
23917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
23927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
23937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
23947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
23957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
23967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
23977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
23987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
23997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
24027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
24057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
24063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
24077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
24087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x3fv(
24107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
24147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
24167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
24187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
24193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
24207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
24217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
24237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
24247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
24287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
24297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2
24307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
24313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
24327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
24337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
24377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
24383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
24397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
24407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x3fv(
24427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
24467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
24487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
24493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
24507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
24547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
24557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x2fv__IIIZ_3FI
24567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
24577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
24587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
24597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
24607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
24617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
24627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
24637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
24657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
24687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
24717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
24727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
24737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
24747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
24757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
24777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
24783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
24797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
24807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x2fv(
24827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
24837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
24847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
24857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
24867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
24877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
24887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
24907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
24913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
24927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
24937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
24957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
24967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
24977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
24987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
24997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2
25027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
25033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
25047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
25057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
25097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
25103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
25117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
25127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x2fv(
25147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
25207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
25213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
25227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x4fv__IIIZ_3FI
25287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
25297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
25307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
25317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
25327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
25337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
25377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
25387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
25397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
25407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
25417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
25437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
25447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
25457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
25467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
25477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
25497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
25503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
25517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
25527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x4fv(
25547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
25607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
25627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
25633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
25647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
25657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
25677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
25687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix2x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2
25747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
25753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
25767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
25777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
25787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
25797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
25817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
25823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
25837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
25847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix2x4fv(
25867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
25877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
25887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
25897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
25907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
25917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
25927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
25933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
25947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
25957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
25967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
25977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
25987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
25997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x2fv__IIIZ_3FI
26007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
26017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
26027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
26037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
26047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
26057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
26097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
26127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
26157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
26187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
26217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
26223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
26237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
26247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x2fv(
26267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
26287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
26297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
26307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
26317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
26327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
26347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
26353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
26367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
26377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
26397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
26407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x2fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2
26467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
26473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
26487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
26497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
26537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
26543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
26557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
26567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x2fv(
26587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
26607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
26617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
26627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
26637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
26647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
26653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
26667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
26687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
26707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
26717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x4fv__IIIZ_3FI
26727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
26737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
26747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
26757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
26767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
26777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
26787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
26797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
26817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
26847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
26877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
26887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
26897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
26907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
26917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
26927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
26937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
26943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
26957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
26967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
26977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x4fv(
26987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
26997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
27047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
27067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
27073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
27087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
27097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
27117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
27127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix3x4fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2
27187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
27193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
27207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
27217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
27257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
27263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
27277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
27287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix3x4fv(
27307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
27317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
27367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
27373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
27387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x3fv__IIIZ_3FI
27447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
27457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
27467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
27477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
27487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value_base = (GLfloat *) 0;
27497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!value_ref) {
27537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "value == null";
27567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
27597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
27607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
27617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
27627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
27637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
27657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value_base = (GLfloat *)
27663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
27677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    value = value_base + offset;
27687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x3fv(
27707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
27717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
27727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
27737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
27747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
27757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
27767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
27787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value_base) {
27793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
27807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            JNI_ABORT);
27817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
27837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
27847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
27857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
27867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glProgramUniformMatrix4x3fv ( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
27887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
27897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2
27907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
27913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
27927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
27937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
27947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *value = (GLfloat *) 0;
27957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
27963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
27977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (value == NULL) {
27983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
27997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
28007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glProgramUniformMatrix4x3fv(
28027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)program,
28037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)location,
28047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)count,
28057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)transpose,
28067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)value
28077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
28087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
28093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
28107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glValidateProgramPipeline ( GLuint pipeline ) */
28147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glValidateProgramPipeline__I
28167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pipeline) {
28177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glValidateProgramPipeline(
28187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)pipeline
28197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
28207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall#include <stdlib.h>
28237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetProgramPipelineInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
28257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic jstring android_glGetProgramPipelineInfoLog(JNIEnv *_env, jobject, jint shader) {
28267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint infoLen = 0;
28277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
28287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!infoLen) {
28297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return _env->NewStringUTF("");
28307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    char* buf = (char*) malloc(infoLen);
28327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (buf == NULL) {
28337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/OutOfMemoryError", "out of memory");
28347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return NULL;
28357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetProgramPipelineInfoLog(shader, infoLen, NULL, buf);
28377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jstring result = _env->NewStringUTF(buf);
28387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    free(buf);
28397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return result;
28407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindImageTexture ( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format ) */
28427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindImageTexture__IIIZIII
28447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint unit, jint texture, jint level, jboolean layered, jint layer, jint access, jint format) {
28457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindImageTexture(
28467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)unit,
28477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)texture,
28487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
28497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)layered,
28507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)layer,
28517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)access,
28527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)format
28537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
28547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetBooleani_v ( GLenum target, GLuint index, GLboolean *data ) */
28577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
28587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetBooleani_v__II_3ZI
28597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jbooleanArray data_ref, jint offset) {
28607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
28617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
28627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
28637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data_base = (GLboolean *) 0;
28647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
28657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data = (GLboolean *) 0;
28667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!data_ref) {
28687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
28697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "data == null";
28717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
28747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
28757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
28767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
28777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
28787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
28807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    data_base = (GLboolean *)
28813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetBooleanArrayElements(data_ref, (jboolean *)0);
28827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    data = data_base + offset;
28837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetBooleani_v(
28857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
28867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
28877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean *)data
28887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
28897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
28907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
28917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (data_base) {
28923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(data_ref, (jboolean*)data_base,
28937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
28947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
28967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
28977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
28987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
28997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetBooleani_v ( GLenum target, GLuint index, GLboolean *data ) */
29017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetBooleani_v__IILjava_nio_IntBuffer_2
29037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
29043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
29057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
29067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
29077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLboolean *data = (GLboolean *) 0;
29087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLboolean *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
29107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (data == NULL) {
29113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
29127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        data = (GLboolean *) (_dataBase + _bufferOffset);
29137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetBooleani_v(
29157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
29167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
29177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean *)data
29187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
29203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)data, 0);
29217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glMemoryBarrier ( GLbitfield barriers ) */
29257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glMemoryBarrier__I
29277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint barriers) {
29287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glMemoryBarrier(
29297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)barriers
29307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glMemoryBarrierByRegion ( GLbitfield barriers ) */
29347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glMemoryBarrierByRegion__I
29367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint barriers) {
29377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glMemoryBarrierByRegion(
29387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)barriers
29397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glTexStorage2DMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations ) */
29437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glTexStorage2DMultisample__IIIIIZ
29457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height, jboolean fixedsamplelocations) {
29467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glTexStorage2DMultisample(
29477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
29487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)samples,
29497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)internalformat,
29507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)width,
29517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)height,
29527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)fixedsamplelocations
29537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetMultisamplefv ( GLenum pname, GLuint index, GLfloat *val ) */
29577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
29587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetMultisamplefv__II_3FI
29597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jint index, jfloatArray val_ref, jint offset) {
29607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
29617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
29627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
29637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val_base = (GLfloat *) 0;
29647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
29657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val = (GLfloat *) 0;
29667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!val_ref) {
29687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
29697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
29707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "val == null";
29717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
29727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
29747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
29757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
29767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
29777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
29787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(val_ref) - offset;
29807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    val_base = (GLfloat *)
29813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(val_ref, (jboolean *)0);
29827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    val = val_base + offset;
29837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetMultisamplefv(
29857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
29867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
29877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)val
29887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
29897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
29907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
29917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (val_base) {
29923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(val_ref, (jfloat*)val_base,
29937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
29947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
29967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
29977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
29987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
29997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetMultisamplefv ( GLenum pname, GLuint index, GLfloat *val ) */
30017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetMultisamplefv__IILjava_nio_FloatBuffer_2
30037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jint index, jobject val_buf) {
30043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
30057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
30067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *val = (GLfloat *) 0;
30087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    val = (GLfloat *)getPointer(_env, val_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
30107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (val == NULL) {
30113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
30127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        val = (GLfloat *) (_valBase + _bufferOffset);
30137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetMultisamplefv(
30157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
30167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)index,
30177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)val
30187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
30197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
30203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)val, 0);
30217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glSampleMaski ( GLuint maskNumber, GLbitfield mask ) */
30257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glSampleMaski__II
30277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint maskNumber, jint mask) {
30287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glSampleMaski(
30297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)maskNumber,
30307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLbitfield)mask
30317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
30327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params ) */
30357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameteriv__III_3II
30377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jintArray params_ref, jint offset) {
30387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
30397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
30407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
30417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params_base = (GLint *) 0;
30427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
30447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
30467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
30477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
30487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
30497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
30507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
30527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
30537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
30547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
30557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
30567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
30587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLint *)
30593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
30607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
30617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameteriv(
30637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
30647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
30657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
30667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
30677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
30687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
30707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
30713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
30727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
30737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
30757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
30767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
30787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameteriv ( GLenum target, GLint level, GLenum pname, GLint *params ) */
30807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
30817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2
30827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
30833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
30847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
30857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
30867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLint *params = (GLint *) 0;
30877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
30883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
30897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
30903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
30917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
30927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
30937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameteriv(
30947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
30957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
30967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
30977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint *)params
30987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
30997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
31003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
31017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params ) */
31057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameterfv__III_3FI
31077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jfloatArray params_ref, jint offset) {
31087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _exception = 0;
31097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionType = NULL;
31107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    const char * _exceptionMessage = NULL;
31117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params_base = (GLfloat *) 0;
31127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
31137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params = (GLfloat *) 0;
31147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (!params_ref) {
31167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
31177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
31187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "params == null";
31197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
31207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (offset < 0) {
31227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exception = 1;
31237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
31247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        _exceptionMessage = "offset < 0";
31257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        goto exit;
31267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
31287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params_base = (GLfloat *)
31293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
31307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    params = params_base + offset;
31317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameterfv(
31337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
31347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
31357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
31367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)params
31377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
31387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallexit:
31407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params_base) {
31413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
31427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall            _exception ? JNI_ABORT: 0);
31437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_exception) {
31457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
31467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glGetTexLevelParameterfv ( GLenum target, GLint level, GLenum pname, GLfloat *params ) */
31507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2
31527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
31533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
31547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _bufferOffset = (jint) 0;
31557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    jint _remaining;
31567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    GLfloat *params = (GLfloat *) 0;
31577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
31597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (params == NULL) {
31603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
31617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        params = (GLfloat *) (_paramsBase + _bufferOffset);
31627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glGetTexLevelParameterfv(
31647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)target,
31657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)level,
31667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)pname,
31677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLfloat *)params
31687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
31697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (_array) {
31703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
31717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
31747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glBindVertexBuffer ( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride ) */
31757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glBindVertexBuffer__IIJI
31777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint bindingindex, jint buffer, jlong offset, jint stride) {
31787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    if (sizeof(GLintptr) != sizeof(jlong) && (offset < LONG_MIN || offset > LONG_MAX)) {
31797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "offset too large");
31807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        return;
31817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    }
31827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glBindVertexBuffer(
31837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex,
31847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)buffer,
31857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLintptr)offset,
31867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLsizei)stride
31877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
31887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
31897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribFormat ( GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset ) */
31907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
31917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribFormat__IIIZI
31927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint size, jint type, jboolean normalized, jint relativeoffset) {
31937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribFormat(
31947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
31957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)size,
31967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)type,
31977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLboolean)normalized,
31987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)relativeoffset
31997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribIFormat ( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset ) */
32037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribIFormat__IIII
32057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint size, jint type, jint relativeoffset) {
32067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribIFormat(
32077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
32087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLint)size,
32097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLenum)type,
32107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)relativeoffset
32117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexAttribBinding ( GLuint attribindex, GLuint bindingindex ) */
32157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexAttribBinding__II
32177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint attribindex, jint bindingindex) {
32187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexAttribBinding(
32197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)attribindex,
32207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex
32217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall/* void glVertexBindingDivisor ( GLuint bindingindex, GLuint divisor ) */
32257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic void
32267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallandroid_glVertexBindingDivisor__II
32277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall  (JNIEnv *_env, jobject _this, jint bindingindex, jint divisor) {
32287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    glVertexBindingDivisor(
32297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)bindingindex,
32307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall        (GLuint)divisor
32317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    );
32327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
32337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
32347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallstatic const char *classPathName = "android/opengl/GLES31";
32357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
323676f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = {
32377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"_nativeClassInit", "()V", (void*)nativeClassInit },
32387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDispatchCompute", "(III)V", (void *) android_glDispatchCompute__III },
32397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDispatchComputeIndirect", "(J)V", (void *) android_glDispatchComputeIndirect },
32407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDrawArraysIndirect", "(IJ)V", (void *) android_glDrawArraysIndirect },
32417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDrawElementsIndirect", "(IIJ)V", (void *) android_glDrawElementsIndirect },
32427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glFramebufferParameteri", "(III)V", (void *) android_glFramebufferParameteri__III },
32437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetFramebufferParameteriv", "(II[II)V", (void *) android_glGetFramebufferParameteriv__II_3II },
32447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetFramebufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2 },
32457ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramInterfaceiv", "(III[II)V", (void *) android_glGetProgramInterfaceiv__III_3II },
32467ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramInterfaceiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2 },
32477ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceIndex", "(IILjava/lang/String;)I", (void *) android_glGetProgramResourceIndex__IILjava_lang_String_2 },
32487ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceName", "(III)Ljava/lang/String;", (void *) android_glGetProgramResourceName },
32497ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceiv", "(IIII[III[II[II)V", (void *) android_glGetProgramResourceiv__IIII_3III_3II_3II },
32507ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse 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 },
32517ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramResourceLocation", "(IILjava/lang/String;)I", (void *) android_glGetProgramResourceLocation__IILjava_lang_String_2 },
32527ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glUseProgramStages", "(III)V", (void *) android_glUseProgramStages__III },
32537ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glActiveShaderProgram", "(II)V", (void *) android_glActiveShaderProgram__II },
32547ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glCreateShaderProgramv", "(I[Ljava/lang/String;)I", (void *) android_glCreateShaderProgramv },
32557ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindProgramPipeline", "(I)V", (void *) android_glBindProgramPipeline__I },
32567ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDeleteProgramPipelines", "(I[II)V", (void *) android_glDeleteProgramPipelines__I_3II },
32577ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glDeleteProgramPipelines", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2 },
32587ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGenProgramPipelines", "(I[II)V", (void *) android_glGenProgramPipelines__I_3II },
32597ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGenProgramPipelines", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenProgramPipelines__ILjava_nio_IntBuffer_2 },
32607ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glIsProgramPipeline", "(I)Z", (void *) android_glIsProgramPipeline__I },
32617ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineiv", "(II[II)V", (void *) android_glGetProgramPipelineiv__II_3II },
32627ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2 },
32637ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1i", "(III)V", (void *) android_glProgramUniform1i__III },
32647ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2i", "(IIII)V", (void *) android_glProgramUniform2i__IIII },
32657ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3i", "(IIIII)V", (void *) android_glProgramUniform3i__IIIII },
32667ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4i", "(IIIIII)V", (void *) android_glProgramUniform4i__IIIIII },
32677ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1ui", "(III)V", (void *) android_glProgramUniform1ui__III },
32687ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2ui", "(IIII)V", (void *) android_glProgramUniform2ui__IIII },
32697ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3ui", "(IIIII)V", (void *) android_glProgramUniform3ui__IIIII },
32707ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4ui", "(IIIIII)V", (void *) android_glProgramUniform4ui__IIIIII },
32717ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1f", "(IIF)V", (void *) android_glProgramUniform1f__IIF },
32727ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2f", "(IIFF)V", (void *) android_glProgramUniform2f__IIFF },
32737ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3f", "(IIFFF)V", (void *) android_glProgramUniform3f__IIFFF },
32747ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4f", "(IIFFFF)V", (void *) android_glProgramUniform4f__IIFFFF },
32757ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1iv", "(III[II)V", (void *) android_glProgramUniform1iv__III_3II },
32767ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform1iv__IIILjava_nio_IntBuffer_2 },
32777ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2iv", "(III[II)V", (void *) android_glProgramUniform2iv__III_3II },
32787ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform2iv__IIILjava_nio_IntBuffer_2 },
32797ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3iv", "(III[II)V", (void *) android_glProgramUniform3iv__III_3II },
32807ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform3iv__IIILjava_nio_IntBuffer_2 },
32817ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4iv", "(III[II)V", (void *) android_glProgramUniform4iv__III_3II },
32827ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4iv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform4iv__IIILjava_nio_IntBuffer_2 },
32837ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1uiv", "(III[II)V", (void *) android_glProgramUniform1uiv__III_3II },
32847ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2 },
32857ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2uiv", "(III[II)V", (void *) android_glProgramUniform2uiv__III_3II },
32867ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2 },
32877ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3uiv", "(III[II)V", (void *) android_glProgramUniform3uiv__III_3II },
32887ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2 },
32897ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4uiv", "(III[II)V", (void *) android_glProgramUniform4uiv__III_3II },
32907ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4uiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2 },
32917ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1fv", "(III[FI)V", (void *) android_glProgramUniform1fv__III_3FI },
32927ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform1fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2 },
32937ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2fv", "(III[FI)V", (void *) android_glProgramUniform2fv__III_3FI },
32947ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform2fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2 },
32957ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3fv", "(III[FI)V", (void *) android_glProgramUniform3fv__III_3FI },
32967ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform3fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2 },
32977ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4fv", "(III[FI)V", (void *) android_glProgramUniform4fv__III_3FI },
32987ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniform4fv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2 },
32997ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2fv__IIIZ_3FI },
33007ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2 },
33017ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3fv__IIIZ_3FI },
33027ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2 },
33037ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4fv__IIIZ_3FI },
33047ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2 },
33057ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2x3fv__IIIZ_3FI },
33067ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2 },
33077ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3x2fv__IIIZ_3FI },
33087ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2 },
33097ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix2x4fv__IIIZ_3FI },
33107ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix2x4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2 },
33117ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x2fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4x2fv__IIIZ_3FI },
33127ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x2fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2 },
33137ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x4fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix3x4fv__IIIZ_3FI },
33147ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix3x4fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2 },
33157ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x3fv", "(IIIZ[FI)V", (void *) android_glProgramUniformMatrix4x3fv__IIIZ_3FI },
33167ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glProgramUniformMatrix4x3fv", "(IIIZLjava/nio/FloatBuffer;)V", (void *) android_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2 },
33177ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glValidateProgramPipeline", "(I)V", (void *) android_glValidateProgramPipeline__I },
33187ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetProgramPipelineInfoLog", "(I)Ljava/lang/String;", (void *) android_glGetProgramPipelineInfoLog },
33197ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindImageTexture", "(IIIZIII)V", (void *) android_glBindImageTexture__IIIZIII },
33207ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetBooleani_v", "(II[ZI)V", (void *) android_glGetBooleani_v__II_3ZI },
33217ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetBooleani_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetBooleani_v__IILjava_nio_IntBuffer_2 },
33227ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glMemoryBarrier", "(I)V", (void *) android_glMemoryBarrier__I },
33237ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glMemoryBarrierByRegion", "(I)V", (void *) android_glMemoryBarrierByRegion__I },
33247ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glTexStorage2DMultisample", "(IIIIIZ)V", (void *) android_glTexStorage2DMultisample__IIIIIZ },
33257ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetMultisamplefv", "(II[FI)V", (void *) android_glGetMultisamplefv__II_3FI },
33267ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetMultisamplefv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetMultisamplefv__IILjava_nio_FloatBuffer_2 },
33277ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glSampleMaski", "(II)V", (void *) android_glSampleMaski__II },
33287ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameteriv", "(III[II)V", (void *) android_glGetTexLevelParameteriv__III_3II },
33297ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameteriv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2 },
33307ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameterfv", "(III[FI)V", (void *) android_glGetTexLevelParameterfv__III_3FI },
33317ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glGetTexLevelParameterfv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2 },
33327ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glBindVertexBuffer", "(IIJI)V", (void *) android_glBindVertexBuffer__IIJI },
33337ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribFormat", "(IIIZI)V", (void *) android_glVertexAttribFormat__IIIZI },
33347ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribIFormat", "(IIII)V", (void *) android_glVertexAttribIFormat__IIII },
33357ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexAttribBinding", "(II)V", (void *) android_glVertexAttribBinding__II },
33367ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{"glVertexBindingDivisor", "(II)V", (void *) android_glVertexBindingDivisor__II },
33377ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall};
33387ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall
33397ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hallint register_android_opengl_jni_GLES31(JNIEnv *_env)
33407ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall{
33417ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    int err;
33427ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
33437ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall    return err;
33447ab63acdd0a257272512d0bcf5e06036fa0b9fdfJesse Hall}
3345