155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */ 255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic void 355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform__III_3II_3II_3II_3BI 455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (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) { 555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _exception = 0; 655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer const char * _exceptionType; 755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer const char * _exceptionMessage; 855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLsizei *length_base = (GLsizei *) 0; 955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _lengthRemaining; 1055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLsizei *length = (GLsizei *) 0; 1155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint *size_base = (GLint *) 0; 1255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _sizeRemaining; 1355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint *size = (GLint *) 0; 1455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLenum *type_base = (GLenum *) 0; 1555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _typeRemaining; 1655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLenum *type = (GLenum *) 0; 1755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer char *name_base = (char *) 0; 1855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _nameRemaining; 1955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer char *name = (char *) 0; 2055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 21b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos if (length_ref) { 22b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos if (lengthOffset < 0) { 23b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _exception = 1; 24b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _exceptionType = "java/lang/IllegalArgumentException"; 25b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _exceptionMessage = "lengthOffset < 0"; 26b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos goto exit; 27b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos } 28b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 29b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos length_base = (GLsizei *) 30b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _env->GetIntArrayElements(length_ref, (jboolean *)0); 31b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos length = length_base + lengthOffset; 3255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 3355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 3455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!size_ref) { 3555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 3655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 3755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "size == null"; 3855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 3955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 4055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (sizeOffset < 0) { 4155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 4255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 4355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "sizeOffset < 0"; 4455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 4555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 4655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 4755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer size_base = (GLint *) 484e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->GetIntArrayElements(size_ref, (jboolean *)0); 4955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer size = size_base + sizeOffset; 5055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 5155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!type_ref) { 5255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 5355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 5455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "type == null"; 5555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 5655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 5755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (typeOffset < 0) { 5855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 5955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 6055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "typeOffset < 0"; 6155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 6255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 6355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 6455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer type_base = (GLenum *) 654e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->GetIntArrayElements(type_ref, (jboolean *)0); 6655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer type = type_base + typeOffset; 6755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 6855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!name_ref) { 6955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 7055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 7155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "name == null"; 7255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 7355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 7455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (nameOffset < 0) { 7555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 7655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 7755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "nameOffset < 0"; 7855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 7955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 8055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 8155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer name_base = (char *) 824e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->GetByteArrayElements(name_ref, (jboolean *)0); 8355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer name = name_base + nameOffset; 8455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 8555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer glGetActiveUniform( 8655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)program, 8755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)index, 8855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLsizei)bufsize, 8955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLsizei *)length, 9055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLint *)size, 9155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLenum *)type, 9255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (char *)name 9355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer ); 9455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 9555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferexit: 9655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (name_base) { 974e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base, 9855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception ? JNI_ABORT: 0); 9955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 10055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (type_base) { 1014e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseIntArrayElements(type_ref, (jint*)type_base, 10255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception ? JNI_ABORT: 0); 10355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 10455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (size_base) { 1054e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseIntArrayElements(size_ref, (jint*)size_base, 10655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception ? JNI_ABORT: 0); 10755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 10855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (length_base) { 1094e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseIntArrayElements(length_ref, (jint*)length_base, 11055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception ? JNI_ABORT: 0); 11155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 11255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_exception) { 11355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jniThrowException(_env, _exceptionType, _exceptionMessage); 11455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 11555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer} 11655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 11755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */ 11855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic void 11955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B 12055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) { 1214e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi jintArray _lengthArray = (jintArray) 0; 12255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _lengthBufferOffset = (jint) 0; 1234e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi jintArray _sizeArray = (jintArray) 0; 12455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _sizeBufferOffset = (jint) 0; 1254e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi jintArray _typeArray = (jintArray) 0; 12655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _typeBufferOffset = (jint) 0; 12755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _lengthRemaining; 12855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLsizei *length = (GLsizei *) 0; 12955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _sizeRemaining; 13055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint *size = (GLint *) 0; 13155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _typeRemaining; 13255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLenum *type = (GLenum *) 0; 13355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 1344e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 1354e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 1364e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset); 13755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (length == NULL) { 1384e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0); 13955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer length = (GLsizei *) (_lengthBase + _lengthBufferOffset); 14055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 14155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (size == NULL) { 1424e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0); 14355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer size = (GLint *) (_sizeBase + _sizeBufferOffset); 14455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 14555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (type == NULL) { 1464e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0); 14755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer type = (GLenum *) (_typeBase + _typeBufferOffset); 14855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 14955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer glGetActiveUniform( 15055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)program, 15155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)index, 15255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLsizei)bufsize, 15355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLsizei *)length, 15455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLint *)size, 15555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLenum *)type, 156d8f096114da14f9793d4cca6022ca41b70ab9daaAshok Bhat reinterpret_cast<char *>(name) 15755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer ); 15855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_typeArray) { 1594e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE); 16055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 16155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_sizeArray) { 1624e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE); 16355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 16455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_lengthArray) { 1654e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE); 16655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 16755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer} 16855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 16955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */ 17055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic jstring 17155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform1 17255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) { 17355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _exception = 0; 17455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer const char * _exceptionType; 17555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer const char * _exceptionMessage; 17655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 17755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint *size_base = (GLint *) 0; 17855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _sizeRemaining; 17955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint *size = (GLint *) 0; 18055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 18155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLenum *type_base = (GLenum *) 0; 18255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _typeRemaining; 18355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLenum *type = (GLenum *) 0; 18455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 18555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jstring result = 0; 18655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 18755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint len = 0; 18855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer glGetProgramiv((GLuint)program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len); 18955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!len) { 19055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer return _env->NewStringUTF(""); 19155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 19255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer char* buf = (char*) malloc(len); 19355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 19455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (buf == NULL) { 19555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory"); 19655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer return NULL; 19755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 19855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 19955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!size_ref) { 20055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 20155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 20255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "size == null"; 20355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 20455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 20555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (sizeOffset < 0) { 20655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 20755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 20855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "sizeOffset < 0"; 20955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 21055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 21155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset; 21255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer size_base = (GLint *) 2134e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->GetIntArrayElements(size_ref, (jboolean *)0); 21455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer size = size_base + sizeOffset; 21555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 21655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!type_ref) { 21755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 21855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 21955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "type == null"; 22055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 22155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 22255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (typeOffset < 0) { 22355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception = 1; 22455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionType = "java/lang/IllegalArgumentException"; 22555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exceptionMessage = "typeOffset < 0"; 22655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer goto exit; 22755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 22855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset; 22955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer type_base = (GLenum *) 2304e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->GetIntArrayElements(type_ref, (jboolean *)0); 23155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer type = type_base + typeOffset; 23255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 23355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer glGetActiveUniform( 23455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)program, 23555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)index, 23655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLsizei)len, 23755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer NULL, 23855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLint *)size, 23955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLenum *)type, 24055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (char *)buf 24155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer ); 24255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 24355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferexit: 24455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (type_base) { 2454e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseIntArrayElements(type_ref, (jint*)type_base, 24655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception ? JNI_ABORT: 0); 24755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 24855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (size_base) { 2494e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseIntArrayElements(size_ref, (jint*)size_base, 25055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer _exception ? JNI_ABORT: 0); 25155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 25255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_exception != 1) { 25355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer result = _env->NewStringUTF(buf); 25455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 25555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (buf) { 25655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer free(buf); 25755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 25855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_exception) { 25955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jniThrowException(_env, _exceptionType, _exceptionMessage); 26055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 26155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (result == 0) { 26255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer result = _env->NewStringUTF(""); 26355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 26455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer return result; 26555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer} 26655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 26755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */ 26855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic jstring 26955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveUniform2 27055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) { 2714e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi jintArray _sizeArray = (jintArray) 0; 27255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _sizeBufferOffset = (jint) 0; 2734e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi jintArray _typeArray = (jintArray) 0; 27455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _typeBufferOffset = (jint) 0; 27555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _sizeRemaining; 27655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint *size = (GLint *) 0; 27755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jint _typeRemaining; 27855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLenum *type = (GLenum *) 0; 27955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 28055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jstring result = 0; 28155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer GLint len = 0; 28255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer glGetProgramiv((GLuint)program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &len); 28355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (!len) { 28455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer return _env->NewStringUTF(""); 28555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 28655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer char* buf = (char*) malloc(len); 28755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 28855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (buf == NULL) { 28955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory"); 29055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer return NULL; 29155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 29255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 2934e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset); 2944e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset); 29555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 29655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (size == NULL) { 2974e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0); 29855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer size = (GLint *) (_sizeBase + _sizeBufferOffset); 29955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 30055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (type == NULL) { 3014e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0); 30255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer type = (GLenum *) (_typeBase + _typeBufferOffset); 30355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 30455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer glGetActiveUniform( 30555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)program, 30655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLuint)index, 30755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer len, 30855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer NULL, 30955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLint *)size, 31055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (GLenum *)type, 31155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer (char *)buf 31255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer ); 31355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer 31455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_typeArray) { 3154e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE); 31655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 31755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (_sizeArray) { 3184e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE); 31955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 32055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer result = _env->NewStringUTF(buf); 32155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer if (buf) { 32255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer free(buf); 32355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer } 32455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer return result; 32555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer} 326