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