1/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
2static void
3android_glGetActiveUniform__III_3II_3II_3II_3BI
4  (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) {
5    jint _exception = 0;
6    const char * _exceptionType;
7    const char * _exceptionMessage;
8    GLsizei *length_base = (GLsizei *) 0;
9    jint _lengthRemaining;
10    GLsizei *length = (GLsizei *) 0;
11    GLint *size_base = (GLint *) 0;
12    jint _sizeRemaining;
13    GLint *size = (GLint *) 0;
14    GLenum *type_base = (GLenum *) 0;
15    jint _typeRemaining;
16    GLenum *type = (GLenum *) 0;
17    char *name_base = (char *) 0;
18    jint _nameRemaining;
19    char *name = (char *) 0;
20
21    if (length_ref) {
22        if (lengthOffset < 0) {
23            _exception = 1;
24            _exceptionType = "java/lang/IllegalArgumentException";
25            _exceptionMessage = "lengthOffset < 0";
26            goto exit;
27        }
28        _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
29        length_base = (GLsizei *)
30            _env->GetIntArrayElements(length_ref, (jboolean *)0);
31        length = length_base + lengthOffset;
32    }
33
34    if (!size_ref) {
35        _exception = 1;
36        _exceptionType = "java/lang/IllegalArgumentException";
37        _exceptionMessage = "size == null";
38        goto exit;
39    }
40    if (sizeOffset < 0) {
41        _exception = 1;
42        _exceptionType = "java/lang/IllegalArgumentException";
43        _exceptionMessage = "sizeOffset < 0";
44        goto exit;
45    }
46    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
47    size_base = (GLint *)
48        _env->GetIntArrayElements(size_ref, (jboolean *)0);
49    size = size_base + sizeOffset;
50
51    if (!type_ref) {
52        _exception = 1;
53        _exceptionType = "java/lang/IllegalArgumentException";
54        _exceptionMessage = "type == null";
55        goto exit;
56    }
57    if (typeOffset < 0) {
58        _exception = 1;
59        _exceptionType = "java/lang/IllegalArgumentException";
60        _exceptionMessage = "typeOffset < 0";
61        goto exit;
62    }
63    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
64    type_base = (GLenum *)
65        _env->GetIntArrayElements(type_ref, (jboolean *)0);
66    type = type_base + typeOffset;
67
68    if (!name_ref) {
69        _exception = 1;
70        _exceptionType = "java/lang/IllegalArgumentException";
71        _exceptionMessage = "name == null";
72        goto exit;
73    }
74    if (nameOffset < 0) {
75        _exception = 1;
76        _exceptionType = "java/lang/IllegalArgumentException";
77        _exceptionMessage = "nameOffset < 0";
78        goto exit;
79    }
80    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
81    name_base = (char *)
82        _env->GetByteArrayElements(name_ref, (jboolean *)0);
83    name = name_base + nameOffset;
84
85    glGetActiveUniform(
86        (GLuint)program,
87        (GLuint)index,
88        (GLsizei)bufsize,
89        (GLsizei *)length,
90        (GLint *)size,
91        (GLenum *)type,
92        (char *)name
93    );
94
95exit:
96    if (name_base) {
97        _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
98            _exception ? JNI_ABORT: 0);
99    }
100    if (type_base) {
101        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
102            _exception ? JNI_ABORT: 0);
103    }
104    if (size_base) {
105        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
106            _exception ? JNI_ABORT: 0);
107    }
108    if (length_base) {
109        _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
110            _exception ? JNI_ABORT: 0);
111    }
112    if (_exception) {
113        jniThrowException(_env, _exceptionType, _exceptionMessage);
114    }
115}
116
117/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
118static void
119android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
120  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
121    jintArray _lengthArray = (jintArray) 0;
122    jint _lengthBufferOffset = (jint) 0;
123    jintArray _sizeArray = (jintArray) 0;
124    jint _sizeBufferOffset = (jint) 0;
125    jintArray _typeArray = (jintArray) 0;
126    jint _typeBufferOffset = (jint) 0;
127    jint _lengthRemaining;
128    GLsizei *length = (GLsizei *) 0;
129    jint _sizeRemaining;
130    GLint *size = (GLint *) 0;
131    jint _typeRemaining;
132    GLenum *type = (GLenum *) 0;
133
134    length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
135    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
136    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
137    if (length == NULL) {
138        char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
139        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
140    }
141    if (size == NULL) {
142        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
143        size = (GLint *) (_sizeBase + _sizeBufferOffset);
144    }
145    if (type == NULL) {
146        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
147        type = (GLenum *) (_typeBase + _typeBufferOffset);
148    }
149    glGetActiveUniform(
150        (GLuint)program,
151        (GLuint)index,
152        (GLsizei)bufsize,
153        (GLsizei *)length,
154        (GLint *)size,
155        (GLenum *)type,
156        reinterpret_cast<char *>(name)
157    );
158    if (_typeArray) {
159        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
160    }
161    if (_sizeArray) {
162        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
163    }
164    if (_lengthArray) {
165        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
166    }
167}
168
169/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
170static jstring
171android_glGetActiveUniform1
172  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
173    jint _exception = 0;
174    const char * _exceptionType;
175    const char * _exceptionMessage;
176
177    GLint *size_base = (GLint *) 0;
178    jint _sizeRemaining;
179    GLint *size = (GLint *) 0;
180
181    GLenum *type_base = (GLenum *) 0;
182    jint _typeRemaining;
183    GLenum *type = (GLenum *) 0;
184
185    jstring result = 0;
186
187    GLint len = 0;
188    glGetProgramiv((GLuint)program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
189    if (!len) {
190        return _env->NewStringUTF("");
191    }
192    char* buf = (char*) malloc(len);
193
194    if (buf == NULL) {
195        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
196        return NULL;
197    }
198
199    if (!size_ref) {
200        _exception = 1;
201        _exceptionType = "java/lang/IllegalArgumentException";
202        _exceptionMessage = "size == null";
203        goto exit;
204    }
205    if (sizeOffset < 0) {
206        _exception = 1;
207        _exceptionType = "java/lang/IllegalArgumentException";
208        _exceptionMessage = "sizeOffset < 0";
209        goto exit;
210    }
211    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
212    size_base = (GLint *)
213        _env->GetIntArrayElements(size_ref, (jboolean *)0);
214    size = size_base + sizeOffset;
215
216    if (!type_ref) {
217        _exception = 1;
218        _exceptionType = "java/lang/IllegalArgumentException";
219        _exceptionMessage = "type == null";
220        goto exit;
221    }
222    if (typeOffset < 0) {
223        _exception = 1;
224        _exceptionType = "java/lang/IllegalArgumentException";
225        _exceptionMessage = "typeOffset < 0";
226        goto exit;
227    }
228    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
229    type_base = (GLenum *)
230        _env->GetIntArrayElements(type_ref, (jboolean *)0);
231    type = type_base + typeOffset;
232
233    glGetActiveUniform(
234        (GLuint)program,
235        (GLuint)index,
236        (GLsizei)len,
237        NULL,
238        (GLint *)size,
239        (GLenum *)type,
240        (char *)buf
241    );
242
243exit:
244    if (type_base) {
245        _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
246            _exception ? JNI_ABORT: 0);
247    }
248    if (size_base) {
249        _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
250            _exception ? JNI_ABORT: 0);
251    }
252    if (_exception != 1) {
253        result = _env->NewStringUTF(buf);
254    }
255    if (buf) {
256        free(buf);
257    }
258    if (_exception) {
259        jniThrowException(_env, _exceptionType, _exceptionMessage);
260    }
261    if (result == 0) {
262        result = _env->NewStringUTF("");
263    }
264    return result;
265}
266
267/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
268static jstring
269android_glGetActiveUniform2
270  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
271    jintArray _sizeArray = (jintArray) 0;
272    jint _sizeBufferOffset = (jint) 0;
273    jintArray _typeArray = (jintArray) 0;
274    jint _typeBufferOffset = (jint) 0;
275    jint _sizeRemaining;
276    GLint *size = (GLint *) 0;
277    jint _typeRemaining;
278    GLenum *type = (GLenum *) 0;
279
280    jstring result = 0;
281    GLint len = 0;
282    glGetProgramiv((GLuint)program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len);
283    if (!len) {
284        return _env->NewStringUTF("");
285    }
286    char* buf = (char*) malloc(len);
287
288    if (buf == NULL) {
289        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
290        return NULL;
291    }
292
293    size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
294    type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
295
296    if (size == NULL) {
297        char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
298        size = (GLint *) (_sizeBase + _sizeBufferOffset);
299    }
300    if (type == NULL) {
301        char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
302        type = (GLenum *) (_typeBase + _typeBufferOffset);
303    }
304    glGetActiveUniform(
305        (GLuint)program,
306        (GLuint)index,
307        len,
308        NULL,
309        (GLint *)size,
310        (GLenum *)type,
311        (char *)buf
312    );
313
314    if (_typeArray) {
315        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
316    }
317    if (_sizeArray) {
318        releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
319    }
320    result = _env->NewStringUTF(buf);
321    if (buf) {
322        free(buf);
323    }
324    return result;
325}
326