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