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-but-set-variable"
22bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe#pragma GCC diagnostic ignored "-Wunused-function"
23bfe6333c3cf529600f41f14e3b8c5846e632c9a2Andreas Gampe
24d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <GLES3/gl3.h>
25d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <GLES3/gl3ext.h>
26d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
279626f8203a8c222b8960a49cdc66d540fdb688b0Jesse Hall#include <jni.h>
289626f8203a8c222b8960a49cdc66d540fdb688b0Jesse Hall#include <JNIHelp.h>
29d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <android_runtime/AndroidRuntime.h>
30d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <utils/misc.h>
31d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#include <assert.h>
32d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
33d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic int initialized = 0;
34d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
35d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jclass nioAccessClass;
36d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jclass bufferClass;
37d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jmethodID getBasePointerID;
38d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jmethodID getBaseArrayID;
39d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jmethodID getBaseArrayOffsetID;
40d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jfieldID positionID;
41d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jfieldID limitID;
42d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jfieldID elementSizeShiftID;
43d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
45d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* special calls implemented in Android's GLES wrapper used to more
46d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * efficiently bound-check passed arrays */
47d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallextern "C" {
48d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_VERSION_ES_CM_1_1
49d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
50d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        const GLvoid *ptr, GLsizei count);
51d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
52d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        const GLvoid *pointer, GLsizei count);
53d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
54d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
55d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
56d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
57d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
58d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
59d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
60d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
61d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallGL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
62d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count);
63d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
64d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_ES_VERSION_2_0
65d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
66d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
67d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
68d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
69d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
70d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_ES_VERSION_3_0
71d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
72d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei stride, const GLvoid *pointer, GLsizei count) {
73d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointer(indx, size, type, stride, pointer);
74d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
75d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
76d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
77d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
78d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* Cache method IDs each time the class is loaded. */
79d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
80d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
81d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallnativeClassInit(JNIEnv *_env, jclass glImplClass)
82d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
83d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
84d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
85d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
86d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
87d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
88d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
89d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
90d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            "getBasePointer", "(Ljava/nio/Buffer;)J");
91d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
92d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
93d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
94d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
95d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
96d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    positionID = _env->GetFieldID(bufferClass, "position", "I");
97d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    limitID = _env->GetFieldID(bufferClass, "limit", "I");
98d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    elementSizeShiftID =
99d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void *
103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint position;
106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint limit;
107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint elementSizeShift;
108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jlong pointer;
109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    position = _env->GetIntField(buffer, positionID);
111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    limit = _env->GetIntField(buffer, limitID);
112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    *remaining = (limit - position) << elementSizeShift;
114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    pointer = _env->CallStaticLongMethod(nioAccessClass,
115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            getBasePointerID, buffer);
116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pointer != 0L) {
117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        *array = NULL;
11801c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        return reinterpret_cast<void*>(pointer);
119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            getBaseArrayID, buffer);
123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    *offset = _env->CallStaticIntMethod(nioAccessClass,
124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            getBaseArrayOffsetID, buffer);
125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return NULL;
127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayGetter {
1303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
1323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetByteArrayElements(array, is_copy);
1333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayGetter {
1363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
1383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetBooleanArrayElements(array, is_copy);
1393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayGetter {
1423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
1443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetCharArrayElements(array, is_copy);
1453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayGetter {
1483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
1503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetShortArrayElements(array, is_copy);
1513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayGetter {
1543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
1563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetIntArrayElements(array, is_copy);
1573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayGetter {
1603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
1623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetLongArrayElements(array, is_copy);
1633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayGetter {
1663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
1683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetFloatArrayElements(array, is_copy);
1693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayGetter {
1723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
1743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        return _env->GetDoubleArrayElements(array, is_copy);
1753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename ARRAYGETTER>
1793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void*
1803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchigetArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
1813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    return ARRAYGETTER::Get(_env, array, is_copy);
1823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
1833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
1843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ByteArrayReleaser {
1853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
1873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
1883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass BooleanArrayReleaser {
1913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
1933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
1943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
1953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
1963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass CharArrayReleaser {
1973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
1983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
1993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
2003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass ShortArrayReleaser {
2033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
2053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
2063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass IntArrayReleaser {
2093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
2113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
2123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass LongArrayReleaser {
2153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
2173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
2183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass FloatArrayReleaser {
2213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
2233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
2243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchiclass DoubleArrayReleaser {
2273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchipublic:
2283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
2293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
2303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    }
2313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi};
2323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
2333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
2343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchistatic void
2353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi YamauchireleaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
2363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ARRAYRELEASER::Release(_env, array, data, commit);
2373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi}
2383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi
239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _env->ReleasePrimitiveArrayCritical(array, data,
243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                       commit ? 0 : JNI_ABORT);
244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void *
247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse HallgetDirectBufferPointer(JNIEnv *_env, jobject buffer) {
248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jint position = _env->GetIntField(buffer, positionID);
251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        buf += position << elementSizeShift;
253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    } else {
254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException",
255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                          "Must use a native order direct Buffer");
256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (void*) buf;
258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall// --------------------------------------------------------------------------
261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/*
263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * returns the number of values glGet returns for a given pname.
264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall *
265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * The code below is written such that pnames requiring only one values
266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * are the default (and are not explicitely tested for). This makes the
267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * checking code much shorter/readable/efficient.
268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall *
269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * This means that unknown pnames (e.g.: extensions) will default to 1. If
270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * that unknown pname needs more than 1 value, then the validation check
271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall * is incomplete and the app may crash if it passed the wrong number params.
272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall */
273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic int getNeededCount(GLint pname) {
274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int needed = 1;
275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_ES_VERSION_2_0
276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // GLES 2.x pnames
277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    switch (pname) {
278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 2;
281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_BLEND_COLOR:
284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_CLEAR_VALUE:
285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_WRITEMASK:
286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SCISSOR_BOX:
287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_VIEWPORT:
288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 4;
289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SHADER_BINARY_FORMATS:
296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#ifdef GL_VERSION_ES_CM_1_1
302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // GLES 1.x pnames
303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    switch (pname) {
304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_LINE_WIDTH_RANGE:
305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_ALIASED_POINT_SIZE_RANGE:
306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_DEPTH_RANGE:
307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SMOOTH_LINE_WIDTH_RANGE:
308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SMOOTH_POINT_SIZE_RANGE:
309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 2;
310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_CURRENT_NORMAL:
313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_POINT_DISTANCE_ATTENUATION:
314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 3;
315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_CLEAR_VALUE:
318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COLOR_WRITEMASK:
319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_CURRENT_COLOR:
320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_CURRENT_TEXTURE_COORDS:
321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_FOG_COLOR:
322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_LIGHT_MODEL_AMBIENT:
323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_SCISSOR_BOX:
324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_VIEWPORT:
325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 4;
326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_MODELVIEW_MATRIX:
329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_PROJECTION_MATRIX:
330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_TEXTURE_MATRIX:
331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            needed = 16;
332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        case GL_COMPRESSED_TEXTURE_FORMATS:
335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            break;
337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall#endif
339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return needed;
340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallget
346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    CTYPE *params_base = (CTYPE *) 0;
351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    CTYPE *params = (CTYPE *) 0;
353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int _needed = 0;
354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _needed = getNeededCount(pname);
369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // if we didn't find this pname, we just assume the user passed
370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // an array of the right size -- this might happen with extensions
371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // or if we forget an enum here.
372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_remaining < _needed) {
373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "length - offset < needed";
376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
3793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env, params_ref, (jboolean *)0);
380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GET(
383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (CTYPE *)params
385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
3893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
3903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, params_ref, params_base, !_exception);
391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchitemplate <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
3993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi          typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallgetarray
402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
4063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    JTYPEARRAY _array = (JTYPEARRAY) 0;
407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    CTYPE *params = (CTYPE *) 0;
410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int _needed = 0;
411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
413cee5198e7199fcbb131ff0d30165fb1d5c0107cfAndy McFadden    _remaining /= sizeof(CTYPE);    // convert from bytes to item count
414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _needed = getNeededCount(pname);
415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // if we didn't find this pname, we just assume the user passed
416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // an array of the right size -- this might happen with extensions
417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    // or if we forget an enum here.
418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_needed>0 && _remaining < _needed) {
419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "remaining() < needed";
422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
4253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
4263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (jboolean *) 0);
427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (CTYPE *) (_paramsBase + _bufferOffset);
428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GET(
430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (CTYPE *)params
432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
4373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall// --------------------------------------------------------------------------
445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glReadBuffer ( GLenum mode ) */
446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glReadBuffer__I
448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode) {
449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glReadBuffer(
450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode
451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ) */
455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawRangeElements__IIIIILjava_nio_Buffer_2
457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jobject indices_buf) {
458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *indices = (GLvoid *) 0;
462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (indices == NULL) {
465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        indices = (GLvoid *) (_indicesBase + _bufferOffset);
467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawRangeElements(
469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)start,
471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)end,
472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)indices
475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, indices, JNI_FALSE);
478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLsizei offset ) */
482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawRangeElements__IIIIII
484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jint offset) {
485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawRangeElements(
486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)start,
488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)end,
489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
49101c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2
498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pixels = (GLvoid *) 0;
503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5046aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (pixels_buf) {
5056aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5066aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
5076aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (pixels_buf && pixels == NULL) {
508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexImage3D(
512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)internalformat,
515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pixels
522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, pixels, JNI_FALSE);
525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei offset ) */
529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexImage3D__IIIIIIIIII
531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexImage3D(
533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)internalformat,
536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
54201c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pixels = (GLvoid *) 0;
554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pixels == NULL) {
557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexSubImage3D(
561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pixels
572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, pixels, JNI_FALSE);
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, GLsizei offset ) */
579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexSubImage3D__IIIIIIIIIII
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, jint offset) {
582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexSubImage3D(
583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
59301c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCopyTexSubImage3D__IIIIIIIII
600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint x, jint y, jint width, jint height) {
601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCopyTexSubImage3D(
602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ) */
615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2
617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jobject data_buf) {
618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *data = (GLvoid *) 0;
622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
6233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLvoid *) (_dataBase + _bufferOffset);
627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexImage3D(
629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)data
638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, data, JNI_FALSE);
641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei offset ) */
645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexImage3D__IIIIIIIII
647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jint offset) {
648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexImage3D(
649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
65701c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *data = (GLvoid *) 0;
669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
6703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLvoid *) (_dataBase + _bufferOffset);
674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexSubImage3D(
676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)data
687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, data, JNI_FALSE);
690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexSubImage3D__IIIIIIIIIII
696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexSubImage3D(
698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
70801c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenQueries ( GLsizei n, GLuint *ids ) */
713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenQueries__I_3II
715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
7373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenQueries(
741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
7473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenQueries ( GLsizei n, GLuint *ids ) */
756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenQueries__ILjava_nio_IntBuffer_2
758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
7593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
7643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
7663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenQueries(
770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
7743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, 0);
775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteQueries__I_3II
781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
8033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteQueries(
807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
8133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteQueries__ILjava_nio_IntBuffer_2
824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
8253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
8303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
8323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteQueries(
836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
8403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsQuery ( GLuint id ) */
845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsQuery__I
847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id) {
848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsQuery(
850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBeginQuery ( GLenum target, GLuint id ) */
856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBeginQuery__II
858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint id) {
859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBeginQuery(
860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glEndQuery ( GLenum target ) */
866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glEndQuery__I
868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target) {
869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glEndQuery(
870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target
871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryiv__II_3II
877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
8993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryiv(
903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
9103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryiv__IILjava_nio_IntBuffer_2
921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
9223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
9273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
9293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryiv(
933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
9383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryObjectuiv__II_3II
945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id, jint pname, jintArray params_ref, jint offset) {
946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
9673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryObjectuiv(
971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id,
972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
9783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2
989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id, jint pname, jobject params_buf) {
9903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
9953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
9973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryObjectuiv(
1001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id,
1002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
1003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
1004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
10063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
1007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glUnmapBuffer ( GLenum target ) */
1011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
1012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUnmapBuffer__I
1013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target) {
1014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
1015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glUnmapBuffer(
1016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target
1017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
1019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferPointerv ( GLenum target, GLenum pname, GLvoid** params ) */
1022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jobject
1023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferPointerv__II
1024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname) {
1025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 _mapLength;
1026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid* _p;
1027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v((GLenum)target, GL_BUFFER_MAP_LENGTH, &_mapLength);
1028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferPointerv((GLenum)target, (GLenum)pname, &_p);
1029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _env->NewDirectByteBuffer(_p, _mapLength);
1030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
1033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawBuffers__I_3II
1035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray bufs_ref, jint offset) {
1036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs_base = (GLenum *) 0;
1040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs = (GLenum *) 0;
1042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!bufs_ref) {
1044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "bufs == null";
1047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(bufs_ref) - offset;
1056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufs_base = (GLenum *)
10573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(bufs_ref, (jboolean *)0);
1058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufs = bufs_base + offset;
1059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawBuffers(
1061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)bufs
1063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (bufs_base) {
10673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(bufs_ref, (jint*)bufs_base,
1068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
1076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawBuffers__ILjava_nio_IntBuffer_2
1078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject bufs_buf) {
10793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs = (GLenum *) 0;
1083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
10843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    bufs = (GLenum *)getPointer(_env, bufs_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (bufs == NULL) {
10863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _bufsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        bufs = (GLenum *) (_bufsBase + _bufferOffset);
1088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawBuffers(
1090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)bufs
1092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
10943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)bufs, JNI_ABORT);
1095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x3fv__IIZ_3FI
1101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
11233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x3fv(
1127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
11353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2
1146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
11473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
11523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
11543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x3fv(
1158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
11643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x2fv__IIZ_3FI
1171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
11933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x2fv(
1197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
12053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2
1216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
12173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
12223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
12243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x2fv(
1228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
12343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x4fv__IIZ_3FI
1241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
12633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x4fv(
1267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
12753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2
1286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
12873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
12923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
12943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x4fv(
1298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
13043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x2fv__IIZ_3FI
1311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
13333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x2fv(
1337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
13453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2
1356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
13573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
13623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
13643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x2fv(
1368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
13743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x4fv__IIZ_3FI
1381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
14033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x4fv(
1407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
14153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2
1426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
14273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
14323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
14343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x4fv(
1438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
14443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x3fv__IIZ_3FI
1451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
14733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x3fv(
1477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
14853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2
1496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
14973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
15023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
15043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x3fv(
1508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
15143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBlitFramebuffer ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter ) */
1519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBlitFramebuffer__IIIIIIIIII
1521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
1522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBlitFramebuffer(
1523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcX0,
1524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcY0,
1525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcX1,
1526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcY1,
1527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstX0,
1528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstY0,
1529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstX1,
1530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstY1,
1531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)mask,
1532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)filter
1533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glRenderbufferStorageMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height ) */
1537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glRenderbufferStorageMultisample__IIIII
1539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height) {
1540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glRenderbufferStorageMultisample(
1541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)samples,
1543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
1544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
1545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
1546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glFramebufferTextureLayer ( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ) */
1550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFramebufferTextureLayer__IIIII
1552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level, jint layer) {
1553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glFramebufferTextureLayer(
1554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)attachment,
1556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)texture,
1557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
1558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)layer
1559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLvoid * glMapBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) */
1563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jobject
1564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glMapBufferRange__IIII
1565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint offset, jint length, jint access) {
1566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid* _p = glMapBufferRange((GLenum)target,
1567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            (GLintptr)offset, (GLsizeiptr)length, (GLbitfield)access);
1568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jobject _buf = (jobject)0;
1569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_p) {
1570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _buf = _env->NewDirectByteBuffer(_p, length);
1571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _buf;
1573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glFlushMappedBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length ) */
1576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFlushMappedBufferRange__III
1578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint offset, jint length) {
1579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glFlushMappedBufferRange(
1580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)offset,
1582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)length
1583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindVertexArray ( GLuint array ) */
1587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindVertexArray__I
1589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint array) {
1590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindVertexArray(
1591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)array
1592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteVertexArrays__I_3II
1598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays_base = (GLuint *) 0;
1603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!arrays_ref) {
1607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "arrays == null";
1610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(arrays_ref) - offset;
1619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays_base = (GLuint *)
16203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
1621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays = arrays_base + offset;
1622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteVertexArrays(
1624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays_base) {
16303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
1631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteVertexArrays__ILjava_nio_IntBuffer_2
1641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
16423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
16473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays == NULL) {
16493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        arrays = (GLuint *) (_arraysBase + _bufferOffset);
1651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteVertexArrays(
1653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
16573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)arrays, JNI_ABORT);
1658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenVertexArrays__I_3II
1664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays_base = (GLuint *) 0;
1669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!arrays_ref) {
1673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "arrays == null";
1676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(arrays_ref) - offset;
1685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays_base = (GLuint *)
16863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
1687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays = arrays_base + offset;
1688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenVertexArrays(
1690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays_base) {
16963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
1697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenVertexArrays__ILjava_nio_IntBuffer_2
1707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
17083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
17133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays == NULL) {
17153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        arrays = (GLuint *) (_arraysBase + _bufferOffset);
1717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenVertexArrays(
1719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
17233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)arrays, 0);
1724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsVertexArray ( GLuint array ) */
1728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
1729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsVertexArray__I
1730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint array) {
1731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
1732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsVertexArray(
1733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)array
1734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
1736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetIntegeri_v__II_3II
1741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jintArray data_ref, jint offset) {
1742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data_base = (GLint *) 0;
1746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data = (GLint *) 0;
1748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!data_ref) {
1750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "data == null";
1753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
1762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data_base = (GLint *)
17633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(data_ref, (jboolean *)0);
1764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data = data_base + offset;
1765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetIntegeri_v(
1767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)data
1770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data_base) {
17743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(data_ref, (jint*)data_base,
1775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetIntegeri_v__IILjava_nio_IntBuffer_2
1785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
17863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data = (GLint *) 0;
1790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
17913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLint *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
17933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLint *) (_dataBase + _bufferOffset);
1795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetIntegeri_v(
1797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)data
1800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
18023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)data, 0);
1803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBeginTransformFeedback ( GLenum primitiveMode ) */
1807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBeginTransformFeedback__I
1809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint primitiveMode) {
1810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBeginTransformFeedback(
1811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)primitiveMode
1812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glEndTransformFeedback ( void ) */
1816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glEndTransformFeedback__
1818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
1819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glEndTransformFeedback();
1820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindBufferRange ( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
1823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindBufferRange__IIIII
1825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer, jint offset, jint size) {
1826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindBufferRange(
1827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)buffer,
1830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)offset,
1831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)size
1832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindBufferBase ( GLenum target, GLuint index, GLuint buffer ) */
1836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindBufferBase__III
1838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer) {
1839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindBufferBase(
1840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)buffer
1843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode ) */
1847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
1848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
1849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTransformFeedbackVaryings
1850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray varyings_ref, jint bufferMode) {
1851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
1853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
1854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0, _i;
1855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _varyings = NULL;
1856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _varying = NULL;
1857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!varyings_ref) {
1859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "varyings == null";
1862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(varyings_ref);
1866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _varyings = (const char**)calloc(_count, sizeof(const char*));
1867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
1868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
1869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_varying) {
1870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
1871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
1872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null varyings element";
1873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
1874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
1875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _varyings[_i] = _env->GetStringUTFChars(_varying, 0);
1876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTransformFeedbackVaryings(program, _count, _varyings, bufferMode);
1879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
1882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_varyings[_i]) {
1883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
1884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_varying) {
1885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_varying, _varyings[_i]);
1886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
1887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
1888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_varyings);
1890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
1896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
1898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
1899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
1901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
1902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
1903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
1904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
1905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size_base = (GLint *) 0;
1906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
1907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
1908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type_base = (GLenum *) 0;
1909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
1910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
1911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char *name_base = (char *) 0;
1912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
1913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char *name = (char *) 0;
1914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
19156aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
19166aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
19176aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
19186aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
19196aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
19206aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
19216aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
19226aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
19236aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
19246aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
19256aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
1926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!size_ref) {
1929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "size == null";
1932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (sizeOffset < 0) {
1935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "sizeOffset < 0";
1938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
1941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size_base = (GLint *)
19423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
1943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size = size_base + sizeOffset;
1944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!type_ref) {
1946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "type == null";
1949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (typeOffset < 0) {
1952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "typeOffset < 0";
1955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
1958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type_base = (GLenum *)
19593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
1960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type = type_base + typeOffset;
1961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name_ref) {
1963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "name == null";
1966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (nameOffset < 0) {
1969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "nameOffset < 0";
1972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
1975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    name_base = (char *)
19763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetByteArrayElements(name_ref, (jboolean *)0);
1977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    name = name_base + nameOffset;
1978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
1980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
1981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufsize,
1983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
1984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
1985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
1986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)name
1987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (name_base) {
19913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
1992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type_base) {
19953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
1996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size_base) {
19993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
2000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
20033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
2004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
2014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
201559fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "deprecated");
201659fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos}
201759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos
201859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
201959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballosstatic void
202059fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballosandroid_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2
202159fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jobject name_buf) {
20223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
2023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
20243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
2025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeBufferOffset = (jint) 0;
20263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
2027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeBufferOffset = (jint) 0;
202859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jbyteArray _nameArray = (jbyteArray)0;
202959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jint _nameBufferOffset = (jint)0;
2030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
203659fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    jint _nameRemaining;
203759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    GLchar* name = (GLchar*)0;
203859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos
2039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
20403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
20413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
20423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
204359fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    name = (GLchar*)getPointer(_env, name_buf, (jarray*)&_nameArray, &_nameRemaining, &_nameBufferOffset);
2044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length == NULL) {
20453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
2046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
2047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size == NULL) {
20493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
2050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
2051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type == NULL) {
20533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
2054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
2055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
205659fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    if (name == NULL) {
205759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        char* _nameBase = (char *)_env->GetByteArrayElements(_nameArray, (jboolean*)0);
205859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        name = (GLchar *) (_nameBase + _nameBufferOffset);
205959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    }
2060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufsize,
2064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
2065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
206759fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        (GLchar*)name
2068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_typeArray) {
20703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
2071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_sizeArray) {
20733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
2074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
20763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
2077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
207859fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    if (_nameArray) {
207959fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos        releaseArrayPointer<jbyteArray, jbyte*, ByteArrayReleaser>(_env, _nameArray, (jbyte*)name, JNI_TRUE);
208059fb43e7bdc607f49b301644e4300485f352b103Pablo Ceballos    }
2081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
2085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying1
2086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
2087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
2089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
2090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size_base = (GLint *) 0;
2091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type_base = (GLenum *) 0;
2094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = 0;
2098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
2100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!len) {
2102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return _env->NewStringUTF("");
2103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) malloc(len);
2105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf == NULL) {
2107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return NULL;
2109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!size_ref) {
2111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "size == null";
2114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (sizeOffset < 0) {
2117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "sizeOffset < 0";
2120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
2123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size_base = (GLint *)
21243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
2125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size = size_base + sizeOffset;
2126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!type_ref) {
2128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "type == null";
2131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (typeOffset < 0) {
2134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "typeOffset < 0";
2137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
2140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type_base = (GLenum *)
21413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
2142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type = type_base + typeOffset;
2143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)len,
2148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        NULL,
2149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)buf
2152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type_base) {
21553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
2156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size_base) {
21593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
2160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception != 1) {
2163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        result = _env->NewStringUTF(buf);
2164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
2166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        free(buf);
2167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (result == 0) {
2172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        result = _env->NewStringUTF("");
2173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
2176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
2180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying2
2181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
21823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
2183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeBufferOffset = (jint) 0;
21843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
2185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeBufferOffset = (jint) 0;
2186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = 0;
2194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
2196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!len) {
2198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return _env->NewStringUTF("");
2199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) malloc(len);
2201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf == NULL) {
2203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return NULL;
2205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
22073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
22083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
2209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size == NULL) {
22103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
2211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
2212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type == NULL) {
22143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
2215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
2216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)len,
2221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        NULL,
2222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)buf
2225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_typeArray) {
22283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
2229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_sizeArray) {
22313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
2232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    result = _env->NewStringUTF(buf);
2234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
2235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        free(buf);
2236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
2238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
2240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I
2242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
2243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
2244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pointer = (GLvoid *) 0;
2247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pointer_buf) {
2249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
2250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if ( ! pointer ) {
2251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            return;
2252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
2253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointerBounds(
2255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)size,
2257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
2258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)stride,
2259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pointer,
2260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)remaining
2261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, GLsizei offset ) */
2265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribIPointer__IIIII
2267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jint offset) {
2268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointer(
2269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)size,
2271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
2272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)stride,
227301c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
2274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIiv__II_3II
2280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
2285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
2287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
23023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIiv(
2306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
2309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
23133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2
2324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
23253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
2329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
23303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
23323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
2334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIiv(
2336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
2339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
23413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
2342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIuiv__II_3II
2348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
2353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
23703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIuiv(
2374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
23813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2
2392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
23933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
23983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
24003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
2402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIuiv(
2404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
24093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
2410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4i ( GLuint index, GLint x, GLint y, GLint z, GLint w ) */
2414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4i__IIIII
2416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4i(
2418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
2420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
2421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)z,
2422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)w
2423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4ui ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w ) */
2427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4ui__IIIII
2429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4ui(
2431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)x,
2433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)y,
2434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)z,
2435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)w
2436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4iv__I_3II
2442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v_base = (GLint *) 0;
2447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v = (GLint *) 0;
2449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!v_ref) {
2451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "v == null";
2454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(v_ref) - offset;
2463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v_base = (GLint *)
24643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(v_ref, (jboolean *)0);
2465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v = v_base + offset;
2466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4iv(
2468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)v
2470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v_base) {
24743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
2475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4iv__ILjava_nio_IntBuffer_2
2485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
24863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v = (GLint *) 0;
2490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
24913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v == NULL) {
24933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        v = (GLint *) (_vBase + _bufferOffset);
2495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4iv(
2497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)v
2499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
25013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
2502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4uiv__I_3II
2508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v_base = (GLuint *) 0;
2513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v = (GLuint *) 0;
2515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!v_ref) {
2517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "v == null";
2520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(v_ref) - offset;
2529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v_base = (GLuint *)
25303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(v_ref, (jboolean *)0);
2531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v = v_base + offset;
2532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4uiv(
2534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)v
2536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v_base) {
25403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
2541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2
2551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
25523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v = (GLuint *) 0;
2556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
25573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    v = (GLuint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v == NULL) {
25593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        v = (GLuint *) (_vBase + _bufferOffset);
2561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4uiv(
2563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)v
2565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
25673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
2568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformuiv__II_3II
2574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jintArray params_ref, jint offset) {
2575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
2579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
25963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformuiv(
2600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
26073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformuiv__IILjava_nio_IntBuffer_2
2618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
26193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
26243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
26263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
2628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformuiv(
2630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
26353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
2636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLint glGetFragDataLocation ( GLuint program, const GLchar *name ) */
2640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
2641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetFragDataLocation__ILjava_lang_String_2
2642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jstring name) {
2643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint _returnValue = 0;
2647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _nativename = 0;
2648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name) {
2650428d3fcbe3596b18549cdada9fc68a29f159a946Elliott Hughes        _exception = 1;
2651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "name == null";
2653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
2656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glGetFragDataLocation(
2658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar *)_nativename
2660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nativename) {
2664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
2665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
2671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1ui ( GLint location, GLuint v0 ) */
2674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1ui__II
2676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0) {
2677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1ui(
2678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0
2680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2ui ( GLint location, GLuint v0, GLuint v1 ) */
2684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2ui__III
2686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1) {
2687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2ui(
2688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
2690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1
2691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3ui ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
2695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3ui__IIII
2697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2) {
2698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3ui(
2699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
2701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1,
2702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v2
2703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4ui ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
2707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4ui__IIIII
2709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2, jint v3) {
2710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4ui(
2711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
2713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1,
2714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v2,
2715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v3
2716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
2720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1uiv__II_3II
2722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
27443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1uiv(
2748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
27553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
2764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1uiv__IILjava_nio_IntBuffer_2
2766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
27673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
27723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
27743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1uiv(
2778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
27833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
2788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2uiv__II_3II
2790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
28123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2uiv(
2816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
28233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
2832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2uiv__IILjava_nio_IntBuffer_2
2834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
28353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
28403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
28423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2uiv(
2846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
28513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
2856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3uiv__II_3II
2858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
28803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3uiv(
2884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
28913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
2900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3uiv__IILjava_nio_IntBuffer_2
2902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
29033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
29083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
29103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3uiv(
2914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
29193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
2924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4uiv__II_3II
2926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
29483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4uiv(
2952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
29593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
2968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4uiv__IILjava_nio_IntBuffer_2
2970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
29713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
29763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
29783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4uiv(
2982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
29873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
2992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferiv__II_3II
2994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
2995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value_base = (GLint *) 0;
2999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value = (GLint *) 0;
3001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLint *)
30163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferiv(
3020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)value
3023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
30273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
3036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferiv__IILjava_nio_IntBuffer_2
3038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
30393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value = (GLint *) 0;
3043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
30443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
30463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
3048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferiv(
3050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)value
3053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
30553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
3060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferuiv__II_3II
3062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
3063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
30843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferuiv(
3088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
30953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
3104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferuiv__IILjava_nio_IntBuffer_2
3106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
31073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
31123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
31143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferuiv(
3118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
31233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfv__II_3FI
3130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloatArray value_ref, jint offset) {
3131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
3135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
3137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
31523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
3153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfv(
3156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
3159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
31633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
3164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfv__IILjava_nio_FloatBuffer_2
3174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
31753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
3176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
3179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
31803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
31823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
3183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
3184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfv(
3186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
3189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
31913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
3192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfi ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil ) */
3196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfi__IIFI
3198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloat depth, jint stencil) {
3199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfi(
3200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat)depth,
3203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)stencil
3204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* const GLubyte * glGetStringi ( GLenum name, GLuint index ) */
3208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
3209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetStringi__II
3210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint name, jint index) {
3211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const GLubyte* _chars = glGetStringi((GLenum)name, (GLuint)index);
3212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _env->NewStringUTF((const char*)_chars);
3213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCopyBufferSubData ( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ) */
3216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCopyBufferSubData__IIIII
3218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint readTarget, jint writeTarget, jint readOffset, jint writeOffset, jint size) {
3219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCopyBufferSubData(
3220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)readTarget,
3221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)writeTarget,
3222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)readOffset,
3223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)writeOffset,
3224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)size
3225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
3230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
3231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformIndices_array
3232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jintArray uniformIndices_ref, jint uniformIndicesOffset) {
3233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
3235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
3236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0;
3237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _i;
3238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _names = NULL;
3239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices_base = NULL;
3240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices = NULL;
3241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformNames_ref) {
3243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformNames == null";
3246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(uniformNames_ref);
3249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _names = (const char**)calloc(_count, sizeof(const char*));
3250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
3251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_name) {
3253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
3254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
3255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null uniformNames element";
3256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
3257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _names[_i] = _env->GetStringUTFChars(_name, 0);
3259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_ref) {
3262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndicesOffset < 0) {
3268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndicesOffset < 0";
3271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset < _count) {
3274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "not enough space in uniformIndices";
3277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
32793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _indices_base = (GLuint*)_env->GetIntArrayElements(
3280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            uniformIndices_ref, 0);
3281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _indices = _indices_base + uniformIndicesOffset;
3282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformIndices(program, _count, _names, _indices);
3284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_indices_base) {
32873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)_indices_base,
32883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _exception ? JNI_ABORT : 0);
3289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
3291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_names[_i]) {
3292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_name) {
3294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_name, _names[_i]);
3295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
3296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_names);
3299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
3306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
3307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformIndices_buffer
3308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jobject uniformIndices_buf) {
3309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
3311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
3312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0;
3313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _i;
3314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _names = NULL;
33153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _uniformIndicesArray = (jintArray)0;
3316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesOffset = 0;
3318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices = NULL;
3319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* _indicesBase = NULL;
3320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformNames_ref) {
3322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformNames == null";
3325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_buf) {
3328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(uniformNames_ref);
3335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _names = (const char**)calloc(_count, sizeof(const char*));
3336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
3337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_name) {
3339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
3340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
3341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null uniformNames element";
3342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
3343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _names[_i] = _env->GetStringUTFChars(_name, 0);
3345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
33483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining,
3349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            &_uniformIndicesOffset);
3350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!_indices) {
33513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _indicesBase = (char*)_env->GetIntArrayElements(
33523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _uniformIndicesArray, 0);
3353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
3354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesRemaining < _count) {
3356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "not enough space in uniformIndices";
3359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformIndices(program, _count, _names, _indices);
3363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesArray) {
33663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(
33673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _uniformIndicesArray, (jint*)_indicesBase, JNI_TRUE);
3368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
3370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_names[_i]) {
3371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_name) {
3373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_name, _names[_i]);
3374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
3375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_names);
3378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformsiv__II_3III_3II
3385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jintArray uniformIndices_ref, jint uniformIndicesOffset, jint pname, jintArray params_ref, jint paramsOffset) {
3386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices_base = (GLuint *) 0;
3390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices = (GLuint *) 0;
3392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
3393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsRemaining;
3394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_ref) {
3397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndicesOffset < 0) {
3403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndicesOffset < 0";
3406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _uniformIndicesRemaining = _env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset;
3409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    uniformIndices_base = (GLuint *)
34103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(uniformIndices_ref, (jboolean *)0);
3411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    uniformIndices = uniformIndices_base + uniformIndicesOffset;
3412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (paramsOffset < 0) {
3420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "paramsOffset < 0";
3423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
3426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
34273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
3428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + paramsOffset;
3429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformsiv(
3431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)uniformCount,
3433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)uniformIndices,
3434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
34403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
3441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndices_base) {
34443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)uniformIndices_base,
3445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2
3455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jobject uniformIndices_buf, jint pname, jobject params_buf) {
34563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _uniformIndicesArray = (jintArray) 0;
3457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesBufferOffset = (jint) 0;
34583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _paramsArray = (jintArray) 0;
3459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsBufferOffset = (jint) 0;
3460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices = (GLuint *) 0;
3462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsRemaining;
3463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
34653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
34663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
3467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndices == NULL) {
34683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _uniformIndicesBase = (char *)_env->GetIntArrayElements(_uniformIndicesArray, (jboolean *) 0);
3469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        uniformIndices = (GLuint *) (_uniformIndicesBase + _uniformIndicesBufferOffset);
3470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
34723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
3473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _paramsBufferOffset);
3474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformsiv(
3476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)uniformCount,
3478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)uniformIndices,
3479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_paramsArray) {
34833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, 0);
3484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesArray) {
34863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_uniformIndicesArray, (jint*)uniformIndices, JNI_ABORT);
3487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLuint glGetUniformBlockIndex ( GLuint program, const GLchar *uniformBlockName ) */
3491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
3492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformBlockIndex__ILjava_lang_String_2
3493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jstring uniformBlockName) {
3494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint _returnValue = 0;
3498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _nativeuniformBlockName = 0;
3499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformBlockName) {
3501428d3fcbe3596b18549cdada9fc68a29f159a946Elliott Hughes        _exception = 1;
3502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockName == null";
3504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nativeuniformBlockName = _env->GetStringUTFChars(uniformBlockName, 0);
3507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glGetUniformBlockIndex(
3509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar *)_nativeuniformBlockName
3511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nativeuniformBlockName) {
3515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->ReleaseStringUTFChars(uniformBlockName, _nativeuniformBlockName);
3516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
3522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockiv__III_3II
3527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jintArray params_ref, jint offset) {
3528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
3532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
35493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
3550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
3551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv(
3553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
35613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
3562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2
3572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jobject params_buf) {
35733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
35783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
35803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
3582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv(
3584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
35903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
3591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_III_3II_3BI
3597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, jbyteArray name_ref, jint nameOffset) {
3598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType;
3600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage;
3601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length_base = (GLsizei*)0;
3602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length = (GLsizei*)0;
3604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name_base = (GLchar*)0;
3605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
3606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name = (GLchar*)0;
3607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
36086aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
36096aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
36106aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
36116aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
36126aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
36136aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
36146aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
36156aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
36166aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _length_base = (GLsizei*)_env->GetIntArrayElements(
36176aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos                length_ref, (jboolean*)0);
36186aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _length = _length_base + lengthOffset;
3619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name_ref) {
3622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockName == null";
3625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (nameOffset < 0) {
3628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockNameOffset < 0";
3631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
36343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _name_base = (GLchar*)_env->GetByteArrayElements(
3635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            name_ref, (jboolean*)0);
3636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _name = _name_base + nameOffset;
3637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName(
3639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
3642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei*)_length,
3643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar*)_name
3644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_name_base) {
36483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base,
3649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_length_base) {
36523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base,
3653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2
3663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) {
3664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType;
3666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage;
3667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _lengthArray = (jarray)0;
3668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint)0;
3669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length = (GLsizei*)0;
3670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _nameArray = (jarray)0;
3672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameBufferOffset = (jint)0;
3673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name = (GLchar*)0;
3674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
3675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
3677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_length == NULL) {
3678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0);
3679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _length = (GLsizei*)(_lengthBase + _lengthBufferOffset);
3680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset);
3683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_name == NULL) {
3684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0);
3685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _name = (GLchar*)(_nameBase + _nameBufferOffset);
3686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName(
3689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)_nameRemaining,
3692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _length, _name
3693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nameArray) {
3695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _nameArray, _name, JNI_TRUE);
3696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
3698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _lengthArray, _length, JNI_TRUE);
3699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
3704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_II
3705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) {
3706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
3707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex,
3708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            GL_UNIFORM_BLOCK_NAME_LENGTH, &len);
3709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* name = (GLchar*)malloc(len);
3710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex,
3711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        len, NULL, name);
3712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = _env->NewStringUTF(name);
3713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(name);
3714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
3715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) */
3717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformBlockBinding__III
3719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint uniformBlockBinding) {
3720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformBlockBinding(
3721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockBinding
3724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawArraysInstanced ( GLenum mode, GLint first, GLsizei count, GLsizei instanceCount ) */
3728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawArraysInstanced__IIII
3730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint first, jint count, jint instanceCount) {
3731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawArraysInstanced(
3732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
3733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)first,
3734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
3736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
3740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawElementsInstanced__IIILjava_nio_Buffer_2I
3742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint instanceCount) {
3743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
3744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *indices = (GLvoid *) 0;
3747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
3749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (indices == NULL) {
3750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        indices = (GLvoid *) (_indicesBase + _bufferOffset);
3752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawElementsInstanced(
3754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
3755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
3757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)indices,
3758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
3759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
3761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, indices, JNI_FALSE);
3762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
3766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawElementsInstanced__IIIII
3768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint indicesOffset, jint instanceCount) {
3769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawElementsInstanced(
3770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
3771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
377310caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        (GLvoid *)static_cast<uintptr_t>(indicesOffset),
3774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
3775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLsync glFenceSync ( GLenum condition, GLbitfield flags ) */
3778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jlong
3779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFenceSync__II
3780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint condition, jint flags) {
3781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsync _returnValue;
3782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glFenceSync(
3783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)condition,
3784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags
3785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jlong)_returnValue;
3787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsSync ( GLsync sync ) */
3790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
3791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsSync__J
3792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync) {
3793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
3794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsSync(
3795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync
3796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
3798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSync ( GLsync sync ) */
3801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSync__J
3803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync) {
3804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSync(
3805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync
3806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLenum glClientWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
3810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
3811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClientWaitSync__JIJ
3812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
3813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum _returnValue;
3814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glClientWaitSync(
3815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags,
3817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint64)timeout
3818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
3820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
3823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glWaitSync__JIJ
3825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
3826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glWaitSync(
3827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags,
3829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint64)timeout
3830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
3834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64v__I_3JI
3836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jlongArray params_ref, jint offset) {
3837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params_base = (GLint64 *) 0;
3841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
3843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint64 *)
38583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(params_ref, (jboolean *)0);
3859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
3860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64v(
3862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
3864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
38683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
3869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
3877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64v__ILjava_nio_LongBuffer_2
3879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
38803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
3881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
3884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
38853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
38873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
3888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint64 *) (_paramsBase + _bufferOffset);
3889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64v(
3891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
3893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
38953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(_array, (jlong*)params, 0);
3896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
3900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSynciv__JII_3II_3II
3902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray values_ref, jint valuesOffset) {
3903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
3907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
3909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values_base = (GLint *) 0;
3910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesRemaining;
3911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values = (GLint *) 0;
3912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
39136aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
39146aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
39156aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
39166aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
39176aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
39186aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
39196aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
39206aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
39216aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
39226aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
39236aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
3924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!values_ref) {
3927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "values == null";
3930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (valuesOffset < 0) {
3933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "valuesOffset < 0";
3936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _valuesRemaining = _env->GetArrayLength(values_ref) - valuesOffset;
3939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    values_base = (GLint *)
39403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(values_ref, (jboolean *)0);
3941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    values = values_base + valuesOffset;
3942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSynciv(
3944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
3947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
3948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)values
3949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (values_base) {
39533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(values_ref, (jint*)values_base,
3954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
39573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
3958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
3966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
3968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jobject length_buf, jobject values_buf) {
39693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
3970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
39713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _valuesArray = (jintArray) 0;
3972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesBufferOffset = (jint) 0;
3973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
3975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesRemaining;
3976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values = (GLint *) 0;
3977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
39786aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
39796aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
39806aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
39813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    values = (GLint *)getPointer(_env, values_buf, (jarray*)&_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
39826aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
39833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
3984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
3985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (values == NULL) {
39873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valuesBase = (char *)_env->GetIntArrayElements(_valuesArray, (jboolean *) 0);
3988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        values = (GLint *) (_valuesBase + _valuesBufferOffset);
3989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSynciv(
3991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
3994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
3995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)values
3996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_valuesArray) {
39983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_valuesArray, (jint*)values, 0);
3999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
40013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
4002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
4006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64i_v__II_3JI
4008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jlongArray data_ref, jint offset) {
4009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data_base = (GLint64 *) 0;
4013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data = (GLint64 *) 0;
4015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!data_ref) {
4017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "data == null";
4020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
4029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data_base = (GLint64 *)
40303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(data_ref, (jboolean *)0);
4031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data = data_base + offset;
4032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64i_v(
4034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)data
4037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data_base) {
40413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(data_ref, (jlong*)data_base,
4042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
4050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64i_v__IILjava_nio_LongBuffer_2
4052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
40533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data = (GLint64 *) 0;
4057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
40583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLint64 *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
40603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLint64 *) (_dataBase + _bufferOffset);
4062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64i_v(
4064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)data
4067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
40693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(_array, (jlong*)data, 0);
4070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
4074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferParameteri64v__II_3JI
4076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jlongArray params_ref, jint offset) {
4077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params_base = (GLint64 *) 0;
4081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint64 *)
40983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(params_ref, (jboolean *)0);
4099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v(
4102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
41093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
4110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
4118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2
4120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
41213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
41263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
41283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint64 *) (_paramsBase + _bufferOffset);
4130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v(
4132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
41373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(_array, (jlong*)params, 0);
4138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenSamplers__I_3II
4144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers_base = (GLuint *) 0;
4149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!samplers_ref) {
4153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "samplers == null";
4156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(samplers_ref) - offset;
4165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers_base = (GLuint *)
41663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
4167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers = samplers_base + offset;
4168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenSamplers(
4170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers_base) {
41763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
4177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenSamplers__ILjava_nio_IntBuffer_2
4187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
41883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
41933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers == NULL) {
41953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        samplers = (GLuint *) (_samplersBase + _bufferOffset);
4197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenSamplers(
4199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
42033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)samplers, 0);
4204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSamplers__I_3II
4210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers_base = (GLuint *) 0;
4215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!samplers_ref) {
4219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "samplers == null";
4222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(samplers_ref) - offset;
4231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers_base = (GLuint *)
42323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
4233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers = samplers_base + offset;
4234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSamplers(
4236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers_base) {
42423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
4243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSamplers__ILjava_nio_IntBuffer_2
4253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
42543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
42593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers == NULL) {
42613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        samplers = (GLuint *) (_samplersBase + _bufferOffset);
4263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSamplers(
4265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
42693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)samplers, JNI_ABORT);
4270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsSampler ( GLuint sampler ) */
4274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
4275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsSampler__I
4276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler) {
4277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
4278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsSampler(
4279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler
4280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
4282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindSampler ( GLuint unit, GLuint sampler ) */
4285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindSampler__II
4287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint unit, jint sampler) {
4288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindSampler(
4289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)unit,
4290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler
4291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteri ( GLuint sampler, GLenum pname, GLint param ) */
4295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteri__III
4297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jint param) {
4298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteri(
4299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)param
4302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteriv__II_3II
4308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
4309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param_base = (GLint *) 0;
4313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param = (GLint *) 0;
4315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!param_ref) {
4317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "param == null";
4320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(param_ref) - offset;
4329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param_base = (GLint *)
43303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(param_ref, (jboolean *)0);
4331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param = param_base + offset;
4332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteriv(
4334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)param
4337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param_base) {
43413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
4342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteriv__IILjava_nio_IntBuffer_2
4352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
43533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param = (GLint *) 0;
4357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
43583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param == NULL) {
43603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        param = (GLint *) (_paramBase + _bufferOffset);
4362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteriv(
4364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)param
4367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
43693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
4370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterf ( GLuint sampler, GLenum pname, GLfloat param ) */
4374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterf__IIF
4376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloat param) {
4377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterf(
4378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat)param
4381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterfv__II_3FI
4387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray param_ref, jint offset) {
4388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param_base = (GLfloat *) 0;
4392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param = (GLfloat *) 0;
4394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!param_ref) {
4396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "param == null";
4399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(param_ref) - offset;
4408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param_base = (GLfloat *)
44093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(param_ref, (jboolean *)0);
4410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param = param_base + offset;
4411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterfv(
4413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)param
4416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param_base) {
44203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(param_ref, (jfloat*)param_base,
4421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterfv__IILjava_nio_FloatBuffer_2
4431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
44323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
4433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param = (GLfloat *) 0;
4436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    param = (GLfloat *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param == NULL) {
44393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
4440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        param = (GLfloat *) (_paramBase + _bufferOffset);
4441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterfv(
4443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)param
4446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
44483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)param, JNI_ABORT);
4449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
4453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameteriv__II_3II
4455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
4456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
4460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
4462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
44773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
4478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameteriv(
4481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
4484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
44883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
4489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
4497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2
4499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
45003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
4504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
45053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
45073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
4509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameteriv(
4511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
4514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
45163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
4517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
4521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameterfv__II_3FI
4523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray params_ref, jint offset) {
4524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params_base = (GLfloat *) 0;
4528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params = (GLfloat *) 0;
4530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLfloat *)
45453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
4546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameterfv(
4549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)params
4552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
45563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
4557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
4565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2
4567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
45683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
4569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params = (GLfloat *) 0;
4572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
45733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
45753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
4576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLfloat *) (_paramsBase + _bufferOffset);
4577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameterfv(
4579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)params
4582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
45843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
4585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribDivisor ( GLuint index, GLuint divisor ) */
4589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribDivisor__II
4591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint divisor) {
4592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribDivisor(
4593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)divisor
4595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindTransformFeedback ( GLenum target, GLuint id ) */
4599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindTransformFeedback__II
4601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint id) {
4602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindTransformFeedback(
4603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
4605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
4609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteTransformFeedbacks__I_3II
4611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
4612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
4616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
4620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
4623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
4632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
46333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
4634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
4635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteTransformFeedbacks(
4637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
46433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
4644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
4652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2
4654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
46553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
46603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
46623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
4664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteTransformFeedbacks(
4666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
46703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
4671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
4675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenTransformFeedbacks__I_3II
4677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
4678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
4682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
4686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
4689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
4698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
46993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
4700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
4701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenTransformFeedbacks(
4703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
47093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
4710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
4718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2
4720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
47213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
47263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
47283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
4730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenTransformFeedbacks(
4732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
47363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, 0);
4737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsTransformFeedback ( GLuint id ) */
4741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
4742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsTransformFeedback__I
4743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id) {
4744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
4745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsTransformFeedback(
4746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
4747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
4749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glPauseTransformFeedback ( void ) */
4752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glPauseTransformFeedback__
4754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
4755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glPauseTransformFeedback();
4756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glResumeTransformFeedback ( void ) */
4759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glResumeTransformFeedback__
4761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
4762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glResumeTransformFeedback();
4763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
4766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2
4768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray binaryFormat_ref, jint binaryFormatOffset, jobject binary_buf) {
4769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
4773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
4775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
4777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat_base = (GLenum *) 0;
4778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatRemaining;
4779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat = (GLenum *) 0;
4780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryRemaining;
4781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
4782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
47836aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_ref) {
47846aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        if (lengthOffset < 0) {
47856aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exception = 1;
47866aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionType = "java/lang/IllegalArgumentException";
47876aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _exceptionMessage = "lengthOffset < 0";
47886aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            goto exit;
47896aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        }
47906aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
47916aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length_base = (GLsizei *)
47926aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos            _env->GetIntArrayElements(length_ref, (jboolean *)0);
47936aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = length_base + lengthOffset;
4794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!binaryFormat_ref) {
4797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "binaryFormat == null";
4800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormatOffset < 0) {
4803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "binaryFormatOffset < 0";
4806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _binaryFormatRemaining = _env->GetArrayLength(binaryFormat_ref) - binaryFormatOffset;
4809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    binaryFormat_base = (GLenum *)
48103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(binaryFormat_ref, (jboolean *)0);
4811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    binaryFormat = binaryFormat_base + binaryFormatOffset;
4812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
48133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_binaryRemaining, &_bufferOffset);
4814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
4815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _bufferOffset);
4817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramBinary(
4819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
4822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)binaryFormat,
4823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary
4824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
4829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormat_base) {
48313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(binaryFormat_ref, (jint*)binaryFormat_base,
4832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
48353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
4836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
4844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2
4846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint bufSize, jobject length_buf, jobject binaryFormat_buf, jobject binary_buf) {
48473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
4848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
48493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _binaryFormatArray = (jintArray) 0;
4850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatBufferOffset = (jint) 0;
48513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _binaryArray = (jintArray) 0;
4852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryBufferOffset = (jint) 0;
4853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
4855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatRemaining;
4856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat = (GLenum *) 0;
4857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryRemaining;
4858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
4859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
48606aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf) {
48616aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos        length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
48626aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    }
48633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, (jarray*)&_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
48643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
48656aff9068f91fdfef0bc55fda0721c180c0de9284Pablo Ceballos    if (length_buf && length == NULL) {
48663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
4867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
4868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormat == NULL) {
48703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _binaryFormatBase = (char *)_env->GetIntArrayElements(_binaryFormatArray, (jboolean *) 0);
4871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binaryFormat = (GLenum *) (_binaryFormatBase + _binaryFormatBufferOffset);
4872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
4874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_binaryArray, (jboolean *) 0);
4875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _binaryBufferOffset);
4876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramBinary(
4878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
4881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)binaryFormat,
4882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary
4883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_binaryArray) {
4885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _binaryArray, binary, JNI_TRUE);
4886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_binaryFormatArray) {
48883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_binaryFormatArray, (jint*)binaryFormat, 0);
4889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
48913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
4892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glProgramBinary ( GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length ) */
4896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glProgramBinary__IILjava_nio_Buffer_2I
4898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint binaryFormat, jobject binary_buf, jint length) {
4899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
4900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
4903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
49043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
4906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _bufferOffset);
4908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glProgramBinary(
4910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)binaryFormat,
4912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary,
4913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)length
4914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, binary, JNI_FALSE);
4917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glProgramParameteri ( GLuint program, GLenum pname, GLint value ) */
4921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glProgramParameteri__III
4923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint pname, jint value) {
4924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glProgramParameteri(
4925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)value
4928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
4932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateFramebuffer__II_3II
4934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset) {
4935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments_base = (GLenum *) 0;
4939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
4941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!attachments_ref) {
4943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "attachments == null";
4946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(attachments_ref) - offset;
4955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments_base = (GLenum *)
49563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
4957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments = attachments_base + offset;
4958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateFramebuffer(
4960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
4962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments
4963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments_base) {
49673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
4968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
4976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2
4978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf) {
49793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
4983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
49843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments == NULL) {
49863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
4988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateFramebuffer(
4990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
4992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments
4993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
49953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
4996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
5000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateSubFramebuffer__II_3IIIIII
5002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset, jint x, jint y, jint width, jint height) {
5003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments_base = (GLenum *) 0;
5007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!attachments_ref) {
5011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "attachments == null";
5014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(attachments_ref) - offset;
5023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments_base = (GLenum *)
50243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
5025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments = attachments_base + offset;
5026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateSubFramebuffer(
5028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments,
5031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
5032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
5033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments_base) {
50393b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
5040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
5041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
5048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII
5050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf, jint x, jint y, jint width, jint height) {
50513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
50563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments == NULL) {
50583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
5060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateSubFramebuffer(
5062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments,
5065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
5066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
5067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
50713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
5072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexStorage2D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height ) */
5076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexStorage2D__IIIII
5078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height) {
5079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexStorage2D(
5080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)levels,
5082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexStorage3D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth ) */
5089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexStorage3D__IIIIII
5091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height, jint depth) {
5092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexStorage3D(
5093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)levels,
5095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
5098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth
5099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInternalformativ__IIII_3II
5105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jintArray params_ref, jint offset) {
5106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
5110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
5114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
5117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
51273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
5129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInternalformativ(
5131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
51403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInternalformativ__IIIILjava_nio_IntBuffer_2
5151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jobject params_buf) {
51523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
51573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
51593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInternalformativ(
5163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
51703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
5171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
517468981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos/* void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint offset ) */
517568981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballosstatic void
517668981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballosandroid_glReadPixels__IIIIIII
517768981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos  (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jint offset) {
517868981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos    glReadPixels(
517968981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLint)x,
518068981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLint)y,
518168981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLsizei)width,
518268981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLsizei)height,
518368981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLenum)format,
518468981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        (GLenum)type,
518568981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos        reinterpret_cast<GLvoid *>(offset)
518668981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos    );
518768981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos}
518868981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos
5189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic const char *classPathName = "android/opengl/GLES30";
5190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
519176f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod methods[] = {
5192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"_nativeClassInit", "()V", (void*)nativeClassInit },
5193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glReadBuffer", "(I)V", (void *) android_glReadBuffer__I },
5194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawRangeElements", "(IIIIILjava/nio/Buffer;)V", (void *) android_glDrawRangeElements__IIIIILjava_nio_Buffer_2 },
5195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawRangeElements", "(IIIIII)V", (void *) android_glDrawRangeElements__IIIIII },
5196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexImage3D", "(IIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2 },
5197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexImage3D", "(IIIIIIIIII)V", (void *) android_glTexImage3D__IIIIIIIIII },
5198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glTexSubImage3D__IIIIIIIIIII },
5200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCopyTexSubImage3D", "(IIIIIIIII)V", (void *) android_glCopyTexSubImage3D__IIIIIIIII },
5201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexImage3D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2 },
5202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexImage3D", "(IIIIIIIII)V", (void *) android_glCompressedTexImage3D__IIIIIIIII },
5203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIII },
5205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenQueries", "(I[II)V", (void *) android_glGenQueries__I_3II },
5206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenQueries__ILjava_nio_IntBuffer_2 },
5207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteQueries", "(I[II)V", (void *) android_glDeleteQueries__I_3II },
5208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteQueries__ILjava_nio_IntBuffer_2 },
5209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsQuery", "(I)Z", (void *) android_glIsQuery__I },
5210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBeginQuery", "(II)V", (void *) android_glBeginQuery__II },
5211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glEndQuery", "(I)V", (void *) android_glEndQuery__I },
5212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryiv", "(II[II)V", (void *) android_glGetQueryiv__II_3II },
5213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryiv__IILjava_nio_IntBuffer_2 },
5214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryObjectuiv", "(II[II)V", (void *) android_glGetQueryObjectuiv__II_3II },
5215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryObjectuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2 },
5216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUnmapBuffer", "(I)Z", (void *) android_glUnmapBuffer__I },
5217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferPointerv", "(II)Ljava/nio/Buffer;", (void *) android_glGetBufferPointerv__II },
5218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawBuffers", "(I[II)V", (void *) android_glDrawBuffers__I_3II },
5219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDrawBuffers__ILjava_nio_IntBuffer_2 },
5220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x3fv__IIZ_3FI },
5221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2 },
5222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x2fv__IIZ_3FI },
5223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2 },
5224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x4fv__IIZ_3FI },
5225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2 },
5226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x2fv__IIZ_3FI },
5227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2 },
5228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x4fv__IIZ_3FI },
5229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2 },
5230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x3fv__IIZ_3FI },
5231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2 },
5232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBlitFramebuffer", "(IIIIIIIIII)V", (void *) android_glBlitFramebuffer__IIIIIIIIII },
5233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glRenderbufferStorageMultisample", "(IIIII)V", (void *) android_glRenderbufferStorageMultisample__IIIII },
5234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFramebufferTextureLayer", "(IIIII)V", (void *) android_glFramebufferTextureLayer__IIIII },
5235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glMapBufferRange", "(IIII)Ljava/nio/Buffer;", (void *) android_glMapBufferRange__IIII },
5236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFlushMappedBufferRange", "(III)V", (void *) android_glFlushMappedBufferRange__III },
5237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindVertexArray", "(I)V", (void *) android_glBindVertexArray__I },
5238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteVertexArrays", "(I[II)V", (void *) android_glDeleteVertexArrays__I_3II },
5239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2 },
5240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenVertexArrays", "(I[II)V", (void *) android_glGenVertexArrays__I_3II },
5241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenVertexArrays__ILjava_nio_IntBuffer_2 },
5242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsVertexArray", "(I)Z", (void *) android_glIsVertexArray__I },
5243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetIntegeri_v", "(II[II)V", (void *) android_glGetIntegeri_v__II_3II },
5244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetIntegeri_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetIntegeri_v__IILjava_nio_IntBuffer_2 },
5245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBeginTransformFeedback", "(I)V", (void *) android_glBeginTransformFeedback__I },
5246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glEndTransformFeedback", "()V", (void *) android_glEndTransformFeedback__ },
5247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindBufferRange", "(IIIII)V", (void *) android_glBindBufferRange__IIIII },
5248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindBufferBase", "(III)V", (void *) android_glBindBufferBase__III },
5249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTransformFeedbackVaryings", "(I[Ljava/lang/String;I)V", (void *) android_glTransformFeedbackVaryings },
5250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(III[II[II[II[BI)V", (void *) android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI },
5251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 },
525259fb43e7bdc607f49b301644e4300485f352b103Pablo 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 },
5253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(II[II[II)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying1 },
5254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying2 },
5255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribIPointerBounds", "(IIIILjava/nio/Buffer;I)V", (void *) android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I },
5256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribIPointer", "(IIIII)V", (void *) android_glVertexAttribIPointer__IIIII },
5257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIiv", "(II[II)V", (void *) android_glGetVertexAttribIiv__II_3II },
5258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2 },
5259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIuiv", "(II[II)V", (void *) android_glGetVertexAttribIuiv__II_3II },
5260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2 },
5261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4i", "(IIIII)V", (void *) android_glVertexAttribI4i__IIIII },
5262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4ui", "(IIIII)V", (void *) android_glVertexAttribI4ui__IIIII },
5263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4iv", "(I[II)V", (void *) android_glVertexAttribI4iv__I_3II },
5264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4iv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2 },
5265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4uiv", "(I[II)V", (void *) android_glVertexAttribI4uiv__I_3II },
5266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4uiv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2 },
5267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformuiv", "(II[II)V", (void *) android_glGetUniformuiv__II_3II },
5268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetUniformuiv__IILjava_nio_IntBuffer_2 },
5269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetFragDataLocation", "(ILjava/lang/String;)I", (void *) android_glGetFragDataLocation__ILjava_lang_String_2 },
5270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1ui", "(II)V", (void *) android_glUniform1ui__II },
5271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2ui", "(III)V", (void *) android_glUniform2ui__III },
5272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3ui", "(IIII)V", (void *) android_glUniform3ui__IIII },
5273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4ui", "(IIIII)V", (void *) android_glUniform4ui__IIIII },
5274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1uiv", "(II[II)V", (void *) android_glUniform1uiv__II_3II },
5275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform1uiv__IILjava_nio_IntBuffer_2 },
5276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2uiv", "(II[II)V", (void *) android_glUniform2uiv__II_3II },
5277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform2uiv__IILjava_nio_IntBuffer_2 },
5278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3uiv", "(II[II)V", (void *) android_glUniform3uiv__II_3II },
5279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform3uiv__IILjava_nio_IntBuffer_2 },
5280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4uiv", "(II[II)V", (void *) android_glUniform4uiv__II_3II },
5281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform4uiv__IILjava_nio_IntBuffer_2 },
5282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferiv", "(II[II)V", (void *) android_glClearBufferiv__II_3II },
5283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferiv__IILjava_nio_IntBuffer_2 },
5284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferuiv", "(II[II)V", (void *) android_glClearBufferuiv__II_3II },
5285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferuiv__IILjava_nio_IntBuffer_2 },
5286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfv", "(II[FI)V", (void *) android_glClearBufferfv__II_3FI },
5287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glClearBufferfv__IILjava_nio_FloatBuffer_2 },
5288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfi", "(IIFI)V", (void *) android_glClearBufferfi__IIFI },
5289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetStringi", "(II)Ljava/lang/String;", (void *) android_glGetStringi__II },
5290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCopyBufferSubData", "(IIIII)V", (void *) android_glCopyBufferSubData__IIIII },
5291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformIndices", "(I[Ljava/lang/String;[II)V", (void *) android_glGetUniformIndices_array },
5292d877efe3b12afdd84f06c180369f9d7399858f6eJesse Hall{"glGetUniformIndices", "(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V", (void *) android_glGetUniformIndices_buffer },
5293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformsiv", "(II[III[II)V", (void *) android_glGetActiveUniformsiv__II_3III_3II },
5294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformsiv", "(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2 },
5295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformBlockIndex", "(ILjava/lang/String;)I", (void *) android_glGetUniformBlockIndex__ILjava_lang_String_2 },
5296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockiv", "(III[II)V", (void *) android_glGetActiveUniformBlockiv__III_3II },
5297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2 },
5298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(III[II[BI)V", (void *) android_glGetActiveUniformBlockName_III_3II_3BI },
5299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(IILjava/nio/Buffer;Ljava/nio/Buffer;)V", (void *) android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 },
5300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(II)Ljava/lang/String;", (void *) android_glGetActiveUniformBlockName_II },
5301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformBlockBinding", "(III)V", (void *) android_glUniformBlockBinding__III },
5302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawArraysInstanced", "(IIII)V", (void *) android_glDrawArraysInstanced__IIII },
5303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawElementsInstanced", "(IIILjava/nio/Buffer;I)V", (void *) android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I },
5304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawElementsInstanced", "(IIIII)V", (void *) android_glDrawElementsInstanced__IIIII },
5305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFenceSync", "(II)J", (void *) android_glFenceSync__II },
5306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsSync", "(J)Z", (void *) android_glIsSync__J },
5307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSync", "(J)V", (void *) android_glDeleteSync__J },
5308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClientWaitSync", "(JIJ)I", (void *) android_glClientWaitSync__JIJ },
5309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glWaitSync", "(JIJ)V", (void *) android_glWaitSync__JIJ },
5310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64v", "(I[JI)V", (void *) android_glGetInteger64v__I_3JI },
5311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64v", "(ILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64v__ILjava_nio_LongBuffer_2 },
5312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSynciv", "(JII[II[II)V", (void *) android_glGetSynciv__JII_3II_3II },
5313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSynciv", "(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
5314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64i_v", "(II[JI)V", (void *) android_glGetInteger64i_v__II_3JI },
5315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64i_v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64i_v__IILjava_nio_LongBuffer_2 },
5316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferParameteri64v", "(II[JI)V", (void *) android_glGetBufferParameteri64v__II_3JI },
5317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferParameteri64v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2 },
5318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenSamplers", "(I[II)V", (void *) android_glGenSamplers__I_3II },
5319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenSamplers__ILjava_nio_IntBuffer_2 },
5320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSamplers", "(I[II)V", (void *) android_glDeleteSamplers__I_3II },
5321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteSamplers__ILjava_nio_IntBuffer_2 },
5322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsSampler", "(I)Z", (void *) android_glIsSampler__I },
5323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindSampler", "(II)V", (void *) android_glBindSampler__II },
5324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteri", "(III)V", (void *) android_glSamplerParameteri__III },
5325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteriv", "(II[II)V", (void *) android_glSamplerParameteriv__II_3II },
5326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameteriv__IILjava_nio_IntBuffer_2 },
5327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterf", "(IIF)V", (void *) android_glSamplerParameterf__IIF },
5328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterfv", "(II[FI)V", (void *) android_glSamplerParameterfv__II_3FI },
5329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
5330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameteriv", "(II[II)V", (void *) android_glGetSamplerParameteriv__II_3II },
5331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2 },
5332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameterfv", "(II[FI)V", (void *) android_glGetSamplerParameterfv__II_3FI },
5333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
5334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribDivisor", "(II)V", (void *) android_glVertexAttribDivisor__II },
5335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindTransformFeedback", "(II)V", (void *) android_glBindTransformFeedback__II },
5336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteTransformFeedbacks", "(I[II)V", (void *) android_glDeleteTransformFeedbacks__I_3II },
5337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2 },
5338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenTransformFeedbacks", "(I[II)V", (void *) android_glGenTransformFeedbacks__I_3II },
5339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2 },
5340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsTransformFeedback", "(I)Z", (void *) android_glIsTransformFeedback__I },
5341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glPauseTransformFeedback", "()V", (void *) android_glPauseTransformFeedback__ },
5342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glResumeTransformFeedback", "()V", (void *) android_glResumeTransformFeedback__ },
5343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetProgramBinary", "(II[II[IILjava/nio/Buffer;)V", (void *) android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2 },
5344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 },
5345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glProgramBinary", "(IILjava/nio/Buffer;I)V", (void *) android_glProgramBinary__IILjava_nio_Buffer_2I },
5346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glProgramParameteri", "(III)V", (void *) android_glProgramParameteri__III },
5347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateFramebuffer", "(II[II)V", (void *) android_glInvalidateFramebuffer__II_3II },
5348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateFramebuffer", "(IILjava/nio/IntBuffer;)V", (void *) android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2 },
5349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateSubFramebuffer", "(II[IIIIII)V", (void *) android_glInvalidateSubFramebuffer__II_3IIIIII },
5350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateSubFramebuffer", "(IILjava/nio/IntBuffer;IIII)V", (void *) android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII },
5351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexStorage2D", "(IIIII)V", (void *) android_glTexStorage2D__IIIII },
5352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexStorage3D", "(IIIIII)V", (void *) android_glTexStorage3D__IIIIII },
5353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInternalformativ", "(IIII[II)V", (void *) android_glGetInternalformativ__IIII_3II },
5354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInternalformativ", "(IIIILjava/nio/IntBuffer;)V", (void *) android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2 },
535568981ff03b2c166800ddc82973a2aa95269a343bPablo Ceballos{"glReadPixels", "(IIIIIII)V", (void *) android_glReadPixels__IIIIIII },
5356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall};
5357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallint register_android_opengl_jni_GLES30(JNIEnv *_env)
5359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
5360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int err;
5361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
5362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return err;
5363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5364