1d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/*
2d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall**
3d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** Copyright 2013, The Android Open Source Project
4d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall**
5d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** Licensed under the Apache License, Version 2.0 (the "License");
6d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** you may not use this file except in compliance with the License.
7d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** You may obtain a copy of the License at
8d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall**
9d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall**     http://www.apache.org/licenses/LICENSE-2.0
10d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall**
11d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** Unless required by applicable law or agreed to in writing, software
12d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** distributed under the License is distributed on an "AS IS" BASIS,
13d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** See the License for the specific language governing permissions and
15d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall** limitations under the License.
16d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall*/
17d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
18d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall// This source file is automatically generated
19d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
20bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-variable"
21bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-function"
22bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe
23d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <GLES3/gl3.h>
24d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <GLES3/gl3ext.h>
25d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
269626f8203a8c222b8960a49cdc66d540fdb688b0Jesse Hall#include <jni.h>
272279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h>
28d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <android_runtime/AndroidRuntime.h>
29d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <utils/misc.h>
30d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <assert.h>
31d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
32d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic int initialized = 0;
33d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
34d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jclass nioAccessClass;
35d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jclass bufferClass;
36d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jmethodID getBasePointerID;
37d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jmethodID getBaseArrayID;
38d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jmethodID getBaseArrayOffsetID;
39d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jfieldID positionID;
40d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jfieldID limitID;
41d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jfieldID elementSizeShiftID;
42d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
43d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* special calls implemented in Android's GLES wrapper used to more
45d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * efficiently bound-check passed arrays */
46d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallextern "C" {
47d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_VERSION_ES_CM_1_1
48d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
49d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        const GLvoid *ptr, GLsizei count);
50d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
51d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        const GLvoid *pointer, GLsizei count);
52d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
53d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
54d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
55d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
56d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
57d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
58d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
59d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
60d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
61d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
62d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
63d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_ES_VERSION_2_0
64d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
65d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
66d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
67d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
68d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
69d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_ES_VERSION_3_0
70d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
71d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count) {
72d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointer(indx, size, type, stride, pointer);
73d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
74d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
75d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
76d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
77d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* Cache method IDs each time the class is loaded. */
78d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
79d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
80d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallnativeClassInit(JNIEnv *_env, jclass glImplClass)
81d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
82d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
83d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
84d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
85d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
86d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
87d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
88d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
89d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            "getBasePointer", "(Ljava/nio/Buffer;)J");
90d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
91d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
92d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
93d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
94d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
95d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    positionID = _env->GetFieldID(bufferClass, "position", "I");
96d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    limitID = _env->GetFieldID(bufferClass, "limit", "I");
97d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    elementSizeShiftID =
98d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
99d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void *
102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint position;
105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint limit;
106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint elementSizeShift;
107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jlong pointer;
108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    position = _env->GetIntField(buffer, positionID);
110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    limit = _env->GetIntField(buffer, limitID);
111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    *remaining = (limit - position) << elementSizeShift;
113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    pointer = _env->CallStaticLongMethod(nioAccessClass,
114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            getBasePointerID, buffer);
115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pointer != 0L) {
116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        *array = NULL;
11701c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        return reinterpret_cast<void*>(pointer);
118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            getBaseArrayID, buffer);
122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    *offset = _env->CallStaticIntMethod(nioAccessClass,
123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            getBaseArrayOffsetID, buffer);
124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return NULL;
126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayGetter {
1293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
1313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetByteArrayElements(array, is_copy);
1323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayGetter {
1353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
1373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetBooleanArrayElements(array, is_copy);
1383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayGetter {
1413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
1433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetCharArrayElements(array, is_copy);
1443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayGetter {
1473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
1493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetShortArrayElements(array, is_copy);
1503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayGetter {
1533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
1553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetIntArrayElements(array, is_copy);
1563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayGetter {
1593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
1613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetLongArrayElements(array, is_copy);
1623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayGetter {
1653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
1673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetFloatArrayElements(array, is_copy);
1683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayGetter {
1713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
1733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetDoubleArrayElements(array, is_copy);
1743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename ARRAYGETTER>
1783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void*
1793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchigetArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
1803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    return ARRAYGETTER::Get(_env, array, is_copy);
1813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
1823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayReleaser {
1843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
1863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
1873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayReleaser {
1903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
1923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
1933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayReleaser {
1963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
1983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
1993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayReleaser {
2023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
2043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
2053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayReleaser {
2083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
2103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
2113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayReleaser {
2143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
2163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
2173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayReleaser {
2203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
2223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
2233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayReleaser {
2263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
2283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
2293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
2323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
2333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void
2343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchireleaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
2353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ARRAYRELEASER::Release(_env, array, data, commit);
2363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
2373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _env->ReleasePrimitiveArrayCritical(array, data,
242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                       commit ? 0 : JNI_ABORT);
243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void *
246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallgetDirectBufferPointer(JNIEnv *_env, jobject buffer) {
247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jint position = _env->GetIntField(buffer, positionID);
250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        buf += position << elementSizeShift;
252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    } else {
253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException",
254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                          "Must use a native order direct Buffer");
255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (void*) buf;
257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall// --------------------------------------------------------------------------
260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/*
262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * returns the number of values glGet returns for a given pname.
263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall *
264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * The code below is written such that pnames requiring only one values
265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * are the default (and are not explicitely tested for). This makes the
266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * checking code much shorter/readable/efficient.
267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall *
268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * This means that unknown pnames (e.g.: extensions) will default to 1. If
269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * that unknown pname needs more than 1 value, then the validation check
270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * is incomplete and the app may crash if it passed the wrong number params.
271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall */
272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic int getNeededCount(GLint pname) {
273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int needed = 1;
274dc43a6c99c21e99723058bab4041e80557795a74Romain Guy#ifdef GL_ES_VERSION_3_0
275dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    // GLES 3.x pnames
276dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    switch (pname) {
277dc43a6c99c21e99723058bab4041e80557795a74Romain Guy        case GL_MAX_VIEWPORT_DIMS:
278dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            needed = 2;
279dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            break;
280dc43a6c99c21e99723058bab4041e80557795a74Romain Guy
281dc43a6c99c21e99723058bab4041e80557795a74Romain Guy        case GL_PROGRAM_BINARY_FORMATS:
282dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &needed);
283dc43a6c99c21e99723058bab4041e80557795a74Romain Guy            break;
284dc43a6c99c21e99723058bab4041e80557795a74Romain Guy    }
285dc43a6c99c21e99723058bab4041e80557795a74Romain Guy#endif
286dc43a6c99c21e99723058bab4041e80557795a74Romain Guy
287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_ES_VERSION_2_0
288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // GLES 2.x pnames
289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    switch (pname) {
290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 2;
293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_BLEND_COLOR:
296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_CLEAR_VALUE:
297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_WRITEMASK:
298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SCISSOR_BOX:
299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_VIEWPORT:
300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 4;
301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SHADER_BINARY_FORMATS:
308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_VERSION_ES_CM_1_1
314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // GLES 1.x pnames
315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    switch (pname) {
316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_DEPTH_RANGE:
319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SMOOTH_LINE_WIDTH_RANGE:
320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SMOOTH_POINT_SIZE_RANGE:
321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 2;
322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_CURRENT_NORMAL:
325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_POINT_DISTANCE_ATTENUATION:
326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 3;
327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_CLEAR_VALUE:
330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_WRITEMASK:
331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_CURRENT_COLOR:
332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_CURRENT_TEXTURE_COORDS:
333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_FOG_COLOR:
334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_LIGHT_MODEL_AMBIENT:
335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SCISSOR_BOX:
336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_VIEWPORT:
337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 4;
338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_MODELVIEW_MATRIX:
341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_PROJECTION_MATRIX:
342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_TEXTURE_MATRIX:
343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 16;
344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return needed;
352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallget
358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    CTYPE *params_base = (CTYPE *) 0;
363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    CTYPE *params = (CTYPE *) 0;
365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int _needed = 0;
366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _needed = getNeededCount(pname);
381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // if we didn't find this pname, we just assume the user passed
382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // an array of the right size -- this might happen with extensions
383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // or if we forget an enum here.
384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_remaining < _needed) {
385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "length - offset < needed";
388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
3913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env, params_ref, (jboolean *)0);
392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GET(
395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (CTYPE *)params
397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
4013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, params_ref, params_base, !_exception);
403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
4113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallgetarray
414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
4183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    JTYPEARRAY _array = (JTYPEARRAY) 0;
419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    CTYPE *params = (CTYPE *) 0;
422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int _needed = 0;
423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
425cee5198e7199fcbb131ff0d30165fb1d5c0107cfAndy McFadden    _remaining /= sizeof(CTYPE);    // convert from bytes to item count
426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _needed = getNeededCount(pname);
427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // if we didn't find this pname, we just assume the user passed
428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // an array of the right size -- this might happen with extensions
429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // or if we forget an enum here.
430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_needed>0 && _remaining < _needed) {
431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "remaining() < needed";
434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
4373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
4383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (jboolean *) 0);
439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (CTYPE *) (_paramsBase + _bufferOffset);
440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GET(
442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (CTYPE *)params
444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall// --------------------------------------------------------------------------
457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glReadBuffer ( GLenum mode ) */
458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glReadBuffer__I
460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode) {
461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glReadBuffer(
462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode
463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ) */
467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawRangeElements__IIIIILjava_nio_Buffer_2
469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jobject indices_buf) {
47084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
47184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
47284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *indices = (GLvoid *) 0;
477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
47884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!indices_buf) {
47984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
48084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
48184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "indices == null";
48284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
48384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
4843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (indices == NULL) {
486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        indices = (GLvoid *) (_indicesBase + _bufferOffset);
488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawRangeElements(
490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)start,
492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)end,
493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)indices
496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
49784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
49884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, indices, JNI_FALSE);
501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
50284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
50384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
50484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLsizei offset ) */
508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawRangeElements__IIIIII
510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jint offset) {
511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawRangeElements(
512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)start,
514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)end,
515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
51701c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2
524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint format, jint type, jobject pixels_buf) {
52584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
52684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
52784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pixels = (GLvoid *) 0;
532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5336aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (pixels_buf) {
5346aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5356aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
5366aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (pixels_buf && pixels == NULL) {
537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexImage3D(
541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)internalformat,
544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pixels
551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, pixels, JNI_FALSE);
554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
55584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
55684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
55784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei offset ) */
561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexImage3D__IIIIIIIIII
563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint format, jint type, jint offset) {
564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexImage3D(
565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)internalformat,
568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
57401c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels ) */
579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jobject pixels_buf) {
58284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
58384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
58484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pixels = (GLvoid *) 0;
589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
59084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!pixels_buf) {
59184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
59284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
59384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "pixels == null";
59484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
59584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pixels == NULL) {
598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexSubImage3D(
602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pixels
613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
61484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
61584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, pixels, JNI_FALSE);
618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
61984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
62084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
62184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei offset ) */
625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexSubImage3D__IIIIIIIIIII
627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jint offset) {
628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexSubImage3D(
629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
63901c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCopyTexSubImage3D__IIIIIIIII
646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint x, jint y, jint width, jint height) {
647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCopyTexSubImage3D(
648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ) */
661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2
663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jobject data_buf) {
66484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
66584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
66684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *data = (GLvoid *) 0;
671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
67284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!data_buf) {
67384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
67484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
67584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "data == null";
67684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
67784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
6783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLvoid *) (_dataBase + _bufferOffset);
682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexImage3D(
684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)data
693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
69484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
69584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, data, JNI_FALSE);
698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
69984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
70084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
70184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei offset ) */
705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexImage3D__IIIIIIIII
707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jint offset) {
708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexImage3D(
709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
71701c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ) */
722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint imageSize, jobject data_buf) {
72584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
72684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
72784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *data = (GLvoid *) 0;
732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
73384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!data_buf) {
73484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
73584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
73684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "data == null";
73784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
73884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
7393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLvoid *) (_dataBase + _bufferOffset);
743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexSubImage3D(
745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)data
756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
75784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
75884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, data, JNI_FALSE);
761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
76284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
76384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
76484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLsizei offset ) */
768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexSubImage3D__IIIIIIIIIII
770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint imageSize, jint offset) {
771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexSubImage3D(
772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
78201c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenQueries ( GLsizei n, GLuint *ids ) */
787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenQueries__I_3II
789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
8113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenQueries(
815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
8213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenQueries ( GLsizei n, GLuint *ids ) */
830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenQueries__ILjava_nio_IntBuffer_2
832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
83384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
83484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
83584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
8363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
84184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!ids_buf) {
84284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
84384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
84484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "ids == null";
84584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
84684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
8473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
8493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenQueries(
853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
85684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
85784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
85984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)ids, _exception ? JNI_ABORT : 0);
86084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
86184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
86284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteQueries__I_3II
869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
8913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteQueries(
895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
9013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteQueries__ILjava_nio_IntBuffer_2
912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
91384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
91484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
91584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
9163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
92184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!ids_buf) {
92284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
92384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
92484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "ids == null";
92584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
92684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
9273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
9293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteQueries(
933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
93684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
93784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
9393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
94184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
94284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
94384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsQuery ( GLuint id ) */
947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsQuery__I
949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id) {
950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsQuery(
952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBeginQuery ( GLenum target, GLuint id ) */
958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBeginQuery__II
960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint id) {
961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBeginQuery(
962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glEndQuery ( GLenum target ) */
968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glEndQuery__I
970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target) {
971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glEndQuery(
972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target
973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryiv__II_3II
979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
1000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
10013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
1002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
1003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryiv(
1005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
1007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
1008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
10123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
1013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
1021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryiv__IILjava_nio_IntBuffer_2
1023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
102484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
102584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
102684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
10273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
1031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
103284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
103384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
103484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
103584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
103684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
103784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
10383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
10403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
1042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryiv(
1044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
1046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
1047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
104884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
104984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
105184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
105284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
105384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
105484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
1055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
1059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryObjectuiv__II_3II
1061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id, jint pname, jintArray params_ref, jint offset) {
1062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
1066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
1068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
1070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
1073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
1082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
10833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
1084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
1085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryObjectuiv(
1087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id,
1088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
1089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
1090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
10943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
1095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
1103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2
1105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id, jint pname, jobject params_buf) {
110684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
110784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
110884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
11093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
1113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
111484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
111584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
111684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
111784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
111884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
111984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
11203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
11223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
1124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryObjectuiv(
1126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id,
1127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
1128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
1129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
113084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
113184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
113384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
113484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
113584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
113684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
1137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glUnmapBuffer ( GLenum target ) */
1141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
1142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUnmapBuffer__I
1143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target) {
1144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
1145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glUnmapBuffer(
1146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target
1147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
1149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferPointerv ( GLenum target, GLenum pname, GLvoid** params ) */
1152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jobject
1153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferPointerv__II
1154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname) {
1155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 _mapLength;
1156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid* _p;
1157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v((GLenum)target, GL_BUFFER_MAP_LENGTH, &_mapLength);
1158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferPointerv((GLenum)target, (GLenum)pname, &_p);
1159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _env->NewDirectByteBuffer(_p, _mapLength);
1160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
1163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawBuffers__I_3II
1165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray bufs_ref, jint offset) {
1166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs_base = (GLenum *) 0;
1170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs = (GLenum *) 0;
1172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!bufs_ref) {
1174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "bufs == null";
1177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(bufs_ref) - offset;
1186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufs_base = (GLenum *)
11873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(bufs_ref, (jboolean *)0);
1188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufs = bufs_base + offset;
1189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawBuffers(
1191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)bufs
1193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (bufs_base) {
11973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(bufs_ref, (jint*)bufs_base,
1198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
1206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawBuffers__ILjava_nio_IntBuffer_2
1208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject bufs_buf) {
120984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
121084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
121184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
12123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs = (GLenum *) 0;
1216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
121784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!bufs_buf) {
121884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
121984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
122084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "bufs == null";
122184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
122284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
12233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    bufs = (GLenum *)getPointer(_env, bufs_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (bufs == NULL) {
12253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _bufsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        bufs = (GLenum *) (_bufsBase + _bufferOffset);
1227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawBuffers(
1229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)bufs
1231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
123284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
123384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
12353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)bufs, JNI_ABORT);
1236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
123784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
123884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
123984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x3fv__IIZ_3FI
1245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
12673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x3fv(
1271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
12793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2
1290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
129184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
129284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
129384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
12943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
129984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
130084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
130184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
130284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
130384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
130484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
13053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
13073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x3fv(
1311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
131684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
131784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
13193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
132184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
132284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
132384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x2fv__IIZ_3FI
1329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
13513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x2fv(
1355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
13633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2
1374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
137584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
137684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
137784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
13783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
138384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
138484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
138584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
138684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
138784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
138884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
13893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
13913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x2fv(
1395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
140084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
140184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
14033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
140584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
140684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
140784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x4fv__IIZ_3FI
1413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
14353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x4fv(
1439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
14473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2
1458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
145984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
146084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
146184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
14623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
146784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
146884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
146984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
147084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
147184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
147284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
14733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
14753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x4fv(
1479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
148484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
148584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
14873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
148984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
149084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
149184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x2fv__IIZ_3FI
1497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
15193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x2fv(
1523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
15313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2
1542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
154384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
154484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
154584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
15463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
155184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
155284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
155384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
155484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
155584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
155684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
15573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
15593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x2fv(
1563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
156884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
156984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
15713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
157384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
157484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
157584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x4fv__IIZ_3FI
1581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
16033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x4fv(
1607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
16153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2
1626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
162784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
162884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
162984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
16303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
163584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
163684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
163784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
163884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
163984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
164084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
16413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
16433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x4fv(
1647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
165284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
165384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
16553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
165784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
165884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
165984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x3fv__IIZ_3FI
1665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
16873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x3fv(
1691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
16993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2
1710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
171184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
171284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
171384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
17143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
171984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
172084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
172184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
172284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
172384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
172484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
17253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
17273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x3fv(
1731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
173684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
173784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
17393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
174184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
174284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
174384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBlitFramebuffer ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter ) */
1747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBlitFramebuffer__IIIIIIIIII
1749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint srcX0, jint srcY0, jint srcX1, jint srcY1, jint dstX0, jint dstY0, jint dstX1, jint dstY1, jint mask, jint filter) {
1750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBlitFramebuffer(
1751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcX0,
1752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcY0,
1753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcX1,
1754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcY1,
1755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstX0,
1756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstY0,
1757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstX1,
1758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstY1,
1759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)mask,
1760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)filter
1761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glRenderbufferStorageMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height ) */
1765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glRenderbufferStorageMultisample__IIIII
1767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height) {
1768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glRenderbufferStorageMultisample(
1769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)samples,
1771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
1772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
1773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
1774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glFramebufferTextureLayer ( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ) */
1778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFramebufferTextureLayer__IIIII
1780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level, jint layer) {
1781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glFramebufferTextureLayer(
1782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)attachment,
1784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)texture,
1785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
1786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)layer
1787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLvoid * glMapBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) */
1791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jobject
1792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glMapBufferRange__IIII
1793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint offset, jint length, jint access) {
1794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid* _p = glMapBufferRange((GLenum)target,
1795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            (GLintptr)offset, (GLsizeiptr)length, (GLbitfield)access);
1796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jobject _buf = (jobject)0;
1797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_p) {
1798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _buf = _env->NewDirectByteBuffer(_p, length);
1799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _buf;
1801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glFlushMappedBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length ) */
1804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFlushMappedBufferRange__III
1806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint offset, jint length) {
1807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glFlushMappedBufferRange(
1808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)offset,
1810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)length
1811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindVertexArray ( GLuint array ) */
1815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindVertexArray__I
1817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint array) {
1818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindVertexArray(
1819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)array
1820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteVertexArrays__I_3II
1826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays_base = (GLuint *) 0;
1831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!arrays_ref) {
1835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "arrays == null";
1838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(arrays_ref) - offset;
1847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays_base = (GLuint *)
18483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
1849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays = arrays_base + offset;
1850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteVertexArrays(
1852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays_base) {
18583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
1859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteVertexArrays__ILjava_nio_IntBuffer_2
1869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
187084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
187184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
187284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
18733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
187884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!arrays_buf) {
187984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
188084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
188184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "arrays == null";
188284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
188384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
18843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays == NULL) {
18863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        arrays = (GLuint *) (_arraysBase + _bufferOffset);
1888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteVertexArrays(
1890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
189384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
189484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
18963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)arrays, JNI_ABORT);
1897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
189884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
189984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
190084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
1901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenVertexArrays__I_3II
1906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays_base = (GLuint *) 0;
1911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!arrays_ref) {
1915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "arrays == null";
1918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(arrays_ref) - offset;
1927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays_base = (GLuint *)
19283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
1929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays = arrays_base + offset;
1930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenVertexArrays(
1932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays_base) {
19383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
1939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenVertexArrays__ILjava_nio_IntBuffer_2
1949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
195084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
195184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
195284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
19533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
195884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!arrays_buf) {
195984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
196084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
196184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "arrays == null";
196284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
196384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
19643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays == NULL) {
19663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        arrays = (GLuint *) (_arraysBase + _bufferOffset);
1968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenVertexArrays(
1970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
197384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
197484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
1975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
197684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)arrays, _exception ? JNI_ABORT : 0);
197784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
197884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
197984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
1980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsVertexArray ( GLuint array ) */
1984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
1985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsVertexArray__I
1986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint array) {
1987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
1988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsVertexArray(
1989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)array
1990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
1992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetIntegeri_v__II_3II
1997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jintArray data_ref, jint offset) {
1998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data_base = (GLint *) 0;
2002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data = (GLint *) 0;
2004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!data_ref) {
2006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "data == null";
2009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
2018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data_base = (GLint *)
20193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(data_ref, (jboolean *)0);
2020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data = data_base + offset;
2021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetIntegeri_v(
2023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
2024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)data
2026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data_base) {
20303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(data_ref, (jint*)data_base,
2031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
2039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetIntegeri_v__IILjava_nio_IntBuffer_2
2041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
204284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
204384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
204484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
20453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data = (GLint *) 0;
2049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
205084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!data_buf) {
205184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
205284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
205384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "data == null";
205484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
205584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
20563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLint *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
20583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLint *) (_dataBase + _bufferOffset);
2060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetIntegeri_v(
2062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
2063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)data
2065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
206684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
206784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
2068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
206984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)data, _exception ? JNI_ABORT : 0);
207084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
207184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
207284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
2073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBeginTransformFeedback ( GLenum primitiveMode ) */
2077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBeginTransformFeedback__I
2079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint primitiveMode) {
2080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBeginTransformFeedback(
2081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)primitiveMode
2082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glEndTransformFeedback ( void ) */
2086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glEndTransformFeedback__
2088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
2089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glEndTransformFeedback();
2090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindBufferRange ( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
2093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindBufferRange__IIIII
2095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer, jint offset, jint size) {
2096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindBufferRange(
2097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
2098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)buffer,
2100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)offset,
2101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)size
2102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindBufferBase ( GLenum target, GLuint index, GLuint buffer ) */
2106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindBufferBase__III
2108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer) {
2109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindBufferBase(
2110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
2111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)buffer
2113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode ) */
2117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
2118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
2119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTransformFeedbackVaryings
2120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray varyings_ref, jint bufferMode) {
2121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
2123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
2124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0, _i;
2125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _varyings = NULL;
2126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _varying = NULL;
2127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!varyings_ref) {
2129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "varyings == null";
2132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(varyings_ref);
2136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _varyings = (const char**)calloc(_count, sizeof(const char*));
2137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
2138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
2139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_varying) {
2140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
2141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
2142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null varyings element";
2143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
2144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
2145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _varyings[_i] = _env->GetStringUTFChars(_varying, 0);
2146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTransformFeedbackVaryings(program, _count, _varyings, bufferMode);
2149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
2152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_varyings[_i]) {
2153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
2154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_varying) {
2155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_varying, _varyings[_i]);
2156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
2157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
2158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_varyings);
2160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
2168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jintArray length_ref, jint lengthOffset, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset, jbyteArray name_ref, jint nameOffset) {
2169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
2171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
2172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
2173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size_base = (GLint *) 0;
2176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type_base = (GLenum *) 0;
2179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char *name_base = (char *) 0;
2182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
2183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char *name = (char *) 0;
2184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
21856aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
21866aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
21876aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
21886aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
21896aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
21906aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
21916aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
21926aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
21936aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
21946aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
21956aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
2196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!size_ref) {
2199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "size == null";
2202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (sizeOffset < 0) {
2205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "sizeOffset < 0";
2208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
2211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size_base = (GLint *)
22123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
2213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size = size_base + sizeOffset;
2214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!type_ref) {
2216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "type == null";
2219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (typeOffset < 0) {
2222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "typeOffset < 0";
2225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
2228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type_base = (GLenum *)
22293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
2230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type = type_base + typeOffset;
2231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name_ref) {
2233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "name == null";
2236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (nameOffset < 0) {
2239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "nameOffset < 0";
2242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
2245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    name_base = (char *)
22463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetByteArrayElements(name_ref, (jboolean *)0);
2247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    name = name_base + nameOffset;
2248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufsize,
2253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
2254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)name
2257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (name_base) {
22613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
2262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type_base) {
22653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
2266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size_base) {
22693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
2270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
22733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
2274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
2284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
228559fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "deprecated");
228659fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos}
228759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos
228859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
228959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballosstatic void
229059fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballosandroid_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2
229159fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jobject name_buf) {
22923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
2293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
22943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
2295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeBufferOffset = (jint) 0;
22963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
2297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeBufferOffset = (jint) 0;
229859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jbyteArray _nameArray = (jbyteArray)0;
229959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jint _nameBufferOffset = (jint)0;
2300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
230659fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jint _nameRemaining;
230759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    GLchar* name = (GLchar*)0;
230859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos
2309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
23103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
23113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
23123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
231359fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    name = (GLchar*)getPointer(_env, name_buf, (jarray*)&_nameArray, &_nameRemaining, &_nameBufferOffset);
2314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length == NULL) {
23153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
2316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
2317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size == NULL) {
23193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
2320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
2321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type == NULL) {
23233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
2324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
2325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
232659fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    if (name == NULL) {
232759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        char* _nameBase = (char *)_env->GetByteArrayElements(_nameArray, (jboolean*)0);
232859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        name = (GLchar *) (_nameBase + _nameBufferOffset);
232959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    }
2330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufsize,
2334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
2335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
233759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        (GLchar*)name
2338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_typeArray) {
23403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
2341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_sizeArray) {
23433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
2344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
23463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
2347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
234859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    if (_nameArray) {
234959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        releaseArrayPointer<jbyteArray, jbyte*, ByteArrayReleaser>(_env, _nameArray, (jbyte*)name, JNI_TRUE);
235059fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    }
2351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
2355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying1
2356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
2357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
2359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
2360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size_base = (GLint *) 0;
2361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type_base = (GLenum *) 0;
2364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = 0;
2368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
2370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!len) {
2372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return _env->NewStringUTF("");
2373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) malloc(len);
2375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf == NULL) {
2377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return NULL;
2379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!size_ref) {
2381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "size == null";
2384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (sizeOffset < 0) {
2387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "sizeOffset < 0";
2390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
2393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size_base = (GLint *)
23943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
2395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size = size_base + sizeOffset;
2396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!type_ref) {
2398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "type == null";
2401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (typeOffset < 0) {
2404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "typeOffset < 0";
2407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
2410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type_base = (GLenum *)
24113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
2412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type = type_base + typeOffset;
2413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)len,
2418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        NULL,
2419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)buf
2422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type_base) {
24253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
2426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size_base) {
24293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
2430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception != 1) {
2433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        result = _env->NewStringUTF(buf);
2434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
2436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        free(buf);
2437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (result == 0) {
2442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        result = _env->NewStringUTF("");
2443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
2446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
2450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying2
2451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
24523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
2453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeBufferOffset = (jint) 0;
24543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
2455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeBufferOffset = (jint) 0;
2456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = 0;
2464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
2466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!len) {
2468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return _env->NewStringUTF("");
2469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) malloc(len);
2471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf == NULL) {
2473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return NULL;
2475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
24773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
24783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
2479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size == NULL) {
24803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
2481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
2482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type == NULL) {
24843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
2485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
2486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)len,
2491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        NULL,
2492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)buf
2495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_typeArray) {
24983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
2499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_sizeArray) {
25013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
2502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    result = _env->NewStringUTF(buf);
2504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
2505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        free(buf);
2506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
2508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
2510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I
2512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
251384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
251484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
251584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
2516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
2517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pointer = (GLvoid *) 0;
2520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pointer_buf) {
2522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
2523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if ( ! pointer ) {
2524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            return;
2525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
2526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointerBounds(
2528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)size,
2530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
2531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)stride,
2532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pointer,
2533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)remaining
2534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
253584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
253684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
253784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
2538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, GLsizei offset ) */
2541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribIPointer__IIIII
2543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jint offset) {
2544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointer(
2545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)size,
2547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
2548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)stride,
254901c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
2550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIiv__II_3II
2556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
2561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
2563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
25783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIiv(
2582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
2585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
25893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2
2600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
260184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
260284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
260384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
26043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
2608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
260984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
261084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
261184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
261284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
261384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
261484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
26173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
2619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIiv(
2621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
2624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
262584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
262684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
2627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
262884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
2629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
263084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
263184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
263284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
263384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy}
263484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
2635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIuiv__II_3II
2638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
2643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
26603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIuiv(
2664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
26713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2
2682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
268384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
268484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
268584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
26863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
269184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
269284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
269384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
269484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
269584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
269684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
26973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
26993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
2701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIuiv(
2703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
270784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
270884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
2709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
271084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
271184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
271284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
271384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
2714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4i ( GLuint index, GLint x, GLint y, GLint z, GLint w ) */
2718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4i__IIIII
2720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4i(
2722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
2724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
2725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)z,
2726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)w
2727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4ui ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w ) */
2731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4ui__IIIII
2733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4ui(
2735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)x,
2737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)y,
2738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)z,
2739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)w
2740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4iv__I_3II
2746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v_base = (GLint *) 0;
2751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v = (GLint *) 0;
2753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!v_ref) {
2755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "v == null";
2758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(v_ref) - offset;
2767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v_base = (GLint *)
27683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(v_ref, (jboolean *)0);
2769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v = v_base + offset;
2770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4iv(
2772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)v
2774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v_base) {
27783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
2779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4iv__ILjava_nio_IntBuffer_2
2789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
279084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
279184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
279284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
27933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v = (GLint *) 0;
2797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
279884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!v_buf) {
279984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
280084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
280184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "v == null";
280284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
280384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
28043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v == NULL) {
28063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        v = (GLint *) (_vBase + _bufferOffset);
2808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4iv(
2810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)v
2812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
281384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
281484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
2815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
28163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
2817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
281884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
281984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
282084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
2821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4uiv__I_3II
2826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v_base = (GLuint *) 0;
2831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v = (GLuint *) 0;
2833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!v_ref) {
2835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "v == null";
2838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(v_ref) - offset;
2847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v_base = (GLuint *)
28483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(v_ref, (jboolean *)0);
2849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v = v_base + offset;
2850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4uiv(
2852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)v
2854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v_base) {
28583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
2859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2
2869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
287084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
287184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
287284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
28733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v = (GLuint *) 0;
2877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
287884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!v_buf) {
287984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
288084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
288184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "v == null";
288284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
288384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
28843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    v = (GLuint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v == NULL) {
28863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        v = (GLuint *) (_vBase + _bufferOffset);
2888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4uiv(
2890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)v
2892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
289384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
289484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
2895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
28963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
2897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
289884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
289984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
290084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
2901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformuiv__II_3II
2906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jintArray params_ref, jint offset) {
2907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
2911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
29283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformuiv(
2932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
29393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformuiv__IILjava_nio_IntBuffer_2
2950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
295184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
295284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
295384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
29543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
295984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
296084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
296184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
296284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
296384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
296484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
29653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
29673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
2969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformuiv(
2971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
297584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
297684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
2977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
297884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
297984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
298084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
298184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
2982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLint glGetFragDataLocation ( GLuint program, const GLchar *name ) */
2986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
2987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetFragDataLocation__ILjava_lang_String_2
2988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jstring name) {
2989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint _returnValue = 0;
2993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _nativename = 0;
2994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name) {
2996428d3fcbe3596b18549cdada9fc68a29f159a946Elliott Hughes        _exception = 1;
2997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "name == null";
2999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
3002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glGetFragDataLocation(
3004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar *)_nativename
3006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nativename) {
3010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
3011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
3017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1ui ( GLint location, GLuint v0 ) */
3020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1ui__II
3022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0) {
3023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1ui(
3024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0
3026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2ui ( GLint location, GLuint v0, GLuint v1 ) */
3030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2ui__III
3032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1) {
3033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2ui(
3034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
3036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1
3037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3ui ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
3041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3ui__IIII
3043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2) {
3044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3ui(
3045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
3047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1,
3048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v2
3049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4ui ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
3053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4ui__IIIII
3055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2, jint v3) {
3056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4ui(
3057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
3059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1,
3060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v2,
3061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v3
3062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
3066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1uiv__II_3II
3068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
3069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
30903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1uiv(
3094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
31013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
3110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1uiv__IILjava_nio_IntBuffer_2
3112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
311384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
311484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
311584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
31163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
312184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
312284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
312384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
312484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
312584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
312684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
31273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
31293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1uiv(
3133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
313784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
313884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
31403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
314284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
314384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
314484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
3148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2uiv__II_3II
3150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
3151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
31723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2uiv(
3176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
31833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
3192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2uiv__IILjava_nio_IntBuffer_2
3194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
319584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
319684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
319784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
31983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
320384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
320484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
320584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
320684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
320784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
320884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
32093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
32113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2uiv(
3215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
321984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
322084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
32223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
322484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
322584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
322684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
3230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3uiv__II_3II
3232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
3233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
32543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3uiv(
3258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
32653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
3274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3uiv__IILjava_nio_IntBuffer_2
3276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
327784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
327884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
327984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
32803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
328584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
328684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
328784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
328884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
328984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
329084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
32913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
32933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3uiv(
3297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
330184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
330284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
33043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
330684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
330784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
330884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
3312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4uiv__II_3II
3314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
3315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
33363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4uiv(
3340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
33473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
3356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4uiv__IILjava_nio_IntBuffer_2
3358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
335984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
336084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
336184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
33623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
336784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
336884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
336984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
337084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
337184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
337284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
33733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
33753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4uiv(
3379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
3380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
338384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
338484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
33863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
338884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
338984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
339084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
3394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferiv__II_3II
3396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
3397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value_base = (GLint *) 0;
3401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value = (GLint *) 0;
3403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLint *)
34183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferiv(
3422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)value
3425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
34293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
3438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferiv__IILjava_nio_IntBuffer_2
3440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
344184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
344284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
344384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
34443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value = (GLint *) 0;
3448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
344984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
345084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
345184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
345284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
345384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
345484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
34553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
34573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
3459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferiv(
3461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)value
3464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
346584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
346684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
34683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
347084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
347184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
347284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
3476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferuiv__II_3II
3478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
3479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
35003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferuiv(
3504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
35113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
3520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferuiv__IILjava_nio_IntBuffer_2
3522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
352384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
352484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
352584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
35263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
353184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
353284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
353384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
353484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
353584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
353684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
35373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
35393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferuiv(
3543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
354784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
354884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
35503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
355284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
355384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
355484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfv__II_3FI
3560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloatArray value_ref, jint offset) {
3561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
3565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
3567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
35823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
3583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfv(
3586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
3589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
35933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
3594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfv__IILjava_nio_FloatBuffer_2
3604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
360584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
360684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
360784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
36083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
3609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
3612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
361384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!value_buf) {
361484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
361584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
361684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "value == null";
361784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
361884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
36193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
36213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
3622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
3623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfv(
3625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
3628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
362984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
363084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
36323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
3633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
363484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
363584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
363684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfi ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil ) */
3640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfi__IIFI
3642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloat depth, jint stencil) {
3643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfi(
3644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat)depth,
3647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)stencil
3648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* const GLubyte * glGetStringi ( GLenum name, GLuint index ) */
3652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
3653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetStringi__II
3654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint name, jint index) {
3655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const GLubyte* _chars = glGetStringi((GLenum)name, (GLuint)index);
3656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _env->NewStringUTF((const char*)_chars);
3657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCopyBufferSubData ( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ) */
3660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCopyBufferSubData__IIIII
3662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint readTarget, jint writeTarget, jint readOffset, jint writeOffset, jint size) {
3663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCopyBufferSubData(
3664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)readTarget,
3665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)writeTarget,
3666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)readOffset,
3667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)writeOffset,
3668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)size
3669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
3674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
3675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformIndices_array
3676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jintArray uniformIndices_ref, jint uniformIndicesOffset) {
3677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
3679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
3680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0;
3681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _i;
3682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _names = NULL;
3683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices_base = NULL;
3684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices = NULL;
3685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformNames_ref) {
3687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformNames == null";
3690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(uniformNames_ref);
3693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _names = (const char**)calloc(_count, sizeof(const char*));
3694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
3695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_name) {
3697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
3698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
3699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null uniformNames element";
3700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
3701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _names[_i] = _env->GetStringUTFChars(_name, 0);
3703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_ref) {
3706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndicesOffset < 0) {
3712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndicesOffset < 0";
3715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset < _count) {
3718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "not enough space in uniformIndices";
3721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
37233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _indices_base = (GLuint*)_env->GetIntArrayElements(
3724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            uniformIndices_ref, 0);
3725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _indices = _indices_base + uniformIndicesOffset;
3726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformIndices(program, _count, _names, _indices);
3728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_indices_base) {
37313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)_indices_base,
37323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _exception ? JNI_ABORT : 0);
3733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
3735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_names[_i]) {
3736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_name) {
3738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_name, _names[_i]);
3739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
3740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_names);
3743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
3750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
3751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformIndices_buffer
3752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jobject uniformIndices_buf) {
3753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
3755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
3756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0;
3757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _i;
3758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _names = NULL;
37593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _uniformIndicesArray = (jintArray)0;
3760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesOffset = 0;
3762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices = NULL;
3763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* _indicesBase = NULL;
3764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformNames_ref) {
3766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformNames == null";
3769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_buf) {
3772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(uniformNames_ref);
3779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _names = (const char**)calloc(_count, sizeof(const char*));
3780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
3781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_name) {
3783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
3784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
3785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null uniformNames element";
3786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
3787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _names[_i] = _env->GetStringUTFChars(_name, 0);
3789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
37923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining,
3793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            &_uniformIndicesOffset);
3794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!_indices) {
37953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _indicesBase = (char*)_env->GetIntArrayElements(
37963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _uniformIndicesArray, 0);
3797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
3798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesRemaining < _count) {
3800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "not enough space in uniformIndices";
3803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformIndices(program, _count, _names, _indices);
3807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesArray) {
38103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(
38113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _uniformIndicesArray, (jint*)_indicesBase, JNI_TRUE);
3812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
3814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_names[_i]) {
3815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_name) {
3817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_name, _names[_i]);
3818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
3819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_names);
3822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformsiv__II_3III_3II
3829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jintArray uniformIndices_ref, jint uniformIndicesOffset, jint pname, jintArray params_ref, jint paramsOffset) {
3830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices_base = (GLuint *) 0;
3834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices = (GLuint *) 0;
3836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
3837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsRemaining;
3838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_ref) {
3841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndicesOffset < 0) {
3847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndicesOffset < 0";
3850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _uniformIndicesRemaining = _env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset;
3853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    uniformIndices_base = (GLuint *)
38543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(uniformIndices_ref, (jboolean *)0);
3855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    uniformIndices = uniformIndices_base + uniformIndicesOffset;
3856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (paramsOffset < 0) {
3864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "paramsOffset < 0";
3867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
3870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
38713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
3872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + paramsOffset;
3873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformsiv(
3875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)uniformCount,
3877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)uniformIndices,
3878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
38843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
3885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndices_base) {
38883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)uniformIndices_base,
3889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2
3899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jobject uniformIndices_buf, jint pname, jobject params_buf) {
390084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
390184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
390284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
39033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _uniformIndicesArray = (jintArray) 0;
3904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesBufferOffset = (jint) 0;
39053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _paramsArray = (jintArray) 0;
3906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsBufferOffset = (jint) 0;
3907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices = (GLuint *) 0;
3909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsRemaining;
3910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
391284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!uniformIndices_buf) {
391384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
391484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
391584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "uniformIndices == null";
391684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
391784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
39183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
391984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
392084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
392184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
392284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
392384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
392484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
39253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
3926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndices == NULL) {
39273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _uniformIndicesBase = (char *)_env->GetIntArrayElements(_uniformIndicesArray, (jboolean *) 0);
3928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        uniformIndices = (GLuint *) (_uniformIndicesBase + _uniformIndicesBufferOffset);
3929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
39313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
3932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _paramsBufferOffset);
3933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformsiv(
3935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)uniformCount,
3937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)uniformIndices,
3938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
394184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
394284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
3943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_paramsArray) {
394484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, _exception ? JNI_ABORT : 0);
3945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesArray) {
39473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_uniformIndicesArray, (jint*)uniformIndices, JNI_ABORT);
3948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
394984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
395084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
395184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
3952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLuint glGetUniformBlockIndex ( GLuint program, const GLchar *uniformBlockName ) */
3955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
3956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformBlockIndex__ILjava_lang_String_2
3957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jstring uniformBlockName) {
3958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint _returnValue = 0;
3962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _nativeuniformBlockName = 0;
3963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformBlockName) {
3965428d3fcbe3596b18549cdada9fc68a29f159a946Elliott Hughes        _exception = 1;
3966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockName == null";
3968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nativeuniformBlockName = _env->GetStringUTFChars(uniformBlockName, 0);
3971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glGetUniformBlockIndex(
3973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar *)_nativeuniformBlockName
3975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nativeuniformBlockName) {
3979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->ReleaseStringUTFChars(uniformBlockName, _nativeuniformBlockName);
3980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
3986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockiv__III_3II
3991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jintArray params_ref, jint offset) {
3992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
3996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
40133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
4014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv(
4017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
4019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
4021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
40253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
4026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
4034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2
4036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jobject params_buf) {
403784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
403884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
403984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
40403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
4044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
404584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
404684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
404784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
404884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
404984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
405084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
40513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
40533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
4055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv(
4057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
4059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
4061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
406284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
406384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
406584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
406684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
406784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
406884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
4069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
4073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_III_3II_3BI
4075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, jbyteArray name_ref, jint nameOffset) {
4076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType;
4078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage;
4079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length_base = (GLsizei*)0;
4080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length = (GLsizei*)0;
4082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name_base = (GLchar*)0;
4083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
4084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name = (GLchar*)0;
4085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
40866aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
40876aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
40886aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
40896aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
40906aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
40916aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
40926aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
40936aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
40946aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _length_base = (GLsizei*)_env->GetIntArrayElements(
40956aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos                length_ref, (jboolean*)0);
40966aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _length = _length_base + lengthOffset;
4097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name_ref) {
4100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockName == null";
4103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (nameOffset < 0) {
4106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockNameOffset < 0";
4109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
41123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _name_base = (GLchar*)_env->GetByteArrayElements(
4113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            name_ref, (jboolean*)0);
4114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _name = _name_base + nameOffset;
4115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName(
4117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
4119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei*)_length,
4121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar*)_name
4122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_name_base) {
41263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base,
4127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_length_base) {
41303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base,
4131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
4139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2
4141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) {
4142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType;
4144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage;
4145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _lengthArray = (jarray)0;
4146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint)0;
4147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length = (GLsizei*)0;
4148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _nameArray = (jarray)0;
4150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameBufferOffset = (jint)0;
4151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name = (GLchar*)0;
4152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
4153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
4155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_length == NULL) {
4156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0);
4157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _length = (GLsizei*)(_lengthBase + _lengthBufferOffset);
4158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset);
4161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_name == NULL) {
4162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0);
4163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _name = (GLchar*)(_nameBase + _nameBufferOffset);
4164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName(
4167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
4169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)_nameRemaining,
4170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _length, _name
4171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nameArray) {
4173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _nameArray, _name, JNI_TRUE);
4174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
4176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _lengthArray, _length, JNI_TRUE);
4177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
4181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
4182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_II
4183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) {
4184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
4185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex,
4186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            GL_UNIFORM_BLOCK_NAME_LENGTH, &len);
4187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* name = (GLchar*)malloc(len);
4188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex,
4189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        len, NULL, name);
4190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = _env->NewStringUTF(name);
4191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(name);
4192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
4193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) */
4195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformBlockBinding__III
4197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint uniformBlockBinding) {
4198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformBlockBinding(
4199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
4201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockBinding
4202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawArraysInstanced ( GLenum mode, GLint first, GLsizei count, GLsizei instanceCount ) */
4206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawArraysInstanced__IIII
4208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint first, jint count, jint instanceCount) {
4209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawArraysInstanced(
4210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
4211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)first,
4212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
4214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
4218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawElementsInstanced__IIILjava_nio_Buffer_2I
4220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint instanceCount) {
4221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
4222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *indices = (GLvoid *) 0;
4225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
4227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (indices == NULL) {
4228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        indices = (GLvoid *) (_indicesBase + _bufferOffset);
4230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawElementsInstanced(
4232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
4233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
4235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)indices,
4236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
4237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, indices, JNI_FALSE);
4240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
4244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawElementsInstanced__IIIII
4246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint indicesOffset, jint instanceCount) {
4247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawElementsInstanced(
4248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
4249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
425110caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        (GLvoid *)static_cast<uintptr_t>(indicesOffset),
4252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
4253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLsync glFenceSync ( GLenum condition, GLbitfield flags ) */
4256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jlong
4257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFenceSync__II
4258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint condition, jint flags) {
4259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsync _returnValue;
4260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glFenceSync(
4261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)condition,
4262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags
4263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jlong)_returnValue;
4265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsSync ( GLsync sync ) */
4268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
4269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsSync__J
4270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync) {
4271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
4272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsSync(
4273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync
4274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
4276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSync ( GLsync sync ) */
4279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSync__J
4281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync) {
4282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSync(
4283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync
4284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLenum glClientWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
4288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
4289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClientWaitSync__JIJ
4290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
4291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum _returnValue;
4292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glClientWaitSync(
4293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
4294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags,
4295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint64)timeout
4296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
4298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
4301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glWaitSync__JIJ
4303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
4304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glWaitSync(
4305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
4306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags,
4307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint64)timeout
4308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
4312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64v__I_3JI
4314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jlongArray params_ref, jint offset) {
4315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params_base = (GLint64 *) 0;
4319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint64 *)
43363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(params_ref, (jboolean *)0);
4337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64v(
4340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
43463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
4347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
4355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64v__ILjava_nio_LongBuffer_2
4357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
435884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
435984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
436084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
43613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
436684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
436784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
436884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
436984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
437084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
437184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
43723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
43743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint64 *) (_paramsBase + _bufferOffset);
4376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64v(
4378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
438184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
438284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
438484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseLongArrayElements(_array, (jlong*)params, _exception ? JNI_ABORT : 0);
438584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
438684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
438784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
4388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
4392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSynciv__JII_3II_3II
4394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray values_ref, jint valuesOffset) {
4395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
4399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
4401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values_base = (GLint *) 0;
4402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesRemaining;
4403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values = (GLint *) 0;
4404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44056aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
44066aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
44076aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
44086aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
44096aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
44106aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
44116aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
44126aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
44136aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
44146aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
44156aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
4416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!values_ref) {
4419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "values == null";
4422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (valuesOffset < 0) {
4425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "valuesOffset < 0";
4428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _valuesRemaining = _env->GetArrayLength(values_ref) - valuesOffset;
4431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    values_base = (GLint *)
44323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(values_ref, (jboolean *)0);
4433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    values = values_base + valuesOffset;
4434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSynciv(
4436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
4437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
4440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)values
4441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (values_base) {
44453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(values_ref, (jint*)values_base,
4446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
44493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
4450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
4458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
4460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jobject length_buf, jobject values_buf) {
446184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
446284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
446384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
44643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
4465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
44663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _valuesArray = (jintArray) 0;
4467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesBufferOffset = (jint) 0;
4468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
4470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesRemaining;
4471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values = (GLint *) 0;
4472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44736aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
44746aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
44756aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
447684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!values_buf) {
447784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
447884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
447984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "values == null";
448084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
448184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
44823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    values = (GLint *)getPointer(_env, values_buf, (jarray*)&_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
44836aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
44843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
4485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
4486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (values == NULL) {
44883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valuesBase = (char *)_env->GetIntArrayElements(_valuesArray, (jboolean *) 0);
4489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        values = (GLint *) (_valuesBase + _valuesBufferOffset);
4490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSynciv(
4492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
4493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
4496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)values
4497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
449884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
449984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_valuesArray) {
450184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_valuesArray, (jint*)values, _exception ? JNI_ABORT : 0);
4502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
450484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, _exception ? JNI_ABORT : 0);
450584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
450684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
450784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
4508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
4512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64i_v__II_3JI
4514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jlongArray data_ref, jint offset) {
4515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data_base = (GLint64 *) 0;
4519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data = (GLint64 *) 0;
4521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!data_ref) {
4523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "data == null";
4526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
4535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data_base = (GLint64 *)
45363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(data_ref, (jboolean *)0);
4537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data = data_base + offset;
4538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64i_v(
4540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)data
4543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data_base) {
45473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(data_ref, (jlong*)data_base,
4548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
4556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64i_v__IILjava_nio_LongBuffer_2
4558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
455984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
456084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
456184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
45623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data = (GLint64 *) 0;
4566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
456784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!data_buf) {
456884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
456984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
457084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "data == null";
457184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
457284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
45733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLint64 *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
45753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLint64 *) (_dataBase + _bufferOffset);
4577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64i_v(
4579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)data
4582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
458384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
458484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
458684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseLongArrayElements(_array, (jlong*)data, _exception ? JNI_ABORT : 0);
458784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
458884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
458984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
4590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
4594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferParameteri64v__II_3JI
4596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jlongArray params_ref, jint offset) {
4597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params_base = (GLint64 *) 0;
4601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint64 *)
46183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(params_ref, (jboolean *)0);
4619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v(
4622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
46293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
4630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
4638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2
4640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
464184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
464284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
464384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
46443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
464984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
465084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
465184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
465284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
465384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
465484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
46553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
46573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint64 *) (_paramsBase + _bufferOffset);
4659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v(
4661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
466584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
466684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
466884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseLongArrayElements(_array, (jlong*)params, _exception ? JNI_ABORT : 0);
466984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
467084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
467184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
4672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenSamplers__I_3II
4678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers_base = (GLuint *) 0;
4683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!samplers_ref) {
4687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "samplers == null";
4690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(samplers_ref) - offset;
4699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers_base = (GLuint *)
47003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
4701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers = samplers_base + offset;
4702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenSamplers(
4704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers_base) {
47103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
4711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenSamplers__ILjava_nio_IntBuffer_2
4721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
472284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
472384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
472484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
47253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
473084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!samplers_buf) {
473184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
473284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
473384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "samplers == null";
473484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
473584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
47363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers == NULL) {
47383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        samplers = (GLuint *) (_samplersBase + _bufferOffset);
4740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenSamplers(
4742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
474584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
474684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
474884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)samplers, _exception ? JNI_ABORT : 0);
474984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
475084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
475184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
4752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSamplers__I_3II
4758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers_base = (GLuint *) 0;
4763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!samplers_ref) {
4767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "samplers == null";
4770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(samplers_ref) - offset;
4779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers_base = (GLuint *)
47803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
4781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers = samplers_base + offset;
4782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSamplers(
4784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers_base) {
47903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
4791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSamplers__ILjava_nio_IntBuffer_2
4801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
480284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
480384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
480484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
48053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
481084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!samplers_buf) {
481184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
481284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
481384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "samplers == null";
481484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
481584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
48163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers == NULL) {
48183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        samplers = (GLuint *) (_samplersBase + _bufferOffset);
4820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSamplers(
4822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
482584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
482684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
48283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)samplers, JNI_ABORT);
4829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
483084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
483184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
483284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
4833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsSampler ( GLuint sampler ) */
4836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
4837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsSampler__I
4838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler) {
4839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
4840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsSampler(
4841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler
4842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
4844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindSampler ( GLuint unit, GLuint sampler ) */
4847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindSampler__II
4849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint unit, jint sampler) {
4850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindSampler(
4851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)unit,
4852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler
4853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteri ( GLuint sampler, GLenum pname, GLint param ) */
4857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteri__III
4859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jint param) {
4860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteri(
4861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)param
4864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteriv__II_3II
4870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
4871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param_base = (GLint *) 0;
4875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param = (GLint *) 0;
4877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!param_ref) {
4879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "param == null";
4882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(param_ref) - offset;
4891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param_base = (GLint *)
48923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(param_ref, (jboolean *)0);
4893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param = param_base + offset;
4894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteriv(
4896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)param
4899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param_base) {
49033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
4904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteriv__IILjava_nio_IntBuffer_2
4914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
491584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
491684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
491784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
49183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param = (GLint *) 0;
4922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
492384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!param_buf) {
492484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
492584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
492684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "param == null";
492784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
492884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
49293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param == NULL) {
49313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        param = (GLint *) (_paramBase + _bufferOffset);
4933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteriv(
4935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)param
4938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
493984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
494084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
4941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
49423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
4943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
494484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
494584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
494684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
4947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterf ( GLuint sampler, GLenum pname, GLfloat param ) */
4950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterf__IIF
4952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloat param) {
4953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterf(
4954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat)param
4957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterfv__II_3FI
4963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray param_ref, jint offset) {
4964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param_base = (GLfloat *) 0;
4968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param = (GLfloat *) 0;
4970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!param_ref) {
4972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "param == null";
4975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(param_ref) - offset;
4984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param_base = (GLfloat *)
49853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(param_ref, (jboolean *)0);
4986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param = param_base + offset;
4987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterfv(
4989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)param
4992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param_base) {
49963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(param_ref, (jfloat*)param_base,
4997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
5005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterfv__IILjava_nio_FloatBuffer_2
5007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
500884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
500984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
501084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
50113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
5012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param = (GLfloat *) 0;
5015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
501684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!param_buf) {
501784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
501884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
501984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "param == null";
502084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
502184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
50223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    param = (GLfloat *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param == NULL) {
50243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
5025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        param = (GLfloat *) (_paramBase + _bufferOffset);
5026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterfv(
5028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
5029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)param
5031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
503284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
503384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
50353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)param, JNI_ABORT);
5036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
503784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
503884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
503984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
5043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameteriv__II_3II
5045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
5046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
5050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
5054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
5057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
50673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
5069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameteriv(
5071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
5072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
50783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
5087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2
5089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
509084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
509184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
509284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
50933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
509884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
509984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
510084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
510184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
510284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
510384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
51043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
51063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameteriv(
5110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
5111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
511484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
511584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
511784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
511884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
511984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
512084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
5125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameterfv__II_3FI
5127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray params_ref, jint offset) {
5128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params_base = (GLfloat *) 0;
5132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params = (GLfloat *) 0;
5134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
5136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
5139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLfloat *)
51493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
5150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
5151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameterfv(
5153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
5154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)params
5156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
51603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
5161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
5169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2
5171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
517284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
517384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
517484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
51753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
5176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params = (GLfloat *) 0;
5179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
518084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
518184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
518284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
518384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
518484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
518584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
51863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
51883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
5189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLfloat *) (_paramsBase + _bufferOffset);
5190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameterfv(
5192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
5193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)params
5195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
519684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
519784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
519984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
520084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
520184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
520284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribDivisor ( GLuint index, GLuint divisor ) */
5207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribDivisor__II
5209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint divisor) {
5210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribDivisor(
5211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
5212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)divisor
5213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindTransformFeedback ( GLenum target, GLuint id ) */
5217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindTransformFeedback__II
5219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint id) {
5220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindTransformFeedback(
5221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
5223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
5227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteTransformFeedbacks__I_3II
5229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
5230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
5234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
5236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
5238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
5241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
5250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
52513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
5252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
5253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteTransformFeedbacks(
5255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
5256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
5257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
52613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
5262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
5263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
5270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2
5272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
527384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
527484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
527584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
52763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
5280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
528184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!ids_buf) {
528284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
528384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
528484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "ids == null";
528584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
528684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
52873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
52893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
5291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteTransformFeedbacks(
5293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
5294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
5295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
529684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
529784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
52993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
5300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
530184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
530284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
530384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
5307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenTransformFeedbacks__I_3II
5309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
5310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
5314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
5316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
5318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
5321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
5330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
53313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
5332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
5333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenTransformFeedbacks(
5335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
5336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
5337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
53413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
5342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
5350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2
5352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
535384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
535484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
535584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
53563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
5360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
536184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!ids_buf) {
536284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
536384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
536484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "ids == null";
536584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
536684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
53673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
53693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
5371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenTransformFeedbacks(
5373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
5374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
5375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
537684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
537784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
537984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)ids, _exception ? JNI_ABORT : 0);
538084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
538184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
538284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsTransformFeedback ( GLuint id ) */
5387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
5388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsTransformFeedback__I
5389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id) {
5390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
5391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsTransformFeedback(
5392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
5393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
5395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glPauseTransformFeedback ( void ) */
5398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glPauseTransformFeedback__
5400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
5401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glPauseTransformFeedback();
5402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glResumeTransformFeedback ( void ) */
5405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glResumeTransformFeedback__
5407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
5408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glResumeTransformFeedback();
5409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
5412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2
5414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray binaryFormat_ref, jint binaryFormatOffset, jobject binary_buf) {
5415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
5419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
5421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
5422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
5423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat_base = (GLenum *) 0;
5424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatRemaining;
5425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat = (GLenum *) 0;
5426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryRemaining;
5427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
5428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
54296aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
54306aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
54316aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
54326aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
54336aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
54346aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
54356aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
54366aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
54376aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
54386aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
54396aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
5440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!binaryFormat_ref) {
5443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "binaryFormat == null";
5446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormatOffset < 0) {
5449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "binaryFormatOffset < 0";
5452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _binaryFormatRemaining = _env->GetArrayLength(binaryFormat_ref) - binaryFormatOffset;
5455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    binaryFormat_base = (GLenum *)
54563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(binaryFormat_ref, (jboolean *)0);
5457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    binaryFormat = binaryFormat_base + binaryFormatOffset;
5458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
545984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!binary_buf) {
546084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
546184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
546284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "binary == null";
546384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
546484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
54653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_binaryRemaining, &_bufferOffset);
5466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
5467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
5468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _bufferOffset);
5469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramBinary(
5471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
5472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
5474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)binaryFormat,
5475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary
5476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
5480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
5481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormat_base) {
54833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(binaryFormat_ref, (jint*)binaryFormat_base,
5484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
54873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
5488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
5496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2
5498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint bufSize, jobject length_buf, jobject binaryFormat_buf, jobject binary_buf) {
549984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
550084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
550184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
55023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
5503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
55043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _binaryFormatArray = (jintArray) 0;
5505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatBufferOffset = (jint) 0;
55063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _binaryArray = (jintArray) 0;
5507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryBufferOffset = (jint) 0;
5508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
5509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
5510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatRemaining;
5511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat = (GLenum *) 0;
5512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryRemaining;
5513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
5514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
55156aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
55166aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
55176aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
551884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!binaryFormat_buf) {
551984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
552084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
552184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "binaryFormat == null";
552284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
552384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
55243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, (jarray*)&_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
552584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!binary_buf) {
552684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
552784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
552884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "binary == null";
552984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
553084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
55313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
55326aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
55333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
5534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
5535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormat == NULL) {
55373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _binaryFormatBase = (char *)_env->GetIntArrayElements(_binaryFormatArray, (jboolean *) 0);
5538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binaryFormat = (GLenum *) (_binaryFormatBase + _binaryFormatBufferOffset);
5539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
5541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_binaryArray, (jboolean *) 0);
5542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _binaryBufferOffset);
5543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramBinary(
5545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
5546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
5548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)binaryFormat,
5549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary
5550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
555184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
555284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_binaryArray) {
555484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        releasePointer(_env, _binaryArray, binary, _exception ? JNI_FALSE : JNI_TRUE);
5555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_binaryFormatArray) {
555784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_binaryFormatArray, (jint*)binaryFormat, _exception ? JNI_ABORT : 0);
5558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
556084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, _exception ? JNI_ABORT : 0);
556184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
556284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
556384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glProgramBinary ( GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length ) */
5568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glProgramBinary__IILjava_nio_Buffer_2I
5570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint binaryFormat, jobject binary_buf, jint length) {
557184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
557284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
557384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
5574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
5575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
5578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
557984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!binary_buf) {
558084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
558184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
558284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "binary == null";
558384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
558484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
55853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
5587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
5588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _bufferOffset);
5589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glProgramBinary(
5591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
5592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)binaryFormat,
5593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary,
5594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)length
5595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
559684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
559784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
5599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, binary, JNI_FALSE);
5600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
560184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
560284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
560384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glProgramParameteri ( GLuint program, GLenum pname, GLint value ) */
5607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glProgramParameteri__III
5609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint pname, jint value) {
5610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glProgramParameteri(
5611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
5612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)value
5614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
5618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateFramebuffer__II_3II
5620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset) {
5621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments_base = (GLenum *) 0;
5625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!attachments_ref) {
5629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "attachments == null";
5632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(attachments_ref) - offset;
5641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments_base = (GLenum *)
56423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
5643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments = attachments_base + offset;
5644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateFramebuffer(
5646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments
5649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments_base) {
56533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
5654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
5655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
5662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2
5664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf) {
566584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
566684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
566784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
56683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
567384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!attachments_buf) {
567484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
567584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
567684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "attachments == null";
567784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
567884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
56793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments == NULL) {
56813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
5683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateFramebuffer(
5685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments
5688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
568984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
569084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
56923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
5693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
569484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
569584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
569684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
5700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateSubFramebuffer__II_3IIIIII
5702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset, jint x, jint y, jint width, jint height) {
5703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments_base = (GLenum *) 0;
5707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!attachments_ref) {
5711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "attachments == null";
5714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(attachments_ref) - offset;
5723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments_base = (GLenum *)
57243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
5725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments = attachments_base + offset;
5726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateSubFramebuffer(
5728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments,
5731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
5732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
5733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments_base) {
57393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
5740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
5741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
5748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII
5750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf, jint x, jint y, jint width, jint height) {
575184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
575284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
575384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
57543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
575984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!attachments_buf) {
576084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
576184cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
576284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "attachments == null";
576384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
576484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
57653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments == NULL) {
57673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
5769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateSubFramebuffer(
5771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments,
5774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
5775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
5776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
577984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
578084cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
57823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
5783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
578484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
578584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
578684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
5787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexStorage2D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height ) */
5790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexStorage2D__IIIII
5792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height) {
5793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexStorage2D(
5794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)levels,
5796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexStorage3D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth ) */
5803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexStorage3D__IIIIII
5805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height, jint depth) {
5806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexStorage3D(
5807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)levels,
5809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
5812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth
5813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInternalformativ__IIII_3II
5819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jintArray params_ref, jint offset) {
5820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
5824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
5828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
5831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
58413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
5843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInternalformativ(
5845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
58543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInternalformativ__IIIILjava_nio_IntBuffer_2
5865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jobject params_buf) {
586684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    jint _exception = 0;
586784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionType = NULL;
586884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    const char * _exceptionMessage = NULL;
58693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
587484cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (!params_buf) {
587584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exception = 1;
587684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionType = "java/lang/IllegalArgumentException";
587784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _exceptionMessage = "params == null";
587884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        goto exit;
587984cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
58803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
58823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInternalformativ(
5886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
589284cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy
589384cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guyexit:
5894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
589584cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
589684cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    }
589784cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy    if (_exception) {
589884cac20dfdff35932901e978e6b6d3da843a2fa7Romain Guy        jniThrowException(_env, _exceptionType, _exceptionMessage);
5899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
590268981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos/* void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint offset ) */
590368981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballosstatic void
590468981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballosandroid_glReadPixels__IIIIIII
590568981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos  (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jint offset) {
590668981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos    glReadPixels(
590768981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLint)x,
590868981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLint)y,
590968981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLsizei)width,
591068981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLsizei)height,
591168981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLenum)format,
591268981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLenum)type,
591368981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        reinterpret_cast<GLvoid *>(offset)
591468981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos    );
591568981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos}
591668981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos
5917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic const char *classPathName = "android/opengl/GLES30";
5918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
591976f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = {
5920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"_nativeClassInit", "()V", (void*)nativeClassInit },
5921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glReadBuffer", "(I)V", (void *) android_glReadBuffer__I },
5922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawRangeElements", "(IIIIILjava/nio/Buffer;)V", (void *) android_glDrawRangeElements__IIIIILjava_nio_Buffer_2 },
5923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawRangeElements", "(IIIIII)V", (void *) android_glDrawRangeElements__IIIIII },
5924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexImage3D", "(IIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2 },
5925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexImage3D", "(IIIIIIIIII)V", (void *) android_glTexImage3D__IIIIIIIIII },
5926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glTexSubImage3D__IIIIIIIIIII },
5928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCopyTexSubImage3D", "(IIIIIIIII)V", (void *) android_glCopyTexSubImage3D__IIIIIIIII },
5929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexImage3D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2 },
5930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexImage3D", "(IIIIIIIII)V", (void *) android_glCompressedTexImage3D__IIIIIIIII },
5931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIII },
5933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenQueries", "(I[II)V", (void *) android_glGenQueries__I_3II },
5934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenQueries__ILjava_nio_IntBuffer_2 },
5935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteQueries", "(I[II)V", (void *) android_glDeleteQueries__I_3II },
5936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteQueries__ILjava_nio_IntBuffer_2 },
5937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsQuery", "(I)Z", (void *) android_glIsQuery__I },
5938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBeginQuery", "(II)V", (void *) android_glBeginQuery__II },
5939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glEndQuery", "(I)V", (void *) android_glEndQuery__I },
5940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryiv", "(II[II)V", (void *) android_glGetQueryiv__II_3II },
5941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryiv__IILjava_nio_IntBuffer_2 },
5942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryObjectuiv", "(II[II)V", (void *) android_glGetQueryObjectuiv__II_3II },
5943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryObjectuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2 },
5944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUnmapBuffer", "(I)Z", (void *) android_glUnmapBuffer__I },
5945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferPointerv", "(II)Ljava/nio/Buffer;", (void *) android_glGetBufferPointerv__II },
5946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawBuffers", "(I[II)V", (void *) android_glDrawBuffers__I_3II },
5947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDrawBuffers__ILjava_nio_IntBuffer_2 },
5948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x3fv__IIZ_3FI },
5949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2 },
5950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x2fv__IIZ_3FI },
5951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2 },
5952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x4fv__IIZ_3FI },
5953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2 },
5954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x2fv__IIZ_3FI },
5955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2 },
5956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x4fv__IIZ_3FI },
5957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2 },
5958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x3fv__IIZ_3FI },
5959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2 },
5960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBlitFramebuffer", "(IIIIIIIIII)V", (void *) android_glBlitFramebuffer__IIIIIIIIII },
5961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glRenderbufferStorageMultisample", "(IIIII)V", (void *) android_glRenderbufferStorageMultisample__IIIII },
5962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFramebufferTextureLayer", "(IIIII)V", (void *) android_glFramebufferTextureLayer__IIIII },
5963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glMapBufferRange", "(IIII)Ljava/nio/Buffer;", (void *) android_glMapBufferRange__IIII },
5964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFlushMappedBufferRange", "(III)V", (void *) android_glFlushMappedBufferRange__III },
5965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindVertexArray", "(I)V", (void *) android_glBindVertexArray__I },
5966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteVertexArrays", "(I[II)V", (void *) android_glDeleteVertexArrays__I_3II },
5967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2 },
5968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenVertexArrays", "(I[II)V", (void *) android_glGenVertexArrays__I_3II },
5969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenVertexArrays__ILjava_nio_IntBuffer_2 },
5970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsVertexArray", "(I)Z", (void *) android_glIsVertexArray__I },
5971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetIntegeri_v", "(II[II)V", (void *) android_glGetIntegeri_v__II_3II },
5972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetIntegeri_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetIntegeri_v__IILjava_nio_IntBuffer_2 },
5973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBeginTransformFeedback", "(I)V", (void *) android_glBeginTransformFeedback__I },
5974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glEndTransformFeedback", "()V", (void *) android_glEndTransformFeedback__ },
5975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindBufferRange", "(IIIII)V", (void *) android_glBindBufferRange__IIIII },
5976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindBufferBase", "(III)V", (void *) android_glBindBufferBase__III },
5977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTransformFeedbackVaryings", "(I[Ljava/lang/String;I)V", (void *) android_glTransformFeedbackVaryings },
5978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(III[II[II[II[BI)V", (void *) android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI },
5979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V", (void *) android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B },
598059fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos{"glGetTransformFeedbackVarying", "(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)V", (void *) android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2 },
5981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(II[II[II)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying1 },
5982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying2 },
5983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribIPointerBounds", "(IIIILjava/nio/Buffer;I)V", (void *) android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I },
5984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribIPointer", "(IIIII)V", (void *) android_glVertexAttribIPointer__IIIII },
5985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIiv", "(II[II)V", (void *) android_glGetVertexAttribIiv__II_3II },
5986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2 },
5987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIuiv", "(II[II)V", (void *) android_glGetVertexAttribIuiv__II_3II },
5988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2 },
5989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4i", "(IIIII)V", (void *) android_glVertexAttribI4i__IIIII },
5990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4ui", "(IIIII)V", (void *) android_glVertexAttribI4ui__IIIII },
5991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4iv", "(I[II)V", (void *) android_glVertexAttribI4iv__I_3II },
5992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4iv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2 },
5993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4uiv", "(I[II)V", (void *) android_glVertexAttribI4uiv__I_3II },
5994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4uiv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2 },
5995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformuiv", "(II[II)V", (void *) android_glGetUniformuiv__II_3II },
5996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetUniformuiv__IILjava_nio_IntBuffer_2 },
5997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetFragDataLocation", "(ILjava/lang/String;)I", (void *) android_glGetFragDataLocation__ILjava_lang_String_2 },
5998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1ui", "(II)V", (void *) android_glUniform1ui__II },
5999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2ui", "(III)V", (void *) android_glUniform2ui__III },
6000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3ui", "(IIII)V", (void *) android_glUniform3ui__IIII },
6001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4ui", "(IIIII)V", (void *) android_glUniform4ui__IIIII },
6002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1uiv", "(II[II)V", (void *) android_glUniform1uiv__II_3II },
6003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform1uiv__IILjava_nio_IntBuffer_2 },
6004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2uiv", "(II[II)V", (void *) android_glUniform2uiv__II_3II },
6005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform2uiv__IILjava_nio_IntBuffer_2 },
6006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3uiv", "(II[II)V", (void *) android_glUniform3uiv__II_3II },
6007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform3uiv__IILjava_nio_IntBuffer_2 },
6008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4uiv", "(II[II)V", (void *) android_glUniform4uiv__II_3II },
6009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform4uiv__IILjava_nio_IntBuffer_2 },
6010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferiv", "(II[II)V", (void *) android_glClearBufferiv__II_3II },
6011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferiv__IILjava_nio_IntBuffer_2 },
6012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferuiv", "(II[II)V", (void *) android_glClearBufferuiv__II_3II },
6013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferuiv__IILjava_nio_IntBuffer_2 },
6014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfv", "(II[FI)V", (void *) android_glClearBufferfv__II_3FI },
6015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glClearBufferfv__IILjava_nio_FloatBuffer_2 },
6016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfi", "(IIFI)V", (void *) android_glClearBufferfi__IIFI },
6017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetStringi", "(II)Ljava/lang/String;", (void *) android_glGetStringi__II },
6018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCopyBufferSubData", "(IIIII)V", (void *) android_glCopyBufferSubData__IIIII },
6019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformIndices", "(I[Ljava/lang/String;[II)V", (void *) android_glGetUniformIndices_array },
6020d877efe3b12afdd84f06c180369f9d7399858f6eJesse Hall{"glGetUniformIndices", "(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V", (void *) android_glGetUniformIndices_buffer },
6021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformsiv", "(II[III[II)V", (void *) android_glGetActiveUniformsiv__II_3III_3II },
6022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformsiv", "(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2 },
6023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformBlockIndex", "(ILjava/lang/String;)I", (void *) android_glGetUniformBlockIndex__ILjava_lang_String_2 },
6024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockiv", "(III[II)V", (void *) android_glGetActiveUniformBlockiv__III_3II },
6025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2 },
6026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(III[II[BI)V", (void *) android_glGetActiveUniformBlockName_III_3II_3BI },
6027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(IILjava/nio/Buffer;Ljava/nio/Buffer;)V", (void *) android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 },
6028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(II)Ljava/lang/String;", (void *) android_glGetActiveUniformBlockName_II },
6029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformBlockBinding", "(III)V", (void *) android_glUniformBlockBinding__III },
6030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawArraysInstanced", "(IIII)V", (void *) android_glDrawArraysInstanced__IIII },
6031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawElementsInstanced", "(IIILjava/nio/Buffer;I)V", (void *) android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I },
6032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawElementsInstanced", "(IIIII)V", (void *) android_glDrawElementsInstanced__IIIII },
6033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFenceSync", "(II)J", (void *) android_glFenceSync__II },
6034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsSync", "(J)Z", (void *) android_glIsSync__J },
6035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSync", "(J)V", (void *) android_glDeleteSync__J },
6036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClientWaitSync", "(JIJ)I", (void *) android_glClientWaitSync__JIJ },
6037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glWaitSync", "(JIJ)V", (void *) android_glWaitSync__JIJ },
6038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64v", "(I[JI)V", (void *) android_glGetInteger64v__I_3JI },
6039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64v", "(ILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64v__ILjava_nio_LongBuffer_2 },
6040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSynciv", "(JII[II[II)V", (void *) android_glGetSynciv__JII_3II_3II },
6041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSynciv", "(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
6042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64i_v", "(II[JI)V", (void *) android_glGetInteger64i_v__II_3JI },
6043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64i_v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64i_v__IILjava_nio_LongBuffer_2 },
6044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferParameteri64v", "(II[JI)V", (void *) android_glGetBufferParameteri64v__II_3JI },
6045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferParameteri64v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2 },
6046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenSamplers", "(I[II)V", (void *) android_glGenSamplers__I_3II },
6047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenSamplers__ILjava_nio_IntBuffer_2 },
6048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSamplers", "(I[II)V", (void *) android_glDeleteSamplers__I_3II },
6049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteSamplers__ILjava_nio_IntBuffer_2 },
6050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsSampler", "(I)Z", (void *) android_glIsSampler__I },
6051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindSampler", "(II)V", (void *) android_glBindSampler__II },
6052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteri", "(III)V", (void *) android_glSamplerParameteri__III },
6053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteriv", "(II[II)V", (void *) android_glSamplerParameteriv__II_3II },
6054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameteriv__IILjava_nio_IntBuffer_2 },
6055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterf", "(IIF)V", (void *) android_glSamplerParameterf__IIF },
6056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterfv", "(II[FI)V", (void *) android_glSamplerParameterfv__II_3FI },
6057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
6058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameteriv", "(II[II)V", (void *) android_glGetSamplerParameteriv__II_3II },
6059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2 },
6060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameterfv", "(II[FI)V", (void *) android_glGetSamplerParameterfv__II_3FI },
6061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
6062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribDivisor", "(II)V", (void *) android_glVertexAttribDivisor__II },
6063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindTransformFeedback", "(II)V", (void *) android_glBindTransformFeedback__II },
6064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteTransformFeedbacks", "(I[II)V", (void *) android_glDeleteTransformFeedbacks__I_3II },
6065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2 },
6066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenTransformFeedbacks", "(I[II)V", (void *) android_glGenTransformFeedbacks__I_3II },
6067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2 },
6068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsTransformFeedback", "(I)Z", (void *) android_glIsTransformFeedback__I },
6069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glPauseTransformFeedback", "()V", (void *) android_glPauseTransformFeedback__ },
6070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glResumeTransformFeedback", "()V", (void *) android_glResumeTransformFeedback__ },
6071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetProgramBinary", "(II[II[IILjava/nio/Buffer;)V", (void *) android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2 },
6072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetProgramBinary", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;)V", (void *) android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2 },
6073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glProgramBinary", "(IILjava/nio/Buffer;I)V", (void *) android_glProgramBinary__IILjava_nio_Buffer_2I },
6074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glProgramParameteri", "(III)V", (void *) android_glProgramParameteri__III },
6075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateFramebuffer", "(II[II)V", (void *) android_glInvalidateFramebuffer__II_3II },
6076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateFramebuffer", "(IILjava/nio/IntBuffer;)V", (void *) android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2 },
6077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateSubFramebuffer", "(II[IIIIII)V", (void *) android_glInvalidateSubFramebuffer__II_3IIIIII },
6078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateSubFramebuffer", "(IILjava/nio/IntBuffer;IIII)V", (void *) android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII },
6079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexStorage2D", "(IIIII)V", (void *) android_glTexStorage2D__IIIII },
6080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexStorage3D", "(IIIIII)V", (void *) android_glTexStorage3D__IIIIII },
6081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInternalformativ", "(IIII[II)V", (void *) android_glGetInternalformativ__IIII_3II },
6082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInternalformativ", "(IIIILjava/nio/IntBuffer;)V", (void *) android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2 },
608368981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos{"glReadPixels", "(IIIIIII)V", (void *) android_glReadPixels__IIIIIII },
6084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall};
6085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
6086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallint register_android_opengl_jni_GLES30(JNIEnv *_env)
6087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
6088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int err;
6089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
6090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return err;
6091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
6092