1 /* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
2 static void
android_glGetActiveAttrib__III_3II_3II_3II_3BI(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)3 android_glGetActiveAttrib__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 glGetActiveAttrib(
86 (GLuint)program,
87 (GLuint)index,
88 (GLsizei)bufsize,
89 (GLsizei *)length,
90 (GLint *)size,
91 (GLenum *)type,
92 (char *)name
93 );
94
95 exit:
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 glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
118 static void
android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B(JNIEnv * _env,jobject _this,jint program,jint index,jint bufsize,jobject length_buf,jobject size_buf,jobject type_buf,jbyte name)119 android_glGetActiveAttrib__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 glGetActiveAttrib(
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 glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
170 static jstring
android_glGetActiveAttrib1(JNIEnv * _env,jobject _this,jint program,jint index,jintArray size_ref,jint sizeOffset,jintArray type_ref,jint typeOffset)171 android_glGetActiveAttrib1
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 GLint *size_base = (GLint *) 0;
177 jint _sizeRemaining;
178 GLint *size = (GLint *) 0;
179 GLenum *type_base = (GLenum *) 0;
180 jint _typeRemaining;
181 GLenum *type = (GLenum *) 0;
182
183 jstring result = 0;
184
185 GLint len = 0;
186 glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
187 if (!len) {
188 return _env->NewStringUTF("");
189 }
190 char* buf = (char*) malloc(len);
191
192 if (buf == NULL) {
193 jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
194 return NULL;
195 }
196 if (!size_ref) {
197 _exception = 1;
198 _exceptionType = "java/lang/IllegalArgumentException";
199 _exceptionMessage = "size == null";
200 goto exit;
201 }
202 if (sizeOffset < 0) {
203 _exception = 1;
204 _exceptionType = "java/lang/IllegalArgumentException";
205 _exceptionMessage = "sizeOffset < 0";
206 goto exit;
207 }
208 _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
209 size_base = (GLint *)
210 _env->GetIntArrayElements(size_ref, (jboolean *)0);
211 size = size_base + sizeOffset;
212
213 if (!type_ref) {
214 _exception = 1;
215 _exceptionType = "java/lang/IllegalArgumentException";
216 _exceptionMessage = "type == null";
217 goto exit;
218 }
219 if (typeOffset < 0) {
220 _exception = 1;
221 _exceptionType = "java/lang/IllegalArgumentException";
222 _exceptionMessage = "typeOffset < 0";
223 goto exit;
224 }
225 _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
226 type_base = (GLenum *)
227 _env->GetIntArrayElements(type_ref, (jboolean *)0);
228 type = type_base + typeOffset;
229
230 glGetActiveAttrib(
231 (GLuint)program,
232 (GLuint)index,
233 (GLsizei)len,
234 NULL,
235 (GLint *)size,
236 (GLenum *)type,
237 (char *)buf
238 );
239 exit:
240 if (type_base) {
241 _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
242 _exception ? JNI_ABORT: 0);
243 }
244 if (size_base) {
245 _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
246 _exception ? JNI_ABORT: 0);
247 }
248 if (_exception != 1) {
249 result = _env->NewStringUTF(buf);
250 }
251 if (buf) {
252 free(buf);
253 }
254 if (_exception) {
255 jniThrowException(_env, _exceptionType, _exceptionMessage);
256 }
257 if (result == 0) {
258 result = _env->NewStringUTF("");
259 }
260
261 return result;
262 }
263
264 /* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
265 static jstring
android_glGetActiveAttrib2(JNIEnv * _env,jobject _this,jint program,jint index,jobject size_buf,jobject type_buf)266 android_glGetActiveAttrib2
267 (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
268 jintArray _sizeArray = (jintArray) 0;
269 jint _sizeBufferOffset = (jint) 0;
270 jintArray _typeArray = (jintArray) 0;
271 jint _typeBufferOffset = (jint) 0;
272 jint _lengthRemaining;
273 GLsizei *length = (GLsizei *) 0;
274 jint _sizeRemaining;
275 GLint *size = (GLint *) 0;
276 jint _typeRemaining;
277 GLenum *type = (GLenum *) 0;
278
279 jstring result = 0;
280
281 GLint len = 0;
282 glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_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 if (size == NULL) {
296 char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
297 size = (GLint *) (_sizeBase + _sizeBufferOffset);
298 }
299 if (type == NULL) {
300 char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
301 type = (GLenum *) (_typeBase + _typeBufferOffset);
302 }
303 glGetActiveAttrib(
304 (GLuint)program,
305 (GLuint)index,
306 (GLsizei)len,
307 NULL,
308 (GLint *)size,
309 (GLenum *)type,
310 (char *)buf
311 );
312
313 if (_typeArray) {
314 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
315 }
316 if (_sizeArray) {
317 releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
318 }
319 result = _env->NewStringUTF(buf);
320 if (buf) {
321 free(buf);
322 }
323 return result;
324 }
325