1/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */ 2static void 3android_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 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 glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */ 118static void 119android_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 ) */ 170static jstring 171android_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 ); 239exit: 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 ) */ 265static jstring 266android_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