android_opengl_GLES30.cpp revision 3b1d46e809ed38cd5662c110c511b8d98868ed72
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
5043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pixels == NULL) {
506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexImage3D(
510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)internalformat,
513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pixels
520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, pixels, JNI_FALSE);
523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei offset ) */
527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexImage3D__IIIIIIIIII
529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexImage3D(
531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)internalformat,
534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
54001c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pixels = (GLvoid *) 0;
552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pixels == NULL) {
555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexSubImage3D(
559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pixels
570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, pixels, JNI_FALSE);
573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexSubImage3D__IIIIIIIIIII
579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexSubImage3D(
581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
59101c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCopyTexSubImage3D__IIIIIIIII
598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint x, jint y, jint width, jint height) {
599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCopyTexSubImage3D(
600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ) */
613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2
615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jobject data_buf) {
616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *data = (GLvoid *) 0;
620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
6213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLvoid *) (_dataBase + _bufferOffset);
625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexImage3D(
627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)data
636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, data, JNI_FALSE);
639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei offset ) */
643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexImage3D__IIIIIIIII
645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jint offset) {
646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexImage3D(
647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)border,
654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
65501c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *data = (GLvoid *) 0;
667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
6683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLvoid *) (_dataBase + _bufferOffset);
672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexSubImage3D(
674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)data
685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, data, JNI_FALSE);
688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 ) */
692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCompressedTexSubImage3D__IIIIIIIIIII
694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCompressedTexSubImage3D(
696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)xoffset,
699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)yoffset,
700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)zoffset,
701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth,
704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)format,
705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)imageSize,
70601c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenQueries ( GLsizei n, GLuint *ids ) */
711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenQueries__I_3II
713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
7353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenQueries(
739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
7453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenQueries ( GLsizei n, GLuint *ids ) */
754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenQueries__ILjava_nio_IntBuffer_2
756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
7573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
7623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
7643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenQueries(
768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
7723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, 0);
773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteQueries__I_3II
779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
8013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteQueries(
805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
8113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteQueries__ILjava_nio_IntBuffer_2
822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
8233b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
8283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
8303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteQueries(
834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
8383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsQuery ( GLuint id ) */
843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsQuery__I
845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id) {
846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsQuery(
848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBeginQuery ( GLenum target, GLuint id ) */
854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBeginQuery__II
856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint id) {
857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBeginQuery(
858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glEndQuery ( GLenum target ) */
864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glEndQuery__I
866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target) {
867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glEndQuery(
868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target
869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryiv__II_3II
875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
8973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryiv(
901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
9083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryiv__IILjava_nio_IntBuffer_2
919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
9203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
9253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
9273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryiv(
931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
9363b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryObjectuiv__II_3II
943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id, jint pname, jintArray params_ref, jint offset) {
944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
9653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryObjectuiv(
969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id,
970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
9763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2
987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id, jint pname, jobject params_buf) {
9883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
9933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
9953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetQueryObjectuiv(
999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id,
1000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
1001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
1002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
10043b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
1005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glUnmapBuffer ( GLenum target ) */
1009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
1010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUnmapBuffer__I
1011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target) {
1012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
1013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glUnmapBuffer(
1014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target
1015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
1017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferPointerv ( GLenum target, GLenum pname, GLvoid** params ) */
1020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jobject
1021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferPointerv__II
1022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname) {
1023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 _mapLength;
1024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid* _p;
1025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v((GLenum)target, GL_BUFFER_MAP_LENGTH, &_mapLength);
1026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferPointerv((GLenum)target, (GLenum)pname, &_p);
1027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _env->NewDirectByteBuffer(_p, _mapLength);
1028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
1031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawBuffers__I_3II
1033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray bufs_ref, jint offset) {
1034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs_base = (GLenum *) 0;
1038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs = (GLenum *) 0;
1040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!bufs_ref) {
1042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "bufs == null";
1045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(bufs_ref) - offset;
1054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufs_base = (GLenum *)
10553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(bufs_ref, (jboolean *)0);
1056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    bufs = bufs_base + offset;
1057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawBuffers(
1059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)bufs
1061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (bufs_base) {
10653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(bufs_ref, (jint*)bufs_base,
1066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
1074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawBuffers__ILjava_nio_IntBuffer_2
1076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject bufs_buf) {
10773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *bufs = (GLenum *) 0;
1081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
10823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    bufs = (GLenum *)getPointer(_env, bufs_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (bufs == NULL) {
10843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _bufsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        bufs = (GLenum *) (_bufsBase + _bufferOffset);
1086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawBuffers(
1088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)bufs
1090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
10923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)bufs, JNI_ABORT);
1093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x3fv__IIZ_3FI
1099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
11213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x3fv(
1125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
11333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2
1144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
11453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
11503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
11523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x3fv(
1156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
11623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x2fv__IIZ_3FI
1169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
11913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x2fv(
1195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
12033b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2
1214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
12153b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
12203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
12223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x2fv(
1226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
12323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x4fv__IIZ_3FI
1239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
12613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x4fv(
1265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
12733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2
1284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
12853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
12903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
12923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix2x4fv(
1296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
13023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x2fv__IIZ_3FI
1309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
13313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x2fv(
1335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
13433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2
1354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
13553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
13603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
13623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x2fv(
1366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
13723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x4fv__IIZ_3FI
1379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
14013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x4fv(
1405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
14133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2
1424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
14253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
14303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
14323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix3x4fv(
1436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
14423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x3fv__IIZ_3FI
1449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
1450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
1454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
1458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
1461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
1470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
14713b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
1472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
1473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x3fv(
1475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
14833b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
1484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
1492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2
1494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
14953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
1496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
1499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
15003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
15023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
1503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
1504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformMatrix4x3fv(
1506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
1507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
1508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLboolean)transpose,
1509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
1510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
15123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
1513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBlitFramebuffer ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter ) */
1517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBlitFramebuffer__IIIIIIIIII
1519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
1520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBlitFramebuffer(
1521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcX0,
1522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcY0,
1523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcX1,
1524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)srcY1,
1525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstX0,
1526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstY0,
1527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstX1,
1528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)dstY1,
1529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)mask,
1530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)filter
1531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glRenderbufferStorageMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height ) */
1535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glRenderbufferStorageMultisample__IIIII
1537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height) {
1538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glRenderbufferStorageMultisample(
1539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)samples,
1541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
1542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
1543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
1544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glFramebufferTextureLayer ( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ) */
1548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFramebufferTextureLayer__IIIII
1550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level, jint layer) {
1551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glFramebufferTextureLayer(
1552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)attachment,
1554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)texture,
1555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)level,
1556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)layer
1557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLvoid * glMapBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) */
1561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jobject
1562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glMapBufferRange__IIII
1563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint offset, jint length, jint access) {
1564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid* _p = glMapBufferRange((GLenum)target,
1565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            (GLintptr)offset, (GLsizeiptr)length, (GLbitfield)access);
1566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jobject _buf = (jobject)0;
1567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_p) {
1568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _buf = _env->NewDirectByteBuffer(_p, length);
1569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _buf;
1571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glFlushMappedBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length ) */
1574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFlushMappedBufferRange__III
1576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint offset, jint length) {
1577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glFlushMappedBufferRange(
1578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)offset,
1580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)length
1581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindVertexArray ( GLuint array ) */
1585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindVertexArray__I
1587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint array) {
1588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindVertexArray(
1589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)array
1590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteVertexArrays__I_3II
1596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays_base = (GLuint *) 0;
1601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!arrays_ref) {
1605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "arrays == null";
1608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(arrays_ref) - offset;
1617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays_base = (GLuint *)
16183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
1619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays = arrays_base + offset;
1620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteVertexArrays(
1622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays_base) {
16283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
1629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
1630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
1637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteVertexArrays__ILjava_nio_IntBuffer_2
1639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
16403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
16453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays == NULL) {
16473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        arrays = (GLuint *) (_arraysBase + _bufferOffset);
1649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteVertexArrays(
1651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
16553b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)arrays, JNI_ABORT);
1656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenVertexArrays__I_3II
1662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
1663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays_base = (GLuint *) 0;
1667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!arrays_ref) {
1671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "arrays == null";
1674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(arrays_ref) - offset;
1683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays_base = (GLuint *)
16843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
1685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    arrays = arrays_base + offset;
1686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenVertexArrays(
1688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays_base) {
16943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
1695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
1703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenVertexArrays__ILjava_nio_IntBuffer_2
1705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
17063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *arrays = (GLuint *) 0;
1710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
17113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (arrays == NULL) {
17133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        arrays = (GLuint *) (_arraysBase + _bufferOffset);
1715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenVertexArrays(
1717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
1718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)arrays
1719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
17213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)arrays, 0);
1722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsVertexArray ( GLuint array ) */
1726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
1727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsVertexArray__I
1728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint array) {
1729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
1730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsVertexArray(
1731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)array
1732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
1734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetIntegeri_v__II_3II
1739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jintArray data_ref, jint offset) {
1740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
1742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
1743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data_base = (GLint *) 0;
1744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data = (GLint *) 0;
1746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!data_ref) {
1748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "data == null";
1751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
1754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
1757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
1760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data_base = (GLint *)
17613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(data_ref, (jboolean *)0);
1762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data = data_base + offset;
1763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetIntegeri_v(
1765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)data
1768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data_base) {
17723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(data_ref, (jint*)data_base,
1773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
1781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetIntegeri_v__IILjava_nio_IntBuffer_2
1783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
17843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
1785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
1786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
1787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *data = (GLint *) 0;
1788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
17893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLint *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
1790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
17913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
1792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLint *) (_dataBase + _bufferOffset);
1793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetIntegeri_v(
1795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)data
1798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
18003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)data, 0);
1801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBeginTransformFeedback ( GLenum primitiveMode ) */
1805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBeginTransformFeedback__I
1807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint primitiveMode) {
1808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBeginTransformFeedback(
1809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)primitiveMode
1810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glEndTransformFeedback ( void ) */
1814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glEndTransformFeedback__
1816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
1817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glEndTransformFeedback();
1818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindBufferRange ( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
1821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindBufferRange__IIIII
1823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer, jint offset, jint size) {
1824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindBufferRange(
1825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)buffer,
1828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)offset,
1829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)size
1830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindBufferBase ( GLenum target, GLuint index, GLuint buffer ) */
1834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindBufferBase__III
1836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer) {
1837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindBufferBase(
1838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
1839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)buffer
1841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode ) */
1845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
1846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
1847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTransformFeedbackVaryings
1848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray varyings_ref, jint bufferMode) {
1849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
1851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
1852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0, _i;
1853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _varyings = NULL;
1854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _varying = NULL;
1855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!varyings_ref) {
1857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "varyings == null";
1860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(varyings_ref);
1864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _varyings = (const char**)calloc(_count, sizeof(const char*));
1865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
1866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
1867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_varying) {
1868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
1869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
1870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null varyings element";
1871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
1872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
1873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _varyings[_i] = _env->GetStringUTFChars(_varying, 0);
1874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTransformFeedbackVaryings(program, _count, _varyings, bufferMode);
1877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
1880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_varyings[_i]) {
1881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
1882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_varying) {
1883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_varying, _varyings[_i]);
1884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
1885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
1886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_varyings);
1888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
1889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
1890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
1892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
1894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
1895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
1896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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) {
1897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
1898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
1899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
1900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
1901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
1902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
1903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size_base = (GLint *) 0;
1904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
1905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
1906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type_base = (GLenum *) 0;
1907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
1908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
1909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char *name_base = (char *) 0;
1910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
1911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char *name = (char *) 0;
1912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!length_ref) {
1914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "length == null";
1917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (lengthOffset < 0) {
1920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "lengthOffset < 0";
1923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
1926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    length_base = (GLsizei *)
19273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(length_ref, (jboolean *)0);
1928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    length = length_base + lengthOffset;
1929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!size_ref) {
1931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "size == null";
1934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (sizeOffset < 0) {
1937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "sizeOffset < 0";
1940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
1943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size_base = (GLint *)
19443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
1945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size = size_base + sizeOffset;
1946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!type_ref) {
1948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "type == null";
1951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (typeOffset < 0) {
1954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "typeOffset < 0";
1957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
1960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type_base = (GLenum *)
19613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
1962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type = type_base + typeOffset;
1963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name_ref) {
1965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "name == null";
1968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (nameOffset < 0) {
1971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
1972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
1973d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "nameOffset < 0";
1974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
1975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
1977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    name_base = (char *)
19783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetByteArrayElements(name_ref, (jboolean *)0);
1979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    name = name_base + nameOffset;
1980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
1982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
1983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
1984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufsize,
1985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
1986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
1987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
1988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)name
1989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
1990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
1991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
1992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (name_base) {
19933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
1994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
1996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type_base) {
19973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
1998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
1999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size_base) {
20013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
2002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
20053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
2006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
2016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
20173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
2018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
20193b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
2020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeBufferOffset = (jint) 0;
20213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
2022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeBufferOffset = (jint) 0;
2023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
20303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
20313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
20323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
2033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length == NULL) {
20343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
2035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
2036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size == NULL) {
20383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
2039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
2040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type == NULL) {
20423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
2043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
2044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufsize,
2049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
2050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
205210caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        // The cast below is incorrect. The driver will end up writing to the
205310caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        // address specified by name, which will always crash the process since
205410caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        // it is guaranteed to be in low memory. The additional static_cast
205510caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        // suppresses the warning for now. http://b/19478262
205610caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        (char *)static_cast<uintptr_t>(name)
2057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_typeArray) {
20593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
2060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_sizeArray) {
20623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
2063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
20653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
2066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
2071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying1
2072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
2073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType;
2075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage;
2076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size_base = (GLint *) 0;
2077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type_base = (GLenum *) 0;
2080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = 0;
2084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
2086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!len) {
2088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return _env->NewStringUTF("");
2089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) malloc(len);
2091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf == NULL) {
2093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return NULL;
2095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!size_ref) {
2097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "size == null";
2100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (sizeOffset < 0) {
2103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "sizeOffset < 0";
2106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
2109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size_base = (GLint *)
21103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(size_ref, (jboolean *)0);
2111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    size = size_base + sizeOffset;
2112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!type_ref) {
2114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "type == null";
2117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (typeOffset < 0) {
2120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "typeOffset < 0";
2123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
2126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type_base = (GLenum *)
21273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(type_ref, (jboolean *)0);
2128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    type = type_base + typeOffset;
2129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)len,
2134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        NULL,
2135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)buf
2138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type_base) {
21413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
2142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size_base) {
21453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
2146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception != 1) {
2149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        result = _env->NewStringUTF(buf);
2150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
2152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        free(buf);
2153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (result == 0) {
2158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        result = _env->NewStringUTF("");
2159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
2162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
2165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
2166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetTransformFeedbackVarying2
2167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
21683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _sizeArray = (jintArray) 0;
2169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeBufferOffset = (jint) 0;
21703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _typeArray = (jintArray) 0;
2171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeBufferOffset = (jint) 0;
2172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
2173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
2174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _sizeRemaining;
2175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *size = (GLint *) 0;
2176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _typeRemaining;
2177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *type = (GLenum *) 0;
2178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = 0;
2180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
2182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
2183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!len) {
2184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return _env->NewStringUTF("");
2185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* buf = (char*) malloc(len);
2187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf == NULL) {
2189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
2190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        return NULL;
2191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
21933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
21943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
2195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (size == NULL) {
21963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
2197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
2198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (type == NULL) {
22003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
2201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
2202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetTransformFeedbackVarying(
2204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)len,
2207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        NULL,
2208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)size,
2209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)type,
2210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (char *)buf
2211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_typeArray) {
22143b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
2215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_sizeArray) {
22173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
2218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    result = _env->NewStringUTF(buf);
2220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (buf) {
2221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        free(buf);
2222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
2224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
2226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I
2228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
2229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
2230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *pointer = (GLvoid *) 0;
2233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (pointer_buf) {
2235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
2236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if ( ! pointer ) {
2237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            return;
2238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
2239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointerBounds(
2241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)size,
2243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
2244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)stride,
2245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)pointer,
2246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)remaining
2247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, GLsizei offset ) */
2251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribIPointer__IIIII
2253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jint offset) {
2254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribIPointer(
2255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)size,
2257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
2258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)stride,
225901c26ea89d4bbea3cf550e9328742302dd9a2b25Ashok Bhat        reinterpret_cast<GLvoid *>(offset)
2260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIiv__II_3II
2266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
2271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
2273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
22883b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIiv(
2292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
2295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
22993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
2308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2
2310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
23113b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
2315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
23163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
23183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
2320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIiv(
2322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
2325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
23273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
2328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIuiv__II_3II
2334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
2335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
2339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2352d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
23563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIuiv(
2360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
23673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
2376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2
2378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
23793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
23843b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
23863b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
2388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetVertexAttribIuiv(
2390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
2392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
23953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
2396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4i ( GLuint index, GLint x, GLint y, GLint z, GLint w ) */
2400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4i__IIIII
2402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4i(
2404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
2406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
2407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)z,
2408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)w
2409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4ui ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w ) */
2413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4ui__IIIII
2415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
2416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4ui(
2417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)x,
2419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)y,
2420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)z,
2421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)w
2422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4iv__I_3II
2428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v_base = (GLint *) 0;
2433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v = (GLint *) 0;
2435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!v_ref) {
2437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "v == null";
2440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(v_ref) - offset;
2449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v_base = (GLint *)
24503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(v_ref, (jboolean *)0);
2451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v = v_base + offset;
2452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4iv(
2454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)v
2456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v_base) {
24603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
2461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
2469d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4iv__ILjava_nio_IntBuffer_2
2471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
24723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *v = (GLint *) 0;
2476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
24773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v == NULL) {
24793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        v = (GLint *) (_vBase + _bufferOffset);
2481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4iv(
2483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)v
2485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
24873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
2488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4uiv__I_3II
2494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
2495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v_base = (GLuint *) 0;
2499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v = (GLuint *) 0;
2501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!v_ref) {
2503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "v == null";
2506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(v_ref) - offset;
2515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v_base = (GLuint *)
25163b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(v_ref, (jboolean *)0);
2517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    v = v_base + offset;
2518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4uiv(
2520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)v
2522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v_base) {
25263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
2527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
2535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2
2537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
25383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *v = (GLuint *) 0;
2542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
25433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    v = (GLuint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (v == NULL) {
25453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        v = (GLuint *) (_vBase + _bufferOffset);
2547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribI4uiv(
2549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
2550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)v
2551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
25533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
2554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformuiv__II_3II
2560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jintArray params_ref, jint offset) {
2561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params_base = (GLuint *) 0;
2565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
2569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
2572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2576d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
2581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLuint *)
25823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
2583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
2584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformuiv(
2586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
25933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
2594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
2595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
2602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformuiv__IILjava_nio_IntBuffer_2
2604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
26053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *params = (GLuint *) 0;
2609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
26103b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
26123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLuint *) (_paramsBase + _bufferOffset);
2614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformuiv(
2616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)params
2619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
26213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
2622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLint glGetFragDataLocation ( GLuint program, const GLchar *name ) */
2626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
2627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetFragDataLocation__ILjava_lang_String_2
2628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jstring name) {
2629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint _returnValue = 0;
2633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _nativename = 0;
2634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name) {
2636428d3fcbe3596b18549cdada9fc68a29f159a946Elliott Hughes        _exception = 1;
2637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "name == null";
2639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nativename = _env->GetStringUTFChars(name, 0);
2642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glGetFragDataLocation(
2644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
2645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar *)_nativename
2646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nativename) {
2650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->ReleaseStringUTFChars(name, _nativename);
2651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
2657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1ui ( GLint location, GLuint v0 ) */
2660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1ui__II
2662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0) {
2663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1ui(
2664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0
2666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2ui ( GLint location, GLuint v0, GLuint v1 ) */
2670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2ui__III
2672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1) {
2673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2ui(
2674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
2676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1
2677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3ui ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
2681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3ui__IIII
2683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2) {
2684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3ui(
2685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
2687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1,
2688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v2
2689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4ui ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
2693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4ui__IIIII
2695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2, jint v3) {
2696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4ui(
2697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v0,
2699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v1,
2700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v2,
2701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)v3
2702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
2706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1uiv__II_3II
2708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
27303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1uiv(
2734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
27413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
2750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform1uiv__IILjava_nio_IntBuffer_2
2752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
27533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
27583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
27603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform1uiv(
2764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
27693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
2774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2uiv__II_3II
2776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
27983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2uiv(
2802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
28093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
2818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform2uiv__IILjava_nio_IntBuffer_2
2820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
28213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
28263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
28283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform2uiv(
2832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
28373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
2842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3uiv__II_3II
2844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2858d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
28663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3uiv(
2870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
28773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2885d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
2886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform3uiv__IILjava_nio_IntBuffer_2
2888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
28893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
28943b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
28963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform3uiv(
2900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
29053b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
2910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4uiv__II_3II
2912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
2913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
2917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
2933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
29343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
2935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
2936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4uiv(
2938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
2944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
29453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
2946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
2947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
2949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
2950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
2954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniform4uiv__IILjava_nio_IntBuffer_2
2956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
29573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
2958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
2959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
2961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
29623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
2963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
29643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
2965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
2966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniform4uiv(
2968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)location,
2969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
2970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
2971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
2972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
29733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
2974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
2976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
2978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
2979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferiv__II_3II
2980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
2981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
2982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
2983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
2984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value_base = (GLint *) 0;
2985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
2986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value = (GLint *) 0;
2987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
2988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
2989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
2992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
2994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
2995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
2996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
2998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
2999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLint *)
30023b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferiv(
3006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)value
3009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
30133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
3022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferiv__IILjava_nio_IntBuffer_2
3024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
30253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *value = (GLint *) 0;
3029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
30303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
30323b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3033d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLint *) (_valueBase + _bufferOffset);
3034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferiv(
3036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)value
3039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
30413b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3045d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
3046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferuiv__II_3II
3048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
3049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3050d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3052d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value_base = (GLuint *) 0;
3053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLuint *)
30703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(value_ref, (jboolean *)0);
3071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferuiv(
3074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
30813b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
3082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
3090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferuiv__IILjava_nio_IntBuffer_2
3092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
30933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *value = (GLuint *) 0;
3097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
30983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
31003b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLuint *) (_valueBase + _bufferOffset);
3102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferuiv(
3104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)value
3107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
31093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
3110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfv__II_3FI
3116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloatArray value_ref, jint offset) {
3117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value_base = (GLfloat *) 0;
3121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
3123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!value_ref) {
3125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "value == null";
3128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(value_ref) - offset;
3137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value_base = (GLfloat *)
31383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(value_ref, (jboolean *)0);
3139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    value = value_base + offset;
3140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfv(
3142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
3145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value_base) {
31493b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
3150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
3158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfv__IILjava_nio_FloatBuffer_2
3160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
31613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
3162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *value = (GLfloat *) 0;
3165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
31663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (value == NULL) {
31683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
3169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        value = (GLfloat *) (_valueBase + _bufferOffset);
3170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfv(
3172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)value
3175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
31773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
3178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glClearBufferfi ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil ) */
3182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClearBufferfi__IIFI
3184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloat depth, jint stencil) {
3185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glClearBufferfi(
3186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)buffer,
3187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)drawbuffer,
3188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat)depth,
3189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)stencil
3190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* const GLubyte * glGetStringi ( GLenum name, GLuint index ) */
3194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
3195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetStringi__II
3196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint name, jint index) {
3197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const GLubyte* _chars = glGetStringi((GLenum)name, (GLuint)index);
3198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return _env->NewStringUTF((const char*)_chars);
3199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glCopyBufferSubData ( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ) */
3202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glCopyBufferSubData__IIIII
3204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint readTarget, jint writeTarget, jint readOffset, jint writeOffset, jint size) {
3205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glCopyBufferSubData(
3206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)readTarget,
3207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)writeTarget,
3208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)readOffset,
3209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLintptr)writeOffset,
3210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizeiptr)size
3211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
3216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
3217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformIndices_array
3218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jintArray uniformIndices_ref, jint uniformIndicesOffset) {
3219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
3221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
3222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0;
3223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _i;
3224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _names = NULL;
3225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices_base = NULL;
3226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices = NULL;
3227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformNames_ref) {
3229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformNames == null";
3232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(uniformNames_ref);
3235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _names = (const char**)calloc(_count, sizeof(const char*));
3236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
3237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_name) {
3239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
3240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
3241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null uniformNames element";
3242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
3243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _names[_i] = _env->GetStringUTFChars(_name, 0);
3245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_ref) {
3248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndicesOffset < 0) {
3254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndicesOffset < 0";
3257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset < _count) {
3260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "not enough space in uniformIndices";
3263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
32653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _indices_base = (GLuint*)_env->GetIntArrayElements(
3266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            uniformIndices_ref, 0);
3267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _indices = _indices_base + uniformIndicesOffset;
3268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformIndices(program, _count, _names, _indices);
3270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_indices_base) {
32733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)_indices_base,
32743b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _exception ? JNI_ABORT : 0);
3275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
3277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_names[_i]) {
3278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_name) {
3280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_name, _names[_i]);
3281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
3282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_names);
3285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
3291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic
3292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallvoid
3293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformIndices_buffer
3294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jobject uniformIndices_buf) {
3295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType = NULL;
3297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage = NULL;
3298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _count = 0;
3299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _i;
3300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char** _names = NULL;
33013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _uniformIndicesArray = (jintArray)0;
3302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesOffset = 0;
3304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint* _indices = NULL;
3305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    char* _indicesBase = NULL;
3306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformNames_ref) {
3308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformNames == null";
3311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_buf) {
3314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _count = _env->GetArrayLength(uniformNames_ref);
3321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _names = (const char**)calloc(_count, sizeof(const char*));
3322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = 0; _i < _count; _i++) {
3323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (!_name) {
3325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception = 1;
3326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionType = "java/lang/IllegalArgumentException";
3327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exceptionMessage = "null uniformNames element";
3328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            goto exit;
3329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _names[_i] = _env->GetStringUTFChars(_name, 0);
3331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
33343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining,
3335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            &_uniformIndicesOffset);
3336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!_indices) {
33373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _indicesBase = (char*)_env->GetIntArrayElements(
33383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _uniformIndicesArray, 0);
3339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
3340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesRemaining < _count) {
3342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "not enough space in uniformIndices";
3345d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetUniformIndices(program, _count, _names, _indices);
3349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3350d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesArray) {
33523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(
33533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi            _env, _uniformIndicesArray, (jint*)_indicesBase, JNI_TRUE);
3354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    for (_i = _count - 1; _i >= 0; _i--) {
3356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        if (_names[_i]) {
3357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
3358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            if (_name) {
3359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall                _env->ReleaseStringUTFChars(_name, _names[_i]);
3360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            }
3361d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        }
3362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(_names);
3364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformsiv__II_3III_3II
3371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jintArray uniformIndices_ref, jint uniformIndicesOffset, jint pname, jintArray params_ref, jint paramsOffset) {
3372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices_base = (GLuint *) 0;
3376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices = (GLuint *) 0;
3378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
3379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsRemaining;
3380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformIndices_ref) {
3383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndices == null";
3386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndicesOffset < 0) {
3389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformIndicesOffset < 0";
3392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _uniformIndicesRemaining = _env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset;
3395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    uniformIndices_base = (GLuint *)
33963b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(uniformIndices_ref, (jboolean *)0);
3397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    uniformIndices = uniformIndices_base + uniformIndicesOffset;
3398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3401d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (paramsOffset < 0) {
3406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "paramsOffset < 0";
3409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
3412d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
34133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
3414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + paramsOffset;
3415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformsiv(
3417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)uniformCount,
3419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)uniformIndices,
3420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3424d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
34263b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
3427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3429d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndices_base) {
34303b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)uniformIndices_base,
3431d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
3432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
3439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3440d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2
3441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jobject uniformIndices_buf, jint pname, jobject params_buf) {
34423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _uniformIndicesArray = (jintArray) 0;
3443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesBufferOffset = (jint) 0;
34443b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _paramsArray = (jintArray) 0;
3445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsBufferOffset = (jint) 0;
3446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _uniformIndicesRemaining;
3447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *uniformIndices = (GLuint *) 0;
3448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _paramsRemaining;
3449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
34513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
34523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
3453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (uniformIndices == NULL) {
34543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _uniformIndicesBase = (char *)_env->GetIntArrayElements(_uniformIndicesArray, (jboolean *) 0);
3455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        uniformIndices = (GLuint *) (_uniformIndicesBase + _uniformIndicesBufferOffset);
3456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
34583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
3459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _paramsBufferOffset);
3460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformsiv(
3462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)uniformCount,
3464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)uniformIndices,
3465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_paramsArray) {
34693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, 0);
3470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_uniformIndicesArray) {
34723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_uniformIndicesArray, (jint*)uniformIndices, JNI_ABORT);
3473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLuint glGetUniformBlockIndex ( GLuint program, const GLchar *uniformBlockName ) */
3477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
3478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetUniformBlockIndex__ILjava_lang_String_2
3479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jstring uniformBlockName) {
3480d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint _returnValue = 0;
3484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _nativeuniformBlockName = 0;
3485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!uniformBlockName) {
3487428d3fcbe3596b18549cdada9fc68a29f159a946Elliott Hughes        _exception = 1;
3488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockName == null";
3490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3492d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nativeuniformBlockName = _env->GetStringUTFChars(uniformBlockName, 0);
3493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glGetUniformBlockIndex(
3495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar *)_nativeuniformBlockName
3497d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3499d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nativeuniformBlockName) {
3501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _env->ReleaseStringUTFChars(uniformBlockName, _nativeuniformBlockName);
3502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
3508d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockiv__III_3II
3513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jintArray params_ref, jint offset) {
3514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
3518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
35353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
3536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
3537d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv(
3539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
35473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
3548d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
3556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2
3558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jobject params_buf) {
35593b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
3560d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
3563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
35643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3565d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
35663b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
3567d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
3568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv(
3570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
3574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
35763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
3577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_III_3II_3BI
3583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, jbyteArray name_ref, jint nameOffset) {
3584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType;
3586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage;
3587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length_base = (GLsizei*)0;
3588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length = (GLsizei*)0;
3590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name_base = (GLchar*)0;
3591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
3592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name = (GLchar*)0;
3593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!length_ref) {
3595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "length == null";
3598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (lengthOffset < 0) {
3601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "lengthOffset < 0";
3604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
36073b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _length_base = (GLsizei*)_env->GetIntArrayElements(
3608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            length_ref, (jboolean*)0);
3609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _length = _length_base + lengthOffset;
3610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!name_ref) {
3612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockName == null";
3615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (nameOffset < 0) {
3618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "uniformBlockNameOffset < 0";
3621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
36243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    _name_base = (GLchar*)_env->GetByteArrayElements(
3625d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            name_ref, (jboolean*)0);
3626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _name = _name_base + nameOffset;
3627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName(
3629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
3632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei*)_length,
3633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLchar*)_name
3634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3635d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_name_base) {
36383b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base,
3639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_length_base) {
36423b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base,
3643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3647d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3652d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2
3653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) {
3654d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionType;
3656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char* _exceptionMessage;
3657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _lengthArray = (jarray)0;
3658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint)0;
3659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei* _length = (GLsizei*)0;
3660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _nameArray = (jarray)0;
3662d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameBufferOffset = (jint)0;
3663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* _name = (GLchar*)0;
3664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _nameRemaining;
3665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
3667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_length == NULL) {
3668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0);
3669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _length = (GLsizei*)(_lengthBase + _lengthBufferOffset);
3670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset);
3673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_name == NULL) {
3674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0);
3675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _name = (GLchar*)(_nameBase + _nameBufferOffset);
3676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName(
3679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)_nameRemaining,
3682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _length, _name
3683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_nameArray) {
3685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _nameArray, _name, JNI_TRUE);
3686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
3688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _lengthArray, _length, JNI_TRUE);
3689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3691d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
3693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jstring
3694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetActiveUniformBlockName_II
3695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) {
3696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint len = 0;
3697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex,
3698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            GL_UNIFORM_BLOCK_NAME_LENGTH, &len);
3699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLchar* name = (GLchar*)malloc(len);
3700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex,
3701d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        len, NULL, name);
3702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jstring result = _env->NewStringUTF(name);
3703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    free(name);
3704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return result;
3705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) */
3707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glUniformBlockBinding__III
3709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint uniformBlockBinding) {
3710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glUniformBlockBinding(
3711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
3712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockIndex,
3713d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)uniformBlockBinding
3714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawArraysInstanced ( GLenum mode, GLint first, GLsizei count, GLsizei instanceCount ) */
3718d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawArraysInstanced__IIII
3720d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint first, jint count, jint instanceCount) {
3721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawArraysInstanced(
3722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
3723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)first,
3724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
3726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3728d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
3730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawElementsInstanced__IIILjava_nio_Buffer_2I
3732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint instanceCount) {
3733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
3734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *indices = (GLvoid *) 0;
3737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
3739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (indices == NULL) {
3740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
3741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        indices = (GLvoid *) (_indicesBase + _bufferOffset);
3742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawElementsInstanced(
3744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
3745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
3747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)indices,
3748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
3749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
3751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, indices, JNI_FALSE);
3752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
3756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDrawElementsInstanced__IIIII
3758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint indicesOffset, jint instanceCount) {
3759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDrawElementsInstanced(
3760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)mode,
3761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
3762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)type,
376310caf0390d39f0bd46876eee6ab2c9a73d4e1d39Dan Albert        (GLvoid *)static_cast<uintptr_t>(indicesOffset),
3764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)instanceCount
3765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLsync glFenceSync ( GLenum condition, GLbitfield flags ) */
3768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jlong
3769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glFenceSync__II
3770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint condition, jint flags) {
3771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsync _returnValue;
3772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glFenceSync(
3773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)condition,
3774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags
3775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jlong)_returnValue;
3777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsSync ( GLsync sync ) */
3780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
3781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsSync__J
3782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync) {
3783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
3784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsSync(
3785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync
3786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
3788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3789d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSync ( GLsync sync ) */
3791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSync__J
3793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync) {
3794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSync(
3795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync
3796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLenum glClientWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
3800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jint
3801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glClientWaitSync__JIJ
3802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
3803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum _returnValue;
3804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glClientWaitSync(
3805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3806d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags,
3807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint64)timeout
3808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3809d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jint)_returnValue;
3810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
3813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glWaitSync__JIJ
3815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
3816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glWaitSync(
3817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLbitfield)flags,
3819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint64)timeout
3820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
3824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64v__I_3JI
3826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jlongArray params_ref, jint offset) {
3827d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params_base = (GLint64 *) 0;
3831d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
3833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
3835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
3838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
3841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3843d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
3844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3845d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
3847d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint64 *)
38483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(params_ref, (jboolean *)0);
3849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
3850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64v(
3852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
3854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3856d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3857d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
38583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
3859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3860d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3864d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
3867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64v__ILjava_nio_LongBuffer_2
3869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
38703b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
3871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
3872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
3873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
3874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
38753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
3876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
38773b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
3878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint64 *) (_paramsBase + _bufferOffset);
3879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64v(
3881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3882d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
3883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
38853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(_array, (jlong*)params, 0);
3886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
3890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSynciv__JII_3II_3II
3892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray values_ref, jint valuesOffset) {
3893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
3894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
3895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
3896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
3897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3898d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
3899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values_base = (GLint *) 0;
3900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesRemaining;
3901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values = (GLint *) 0;
3902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!length_ref) {
3904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "length == null";
3907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (lengthOffset < 0) {
3910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "lengthOffset < 0";
3913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
3916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    length_base = (GLsizei *)
39173b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(length_ref, (jboolean *)0);
3918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    length = length_base + lengthOffset;
3919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!values_ref) {
3921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "values == null";
3924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (valuesOffset < 0) {
3927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
3928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "valuesOffset < 0";
3930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
3931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _valuesRemaining = _env->GetArrayLength(values_ref) - valuesOffset;
3933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    values_base = (GLint *)
39343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(values_ref, (jboolean *)0);
3935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    values = values_base + valuesOffset;
3936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSynciv(
3938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
3941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
3942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)values
3943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
3946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (values_base) {
39473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(values_ref, (jint*)values_base,
3948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3950d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
39513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
3952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
3953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
3955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
3956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
3960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3961d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
3962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jobject length_buf, jobject values_buf) {
39633b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
3964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
39653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _valuesArray = (jintArray) 0;
3966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesBufferOffset = (jint) 0;
3967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
3968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
3969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _valuesRemaining;
3970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *values = (GLint *) 0;
3971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
39723b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
39733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    values = (GLint *)getPointer(_env, values_buf, (jarray*)&_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
3974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length == NULL) {
39753b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
3976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
3977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3978d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (values == NULL) {
39793b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _valuesBase = (char *)_env->GetIntArrayElements(_valuesArray, (jboolean *) 0);
3980d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        values = (GLint *) (_valuesBase + _valuesBufferOffset);
3981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSynciv(
3983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsync)sync,
3984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
3985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
3986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
3987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)values
3988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
3989d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_valuesArray) {
39903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_valuesArray, (jint*)values, 0);
3991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
39933b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
3994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
3995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
3996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
3997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
3998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
3999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64i_v__II_3JI
4000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jlongArray data_ref, jint offset) {
4001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data_base = (GLint64 *) 0;
4005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data = (GLint64 *) 0;
4007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!data_ref) {
4009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "data == null";
4012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4018d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(data_ref) - offset;
4021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data_base = (GLint64 *)
40223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(data_ref, (jboolean *)0);
4023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    data = data_base + offset;
4024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64i_v(
4026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)data
4029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data_base) {
40333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(data_ref, (jlong*)data_base,
4034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
4042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInteger64i_v__IILjava_nio_LongBuffer_2
4044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
40453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *data = (GLint64 *) 0;
4049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
40503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    data = (GLint64 *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (data == NULL) {
40523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _dataBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        data = (GLint64 *) (_dataBase + _bufferOffset);
4054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInteger64i_v(
4056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)data
4059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
40613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(_array, (jlong*)data, 0);
4062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4065d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
4066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferParameteri64v__II_3JI
4068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jlongArray params_ref, jint offset) {
4069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params_base = (GLint64 *) 0;
4073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint64 *)
40903b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetLongArrayElements(params_ref, (jboolean *)0);
4091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v(
4094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
41013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
4102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
4110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2
4112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
41133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jlongArray _array = (jlongArray) 0;
4114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint64 *params = (GLint64 *) 0;
4117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
41183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
41203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
4121d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint64 *) (_paramsBase + _bufferOffset);
4122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetBufferParameteri64v(
4124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint64 *)params
4127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
41293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseLongArrayElements(_array, (jlong*)params, 0);
4130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4134d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenSamplers__I_3II
4136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers_base = (GLuint *) 0;
4141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!samplers_ref) {
4145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4146d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "samplers == null";
4148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4151d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4153d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(samplers_ref) - offset;
4157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers_base = (GLuint *)
41583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
4159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers = samplers_base + offset;
4160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenSamplers(
4162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4164d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers_base) {
41683b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
4169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
4177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenSamplers__ILjava_nio_IntBuffer_2
4179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
41803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
41853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers == NULL) {
41873b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        samplers = (GLuint *) (_samplersBase + _bufferOffset);
4189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenSamplers(
4191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
41953b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)samplers, 0);
4196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSamplers__I_3II
4202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
4203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers_base = (GLuint *) 0;
4207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!samplers_ref) {
4211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "samplers == null";
4214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(samplers_ref) - offset;
4223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers_base = (GLuint *)
42243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
4225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    samplers = samplers_base + offset;
4226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSamplers(
4228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers_base) {
42343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
4235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
4243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteSamplers__ILjava_nio_IntBuffer_2
4245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
42463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *samplers = (GLuint *) 0;
4250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
42513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (samplers == NULL) {
42533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        samplers = (GLuint *) (_samplersBase + _bufferOffset);
4255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteSamplers(
4257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)count,
4258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)samplers
4259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
42613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)samplers, JNI_ABORT);
4262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsSampler ( GLuint sampler ) */
4266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
4267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsSampler__I
4268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler) {
4269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
4270d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsSampler(
4271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler
4272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
4274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindSampler ( GLuint unit, GLuint sampler ) */
4277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindSampler__II
4279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint unit, jint sampler) {
4280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindSampler(
4281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)unit,
4282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler
4283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteri ( GLuint sampler, GLenum pname, GLint param ) */
4287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteri__III
4289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jint param) {
4290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteri(
4291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)param
4294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteriv__II_3II
4300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
4301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param_base = (GLint *) 0;
4305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param = (GLint *) 0;
4307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!param_ref) {
4309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "param == null";
4312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(param_ref) - offset;
4321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param_base = (GLint *)
43223b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(param_ref, (jboolean *)0);
4323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param = param_base + offset;
4324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteriv(
4326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)param
4329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param_base) {
43333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
4334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4341d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
4342d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4343d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameteriv__IILjava_nio_IntBuffer_2
4344d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
43453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4346d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4347d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4348d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *param = (GLint *) 0;
4349d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
43503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4351d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param == NULL) {
43523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4353d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        param = (GLint *) (_paramBase + _bufferOffset);
4354d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4355d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameteriv(
4356d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4357d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4358d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)param
4359d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4360d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
43613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
4362d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4363d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4364d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4365d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterf ( GLuint sampler, GLenum pname, GLfloat param ) */
4366d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4367d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterf__IIF
4368d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloat param) {
4369d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterf(
4370d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4371d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4372d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat)param
4373d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4374d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4375d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4376d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4377d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4378d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterfv__II_3FI
4379d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray param_ref, jint offset) {
4380d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4381d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4382d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4383d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param_base = (GLfloat *) 0;
4384d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4385d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param = (GLfloat *) 0;
4386d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4387d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!param_ref) {
4388d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4389d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4390d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "param == null";
4391d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4392d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4393d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4394d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4395d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4396d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4397d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4398d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4399d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(param_ref) - offset;
4400d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param_base = (GLfloat *)
44013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(param_ref, (jboolean *)0);
4402d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    param = param_base + offset;
4403d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4404d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterfv(
4405d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4406d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4407d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)param
4408d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4409d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4410d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4411d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param_base) {
44123b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(param_ref, (jfloat*)param_base,
4413d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4414d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4415d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4416d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4417d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4418d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4419d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4420d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
4421d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4422d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glSamplerParameterfv__IILjava_nio_FloatBuffer_2
4423d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
44243b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
4425d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4426d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4427d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *param = (GLfloat *) 0;
4428d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44293b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    param = (GLfloat *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4430d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (param == NULL) {
44313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
4432d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        param = (GLfloat *) (_paramBase + _bufferOffset);
4433d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4434d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glSamplerParameterfv(
4435d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4436d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4437d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)param
4438d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4439d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
44403b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)param, JNI_ABORT);
4441d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4442d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4443d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4444d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
4445d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4446d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameteriv__II_3II
4447d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
4448d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4449d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4450d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4451d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
4452d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4453d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
4454d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4455d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4456d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4457d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4458d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4459d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4460d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4461d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4462d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4463d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4464d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4465d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4466d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4467d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4468d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
44693b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
4470d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4471d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4472d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameteriv(
4473d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4474d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4475d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
4476d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4477d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4478d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4479d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
44803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
4481d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4482d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4483d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4484d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4485d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4486d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4487d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4488d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
4489d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4490d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2
4491d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
44923b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4493d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4494d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4495d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
4496d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
44973b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4498d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
44993b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4500d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
4501d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4502d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameteriv(
4503d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4504d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4505d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
4506d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4507d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
45083b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
4509d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4510d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4511d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4512d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
4513d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4514d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameterfv__II_3FI
4515d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray params_ref, jint offset) {
4516d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4517d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4518d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4519d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params_base = (GLfloat *) 0;
4520d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4521d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params = (GLfloat *) 0;
4522d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4523d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
4524d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4525d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4526d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
4527d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4528d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4529d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4530d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4531d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4532d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4533d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4534d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4535d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
4536d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLfloat *)
45373b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
4538d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
4539d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4540d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameterfv(
4541d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4542d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4543d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)params
4544d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4545d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4546d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4547d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
45483b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
4549d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4550d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4551d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4552d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4553d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4554d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4555d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4556d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
4557d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4558d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2
4559d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
45603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jfloatArray _array = (jfloatArray) 0;
4561d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4562d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4563d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLfloat *params = (GLfloat *) 0;
4564d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
45653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4566d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
45673b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
4568d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLfloat *) (_paramsBase + _bufferOffset);
4569d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4570d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetSamplerParameterfv(
4571d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)sampler,
4572d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4573d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLfloat *)params
4574d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4575d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
45763b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
4577d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4578d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4579d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4580d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glVertexAttribDivisor ( GLuint index, GLuint divisor ) */
4581d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4582d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glVertexAttribDivisor__II
4583d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint index, jint divisor) {
4584d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glVertexAttribDivisor(
4585d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)index,
4586d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)divisor
4587d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4588d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4589d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4590d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glBindTransformFeedback ( GLenum target, GLuint id ) */
4591d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4592d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glBindTransformFeedback__II
4593d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint id) {
4594d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glBindTransformFeedback(
4595d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4596d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
4597d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4598d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4599d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4600d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
4601d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4602d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteTransformFeedbacks__I_3II
4603d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
4604d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4605d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4606d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4607d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
4608d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4609d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4610d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4611d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
4612d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4613d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4614d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
4615d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4616d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4617d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4618d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4619d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4620d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4621d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4622d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4623d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
4624d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
46253b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
4626d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
4627d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4628d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteTransformFeedbacks(
4629d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4630d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4631d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4632d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4633d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4634d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
46353b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
4636d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4637d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4638d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4639d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4640d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4641d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4642d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4643d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
4644d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4645d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2
4646d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
46473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4648d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4649d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4650d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4651d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
46523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4653d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
46543b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4655d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
4656d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4657d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glDeleteTransformFeedbacks(
4658d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4659d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4660d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4661d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
46623b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
4663d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4664d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4665d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4666d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
4667d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4668d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenTransformFeedbacks__I_3II
4669d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
4670d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4671d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4672d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4673d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids_base = (GLuint *) 0;
4674d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4675d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4676d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4677d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!ids_ref) {
4678d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4679d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4680d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "ids == null";
4681d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4682d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4683d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4684d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4685d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4686d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4687d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4688d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4689d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(ids_ref) - offset;
4690d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids_base = (GLuint *)
46913b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
4692d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    ids = ids_base + offset;
4693d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4694d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenTransformFeedbacks(
4695d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4696d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4697d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4698d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4699d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4700d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids_base) {
47013b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
4702d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4703d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4704d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4705d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4706d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4707d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4708d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4709d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
4710d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4711d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2
4712d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
47133b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4714d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4715d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4716d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLuint *ids = (GLuint *) 0;
4717d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
47183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4719d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (ids == NULL) {
47203b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4721d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        ids = (GLuint *) (_idsBase + _bufferOffset);
4722d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4723d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGenTransformFeedbacks(
4724d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)n,
4725d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint *)ids
4726d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4727d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
47283b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)ids, 0);
4729d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4730d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4731d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4732d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* GLboolean glIsTransformFeedback ( GLuint id ) */
4733d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic jboolean
4734d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glIsTransformFeedback__I
4735d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint id) {
4736d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLboolean _returnValue;
4737d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _returnValue = glIsTransformFeedback(
4738d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)id
4739d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4740d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return (jboolean)_returnValue;
4741d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4742d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4743d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glPauseTransformFeedback ( void ) */
4744d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4745d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glPauseTransformFeedback__
4746d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
4747d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glPauseTransformFeedback();
4748d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4749d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4750d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glResumeTransformFeedback ( void ) */
4751d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4752d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glResumeTransformFeedback__
4753d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this) {
4754d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glResumeTransformFeedback();
4755d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4756d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4757d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
4758d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4759d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2
4760d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray binaryFormat_ref, jint binaryFormatOffset, jobject binary_buf) {
4761d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4762d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4763d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4764d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
4765d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4766d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length_base = (GLsizei *) 0;
4767d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4768d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
4769d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat_base = (GLenum *) 0;
4770d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatRemaining;
4771d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat = (GLenum *) 0;
4772d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryRemaining;
4773d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
4774d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4775d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!length_ref) {
4776d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4777d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4778d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "length == null";
4779d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4780d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4781d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (lengthOffset < 0) {
4782d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4783d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4784d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "lengthOffset < 0";
4785d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4786d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4787d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
4788d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    length_base = (GLsizei *)
47893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(length_ref, (jboolean *)0);
4790d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    length = length_base + lengthOffset;
4791d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4792d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!binaryFormat_ref) {
4793d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4794d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4795d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "binaryFormat == null";
4796d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4797d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4798d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormatOffset < 0) {
4799d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4800d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4801d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "binaryFormatOffset < 0";
4802d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4803d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4804d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _binaryFormatRemaining = _env->GetArrayLength(binaryFormat_ref) - binaryFormatOffset;
4805d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    binaryFormat_base = (GLenum *)
48063b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(binaryFormat_ref, (jboolean *)0);
4807d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    binaryFormat = binaryFormat_base + binaryFormatOffset;
4808d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
48093b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_binaryRemaining, &_bufferOffset);
4810d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
4811d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4812d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _bufferOffset);
4813d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4814d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramBinary(
4815d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4816d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4817d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
4818d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)binaryFormat,
4819d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary
4820d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4821d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4822d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4823d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4824d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
4825d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4826d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormat_base) {
48273b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(binaryFormat_ref, (jint*)binaryFormat_base,
4828d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4829d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4830d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length_base) {
48313b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
4832d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
4833d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4834d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4835d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4836d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4837d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4838d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4839d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
4840d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4841d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2
4842d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint bufSize, jobject length_buf, jobject binaryFormat_buf, jobject binary_buf) {
48433b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _lengthArray = (jintArray) 0;
4844d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthBufferOffset = (jint) 0;
48453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _binaryFormatArray = (jintArray) 0;
4846d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatBufferOffset = (jint) 0;
48473b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _binaryArray = (jintArray) 0;
4848d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryBufferOffset = (jint) 0;
4849d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _lengthRemaining;
4850d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLsizei *length = (GLsizei *) 0;
4851d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryFormatRemaining;
4852d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *binaryFormat = (GLenum *) 0;
4853d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _binaryRemaining;
4854d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
4855d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
48563b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
48573b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, (jarray*)&_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
48583b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
4859d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (length == NULL) {
48603b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
4861d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
4862d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4863d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binaryFormat == NULL) {
48643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _binaryFormatBase = (char *)_env->GetIntArrayElements(_binaryFormatArray, (jboolean *) 0);
4865d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binaryFormat = (GLenum *) (_binaryFormatBase + _binaryFormatBufferOffset);
4866d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4867d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
4868d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_binaryArray, (jboolean *) 0);
4869d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _binaryBufferOffset);
4870d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4871d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetProgramBinary(
4872d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4873d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
4874d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei *)length,
4875d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)binaryFormat,
4876d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary
4877d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4878d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_binaryArray) {
4879d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _binaryArray, binary, JNI_TRUE);
4880d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4881d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_binaryFormatArray) {
48823b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_binaryFormatArray, (jint*)binaryFormat, 0);
4883d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4884d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_lengthArray) {
48853b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
4886d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4887d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4888d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4889d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glProgramBinary ( GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length ) */
4890d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4891d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glProgramBinary__IILjava_nio_Buffer_2I
4892d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint binaryFormat, jobject binary_buf, jint length) {
4893d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jarray _array = (jarray) 0;
4894d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4895d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4896d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLvoid *binary = (GLvoid *) 0;
4897d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
48983b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4899d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (binary == NULL) {
4900d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
4901d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        binary = (GLvoid *) (_binaryBase + _bufferOffset);
4902d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4903d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glProgramBinary(
4904d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4905d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)binaryFormat,
4906d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLvoid *)binary,
4907d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)length
4908d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4909d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
4910d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        releasePointer(_env, _array, binary, JNI_FALSE);
4911d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4912d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4913d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4914d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glProgramParameteri ( GLuint program, GLenum pname, GLint value ) */
4915d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4916d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glProgramParameteri__III
4917d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint pname, jint value) {
4918d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glProgramParameteri(
4919d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLuint)program,
4920d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
4921d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)value
4922d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4923d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4924d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4925d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
4926d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4927d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateFramebuffer__II_3II
4928d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset) {
4929d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4930d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4931d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
4932d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments_base = (GLenum *) 0;
4933d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4934d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
4935d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4936d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!attachments_ref) {
4937d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4938d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4939d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "attachments == null";
4940d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4941d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4942d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
4943d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
4944d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4945d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
4946d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
4947d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4948d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(attachments_ref) - offset;
4949d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments_base = (GLenum *)
49503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
4951d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments = attachments_base + offset;
4952d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4953d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateFramebuffer(
4954d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4955d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
4956d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments
4957d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4958d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4959d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
4960d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments_base) {
49613b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
4962d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
4963d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4964d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
4965d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
4966d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4967d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4968d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4969d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
4970d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4971d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2
4972d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf) {
49733b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
4974d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
4975d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
4976d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
4977d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
49783b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
4979d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments == NULL) {
49803b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
4981d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
4982d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4983d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateFramebuffer(
4984d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
4985d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
4986d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments
4987d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
4988d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
49893b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
4990d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
4991d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
4992d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
4993d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
4994d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
4995d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateSubFramebuffer__II_3IIIIII
4996d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset, jint x, jint y, jint width, jint height) {
4997d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
4998d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
4999d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5000d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments_base = (GLenum *) 0;
5001d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5002d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5003d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5004d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!attachments_ref) {
5005d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5006d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5007d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "attachments == null";
5008d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5009d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5010d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5011d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5012d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5013d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5014d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5015d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5016d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(attachments_ref) - offset;
5017d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments_base = (GLenum *)
50183b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
5019d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    attachments = attachments_base + offset;
5020d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5021d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateSubFramebuffer(
5022d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5023d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5024d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments,
5025d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
5026d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
5027d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5028d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5029d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5030d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5031d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5032d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments_base) {
50333b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
5034d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            JNI_ABORT);
5035d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5036d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5037d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5038d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5039d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5040d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5041d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
5042d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5043d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII
5044d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf, jint x, jint y, jint width, jint height) {
50453b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5046d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5047d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5048d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLenum *attachments = (GLenum *) 0;
5049d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
50503b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5051d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (attachments == NULL) {
50523b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5053d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
5054d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5055d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glInvalidateSubFramebuffer(
5056d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5057d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)numAttachments,
5058d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum *)attachments,
5059d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)x,
5060d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint)y,
5061d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5062d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5063d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5064d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
50653b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
5066d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5067d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5068d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5069d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexStorage2D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height ) */
5070d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5071d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexStorage2D__IIIII
5072d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height) {
5073d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexStorage2D(
5074d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5075d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)levels,
5076d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5077d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5078d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height
5079d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5080d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5081d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5082d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glTexStorage3D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth ) */
5083d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5084d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glTexStorage3D__IIIIII
5085d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height, jint depth) {
5086d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glTexStorage3D(
5087d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5088d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)levels,
5089d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5090d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)width,
5091d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)height,
5092d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)depth
5093d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5094d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5095d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5096d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5097d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5098d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInternalformativ__IIII_3II
5099d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jintArray params_ref, jint offset) {
5100d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _exception = 0;
5101d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionType = NULL;
5102d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    const char * _exceptionMessage = NULL;
5103d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params_base = (GLint *) 0;
5104d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5105d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5106d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5107d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (!params_ref) {
5108d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5109d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5110d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "params == null";
5111d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5112d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5113d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (offset < 0) {
5114d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exception = 1;
5115d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5116d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        _exceptionMessage = "offset < 0";
5117d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        goto exit;
5118d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5119d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    _remaining = _env->GetArrayLength(params_ref) - offset;
5120d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params_base = (GLint *)
51213b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->GetIntArrayElements(params_ref, (jboolean *)0);
5122d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    params = params_base + offset;
5123d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5124d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInternalformativ(
5125d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5126d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5127d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5128d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5129d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5130d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5131d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5132d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallexit:
5133d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params_base) {
51343b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
5135d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall            _exception ? JNI_ABORT: 0);
5136d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5137d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_exception) {
5138d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
5139d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5140d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5141d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5142d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
5143d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic void
5144d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallandroid_glGetInternalformativ__IIIILjava_nio_IntBuffer_2
5145d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jobject params_buf) {
51463b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    jintArray _array = (jintArray) 0;
5147d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _bufferOffset = (jint) 0;
5148d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    jint _remaining;
5149d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    GLint *params = (GLint *) 0;
5150d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
51513b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
5152d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (params == NULL) {
51533b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
5154d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        params = (GLint *) (_paramsBase + _bufferOffset);
5155d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5156d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    glGetInternalformativ(
5157d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)target,
5158d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)internalformat,
5159d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLenum)pname,
5160d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLsizei)bufSize,
5161d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall        (GLint *)params
5162d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    );
5163d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    if (_array) {
51643b1d46e809ed38cd5662c110c511b8d98868ed72Hiroshi Yamauchi        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
5165d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    }
5166d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5167d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5168d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic const char *classPathName = "android/opengl/GLES30";
5169d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5170d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallstatic JNINativeMethod methods[] = {
5171d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"_nativeClassInit", "()V", (void*)nativeClassInit },
5172d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glReadBuffer", "(I)V", (void *) android_glReadBuffer__I },
5173d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawRangeElements", "(IIIIILjava/nio/Buffer;)V", (void *) android_glDrawRangeElements__IIIIILjava_nio_Buffer_2 },
5174d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawRangeElements", "(IIIIII)V", (void *) android_glDrawRangeElements__IIIIII },
5175d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexImage3D", "(IIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2 },
5176d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexImage3D", "(IIIIIIIIII)V", (void *) android_glTexImage3D__IIIIIIIIII },
5177d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5178d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glTexSubImage3D__IIIIIIIIIII },
5179d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCopyTexSubImage3D", "(IIIIIIIII)V", (void *) android_glCopyTexSubImage3D__IIIIIIIII },
5180d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexImage3D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2 },
5181d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexImage3D", "(IIIIIIIII)V", (void *) android_glCompressedTexImage3D__IIIIIIIII },
5182d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
5183d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCompressedTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIII },
5184d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenQueries", "(I[II)V", (void *) android_glGenQueries__I_3II },
5185d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenQueries__ILjava_nio_IntBuffer_2 },
5186d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteQueries", "(I[II)V", (void *) android_glDeleteQueries__I_3II },
5187d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteQueries__ILjava_nio_IntBuffer_2 },
5188d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsQuery", "(I)Z", (void *) android_glIsQuery__I },
5189d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBeginQuery", "(II)V", (void *) android_glBeginQuery__II },
5190d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glEndQuery", "(I)V", (void *) android_glEndQuery__I },
5191d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryiv", "(II[II)V", (void *) android_glGetQueryiv__II_3II },
5192d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryiv__IILjava_nio_IntBuffer_2 },
5193d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryObjectuiv", "(II[II)V", (void *) android_glGetQueryObjectuiv__II_3II },
5194d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetQueryObjectuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2 },
5195d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUnmapBuffer", "(I)Z", (void *) android_glUnmapBuffer__I },
5196d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferPointerv", "(II)Ljava/nio/Buffer;", (void *) android_glGetBufferPointerv__II },
5197d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawBuffers", "(I[II)V", (void *) android_glDrawBuffers__I_3II },
5198d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDrawBuffers__ILjava_nio_IntBuffer_2 },
5199d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x3fv__IIZ_3FI },
5200d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2 },
5201d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x2fv__IIZ_3FI },
5202d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2 },
5203d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x4fv__IIZ_3FI },
5204d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix2x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2 },
5205d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x2fv__IIZ_3FI },
5206d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2 },
5207d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x4fv__IIZ_3FI },
5208d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix3x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2 },
5209d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x3fv__IIZ_3FI },
5210d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformMatrix4x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2 },
5211d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBlitFramebuffer", "(IIIIIIIIII)V", (void *) android_glBlitFramebuffer__IIIIIIIIII },
5212d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glRenderbufferStorageMultisample", "(IIIII)V", (void *) android_glRenderbufferStorageMultisample__IIIII },
5213d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFramebufferTextureLayer", "(IIIII)V", (void *) android_glFramebufferTextureLayer__IIIII },
5214d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glMapBufferRange", "(IIII)Ljava/nio/Buffer;", (void *) android_glMapBufferRange__IIII },
5215d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFlushMappedBufferRange", "(III)V", (void *) android_glFlushMappedBufferRange__III },
5216d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindVertexArray", "(I)V", (void *) android_glBindVertexArray__I },
5217d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteVertexArrays", "(I[II)V", (void *) android_glDeleteVertexArrays__I_3II },
5218d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2 },
5219d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenVertexArrays", "(I[II)V", (void *) android_glGenVertexArrays__I_3II },
5220d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenVertexArrays__ILjava_nio_IntBuffer_2 },
5221d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsVertexArray", "(I)Z", (void *) android_glIsVertexArray__I },
5222d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetIntegeri_v", "(II[II)V", (void *) android_glGetIntegeri_v__II_3II },
5223d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetIntegeri_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetIntegeri_v__IILjava_nio_IntBuffer_2 },
5224d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBeginTransformFeedback", "(I)V", (void *) android_glBeginTransformFeedback__I },
5225d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glEndTransformFeedback", "()V", (void *) android_glEndTransformFeedback__ },
5226d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindBufferRange", "(IIIII)V", (void *) android_glBindBufferRange__IIIII },
5227d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindBufferBase", "(III)V", (void *) android_glBindBufferBase__III },
5228d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTransformFeedbackVaryings", "(I[Ljava/lang/String;I)V", (void *) android_glTransformFeedbackVaryings },
5229d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(III[II[II[II[BI)V", (void *) android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI },
5230d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 },
5231d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(II[II[II)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying1 },
5232d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetTransformFeedbackVarying", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying2 },
5233d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribIPointerBounds", "(IIIILjava/nio/Buffer;I)V", (void *) android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I },
5234d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribIPointer", "(IIIII)V", (void *) android_glVertexAttribIPointer__IIIII },
5235d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIiv", "(II[II)V", (void *) android_glGetVertexAttribIiv__II_3II },
5236d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2 },
5237d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIuiv", "(II[II)V", (void *) android_glGetVertexAttribIuiv__II_3II },
5238d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetVertexAttribIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2 },
5239d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4i", "(IIIII)V", (void *) android_glVertexAttribI4i__IIIII },
5240d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4ui", "(IIIII)V", (void *) android_glVertexAttribI4ui__IIIII },
5241d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4iv", "(I[II)V", (void *) android_glVertexAttribI4iv__I_3II },
5242d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4iv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2 },
5243d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4uiv", "(I[II)V", (void *) android_glVertexAttribI4uiv__I_3II },
5244d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribI4uiv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2 },
5245d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformuiv", "(II[II)V", (void *) android_glGetUniformuiv__II_3II },
5246d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetUniformuiv__IILjava_nio_IntBuffer_2 },
5247d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetFragDataLocation", "(ILjava/lang/String;)I", (void *) android_glGetFragDataLocation__ILjava_lang_String_2 },
5248d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1ui", "(II)V", (void *) android_glUniform1ui__II },
5249d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2ui", "(III)V", (void *) android_glUniform2ui__III },
5250d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3ui", "(IIII)V", (void *) android_glUniform3ui__IIII },
5251d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4ui", "(IIIII)V", (void *) android_glUniform4ui__IIIII },
5252d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1uiv", "(II[II)V", (void *) android_glUniform1uiv__II_3II },
5253d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform1uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform1uiv__IILjava_nio_IntBuffer_2 },
5254d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2uiv", "(II[II)V", (void *) android_glUniform2uiv__II_3II },
5255d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform2uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform2uiv__IILjava_nio_IntBuffer_2 },
5256d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3uiv", "(II[II)V", (void *) android_glUniform3uiv__II_3II },
5257d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform3uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform3uiv__IILjava_nio_IntBuffer_2 },
5258d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4uiv", "(II[II)V", (void *) android_glUniform4uiv__II_3II },
5259d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniform4uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform4uiv__IILjava_nio_IntBuffer_2 },
5260d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferiv", "(II[II)V", (void *) android_glClearBufferiv__II_3II },
5261d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferiv__IILjava_nio_IntBuffer_2 },
5262d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferuiv", "(II[II)V", (void *) android_glClearBufferuiv__II_3II },
5263d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferuiv__IILjava_nio_IntBuffer_2 },
5264d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfv", "(II[FI)V", (void *) android_glClearBufferfv__II_3FI },
5265d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glClearBufferfv__IILjava_nio_FloatBuffer_2 },
5266d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClearBufferfi", "(IIFI)V", (void *) android_glClearBufferfi__IIFI },
5267d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetStringi", "(II)Ljava/lang/String;", (void *) android_glGetStringi__II },
5268d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glCopyBufferSubData", "(IIIII)V", (void *) android_glCopyBufferSubData__IIIII },
5269d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformIndices", "(I[Ljava/lang/String;[II)V", (void *) android_glGetUniformIndices_array },
5270d877efe3b12afdd84f06c180369f9d7399858f6eJesse Hall{"glGetUniformIndices", "(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V", (void *) android_glGetUniformIndices_buffer },
5271d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformsiv", "(II[III[II)V", (void *) android_glGetActiveUniformsiv__II_3III_3II },
5272d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformsiv", "(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2 },
5273d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetUniformBlockIndex", "(ILjava/lang/String;)I", (void *) android_glGetUniformBlockIndex__ILjava_lang_String_2 },
5274d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockiv", "(III[II)V", (void *) android_glGetActiveUniformBlockiv__III_3II },
5275d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2 },
5276d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(III[II[BI)V", (void *) android_glGetActiveUniformBlockName_III_3II_3BI },
5277d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(IILjava/nio/Buffer;Ljava/nio/Buffer;)V", (void *) android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 },
5278d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetActiveUniformBlockName", "(II)Ljava/lang/String;", (void *) android_glGetActiveUniformBlockName_II },
5279d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glUniformBlockBinding", "(III)V", (void *) android_glUniformBlockBinding__III },
5280d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawArraysInstanced", "(IIII)V", (void *) android_glDrawArraysInstanced__IIII },
5281d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawElementsInstanced", "(IIILjava/nio/Buffer;I)V", (void *) android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I },
5282d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDrawElementsInstanced", "(IIIII)V", (void *) android_glDrawElementsInstanced__IIIII },
5283d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glFenceSync", "(II)J", (void *) android_glFenceSync__II },
5284d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsSync", "(J)Z", (void *) android_glIsSync__J },
5285d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSync", "(J)V", (void *) android_glDeleteSync__J },
5286d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glClientWaitSync", "(JIJ)I", (void *) android_glClientWaitSync__JIJ },
5287d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glWaitSync", "(JIJ)V", (void *) android_glWaitSync__JIJ },
5288d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64v", "(I[JI)V", (void *) android_glGetInteger64v__I_3JI },
5289d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64v", "(ILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64v__ILjava_nio_LongBuffer_2 },
5290d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSynciv", "(JII[II[II)V", (void *) android_glGetSynciv__JII_3II_3II },
5291d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSynciv", "(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
5292d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64i_v", "(II[JI)V", (void *) android_glGetInteger64i_v__II_3JI },
5293d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInteger64i_v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64i_v__IILjava_nio_LongBuffer_2 },
5294d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferParameteri64v", "(II[JI)V", (void *) android_glGetBufferParameteri64v__II_3JI },
5295d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetBufferParameteri64v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2 },
5296d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenSamplers", "(I[II)V", (void *) android_glGenSamplers__I_3II },
5297d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenSamplers__ILjava_nio_IntBuffer_2 },
5298d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSamplers", "(I[II)V", (void *) android_glDeleteSamplers__I_3II },
5299d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteSamplers__ILjava_nio_IntBuffer_2 },
5300d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsSampler", "(I)Z", (void *) android_glIsSampler__I },
5301d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindSampler", "(II)V", (void *) android_glBindSampler__II },
5302d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteri", "(III)V", (void *) android_glSamplerParameteri__III },
5303d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteriv", "(II[II)V", (void *) android_glSamplerParameteriv__II_3II },
5304d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameteriv__IILjava_nio_IntBuffer_2 },
5305d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterf", "(IIF)V", (void *) android_glSamplerParameterf__IIF },
5306d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterfv", "(II[FI)V", (void *) android_glSamplerParameterfv__II_3FI },
5307d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
5308d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameteriv", "(II[II)V", (void *) android_glGetSamplerParameteriv__II_3II },
5309d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2 },
5310d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameterfv", "(II[FI)V", (void *) android_glGetSamplerParameterfv__II_3FI },
5311d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
5312d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glVertexAttribDivisor", "(II)V", (void *) android_glVertexAttribDivisor__II },
5313d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glBindTransformFeedback", "(II)V", (void *) android_glBindTransformFeedback__II },
5314d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteTransformFeedbacks", "(I[II)V", (void *) android_glDeleteTransformFeedbacks__I_3II },
5315d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glDeleteTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2 },
5316d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenTransformFeedbacks", "(I[II)V", (void *) android_glGenTransformFeedbacks__I_3II },
5317d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGenTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2 },
5318d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glIsTransformFeedback", "(I)Z", (void *) android_glIsTransformFeedback__I },
5319d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glPauseTransformFeedback", "()V", (void *) android_glPauseTransformFeedback__ },
5320d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glResumeTransformFeedback", "()V", (void *) android_glResumeTransformFeedback__ },
5321d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetProgramBinary", "(II[II[IILjava/nio/Buffer;)V", (void *) android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2 },
5322d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse 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 },
5323d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glProgramBinary", "(IILjava/nio/Buffer;I)V", (void *) android_glProgramBinary__IILjava_nio_Buffer_2I },
5324d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glProgramParameteri", "(III)V", (void *) android_glProgramParameteri__III },
5325d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateFramebuffer", "(II[II)V", (void *) android_glInvalidateFramebuffer__II_3II },
5326d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateFramebuffer", "(IILjava/nio/IntBuffer;)V", (void *) android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2 },
5327d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateSubFramebuffer", "(II[IIIIII)V", (void *) android_glInvalidateSubFramebuffer__II_3IIIIII },
5328d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glInvalidateSubFramebuffer", "(IILjava/nio/IntBuffer;IIII)V", (void *) android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII },
5329d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexStorage2D", "(IIIII)V", (void *) android_glTexStorage2D__IIIII },
5330d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glTexStorage3D", "(IIIIII)V", (void *) android_glTexStorage3D__IIIIII },
5331d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInternalformativ", "(IIII[II)V", (void *) android_glGetInternalformativ__IIII_3II },
5332d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{"glGetInternalformativ", "(IIIILjava/nio/IntBuffer;)V", (void *) android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2 },
5333d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall};
5334d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall
5335d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hallint register_android_opengl_jni_GLES30(JNIEnv *_env)
5336d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall{
5337d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    int err;
5338d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
5339d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall    return err;
5340d830e74ff4bc9aa015f746e54f6922bf5221f1baJesse Hall}
5341