1/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 2static void 3android_glGetActiveUniformBlockName_III_3II_3BI 4 (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, 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 GLchar* _name_base = (GLchar*)0; 12 jint _nameRemaining; 13 GLchar* _name = (GLchar*)0; 14 15 if (length_ref) { 16 if (lengthOffset < 0) { 17 _exception = 1; 18 _exceptionType = "java/lang/IllegalArgumentException"; 19 _exceptionMessage = "lengthOffset < 0"; 20 goto exit; 21 } 22 _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 23 _length_base = (GLsizei*)_env->GetIntArrayElements( 24 length_ref, (jboolean*)0); 25 _length = _length_base + lengthOffset; 26 } 27 28 if (!name_ref) { 29 _exception = 1; 30 _exceptionType = "java/lang/IllegalArgumentException"; 31 _exceptionMessage = "uniformBlockName == null"; 32 goto exit; 33 } 34 if (nameOffset < 0) { 35 _exception = 1; 36 _exceptionType = "java/lang/IllegalArgumentException"; 37 _exceptionMessage = "uniformBlockNameOffset < 0"; 38 goto exit; 39 } 40 _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 41 _name_base = (GLchar*)_env->GetByteArrayElements( 42 name_ref, (jboolean*)0); 43 _name = _name_base + nameOffset; 44 45 glGetActiveUniformBlockName( 46 (GLuint)program, 47 (GLuint)uniformBlockIndex, 48 (GLsizei)bufSize, 49 (GLsizei*)_length, 50 (GLchar*)_name 51 ); 52 53exit: 54 if (_name_base) { 55 _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base, 56 _exception ? JNI_ABORT: 0); 57 } 58 if (_length_base) { 59 _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base, 60 _exception ? JNI_ABORT: 0); 61 } 62 if (_exception) { 63 jniThrowException(_env, _exceptionType, _exceptionMessage); 64 } 65} 66 67/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 68static void 69android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 70 (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) { 71 jint _exception = 0; 72 const char* _exceptionType; 73 const char* _exceptionMessage; 74 jarray _lengthArray = (jarray)0; 75 jint _lengthBufferOffset = (jint)0; 76 GLsizei* _length = (GLsizei*)0; 77 jint _lengthRemaining; 78 jarray _nameArray = (jarray)0; 79 jint _nameBufferOffset = (jint)0; 80 GLchar* _name = (GLchar*)0; 81 jint _nameRemaining; 82 83 _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 84 if (_length == NULL) { 85 GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0); 86 _length = (GLsizei*)(_lengthBase + _lengthBufferOffset); 87 } 88 89 _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset); 90 if (_name == NULL) { 91 GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0); 92 _name = (GLchar*)(_nameBase + _nameBufferOffset); 93 } 94 95 glGetActiveUniformBlockName( 96 (GLuint)program, 97 (GLuint)uniformBlockIndex, 98 (GLsizei)_nameRemaining, 99 _length, _name 100 ); 101 if (_nameArray) { 102 releasePointer(_env, _nameArray, _name, JNI_TRUE); 103 } 104 if (_lengthArray) { 105 releasePointer(_env, _lengthArray, _length, JNI_TRUE); 106 } 107} 108 109/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 110static jstring 111android_glGetActiveUniformBlockName_II 112 (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) { 113 GLint len = 0; 114 glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex, 115 GL_UNIFORM_BLOCK_NAME_LENGTH, &len); 116 GLchar* name = (GLchar*)malloc(len); 117 glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex, 118 len, NULL, name); 119 jstring result = _env->NewStringUTF(name); 120 free(name); 121 return result; 122} 123