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