14f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 24f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallstatic void 34f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallandroid_glGetActiveUniformBlockName_III_3II_3BI 44f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, jbyteArray name_ref, jint nameOffset) { 54f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _exception = 0; 64f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall const char* _exceptionType; 74f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall const char* _exceptionMessage; 84f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLsizei* _length_base = (GLsizei*)0; 94f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _lengthRemaining; 104f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLsizei* _length = (GLsizei*)0; 114f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* _name_base = (GLchar*)0; 124f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _nameRemaining; 134f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* _name = (GLchar*)0; 144f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 154f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (!length_ref) { 164f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception = 1; 174f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionType = "java/lang/IllegalArgumentException"; 184f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionMessage = "length == null"; 194f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall goto exit; 204f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 214f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (lengthOffset < 0) { 224f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception = 1; 234f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionType = "java/lang/IllegalArgumentException"; 244f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionMessage = "lengthOffset < 0"; 254f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall goto exit; 264f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 274f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 284f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length_base = (GLsizei*)_env->GetPrimitiveArrayCritical( 294f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall length_ref, (jboolean*)0); 304f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length = _length_base + lengthOffset; 314f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 324f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (!name_ref) { 334f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception = 1; 344f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionType = "java/lang/IllegalArgumentException"; 354f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionMessage = "uniformBlockName == null"; 364f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall goto exit; 374f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 384f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (nameOffset < 0) { 394f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception = 1; 404f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionType = "java/lang/IllegalArgumentException"; 414f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionMessage = "uniformBlockNameOffset < 0"; 424f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall goto exit; 434f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 444f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 454f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name_base = (GLchar*)_env->GetPrimitiveArrayCritical( 464f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall name_ref, (jboolean*)0); 474f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name = _name_base + nameOffset; 484f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 494f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockName( 504f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)program, 514f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)uniformBlockIndex, 524f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLsizei)bufSize, 534f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLsizei*)_length, 544f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLchar*)_name 554f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall ); 564f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 574f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallexit: 584f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_name_base) { 594f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _env->ReleasePrimitiveArrayCritical(name_ref, _name_base, 604f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception ? JNI_ABORT: 0); 614f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 624f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_length_base) { 634f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _env->ReleasePrimitiveArrayCritical(length_ref, _length_base, 644f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception ? JNI_ABORT: 0); 654f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 664f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_exception) { 674f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jniThrowException(_env, _exceptionType, _exceptionMessage); 684f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 694f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall} 704f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 714f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 724f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallstatic void 734f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallandroid_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 744f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) { 754f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _exception = 0; 764f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall const char* _exceptionType; 774f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall const char* _exceptionMessage; 784f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jarray _lengthArray = (jarray)0; 794f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _lengthBufferOffset = (jint)0; 804f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLsizei* _length = (GLsizei*)0; 814f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _lengthRemaining; 824f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jarray _nameArray = (jarray)0; 834f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _nameBufferOffset = (jint)0; 844f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* _name = (GLchar*)0; 854f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _nameRemaining; 864f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 874f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 884f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_length == NULL) { 894f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0); 904f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length = (GLsizei*)(_lengthBase + _lengthBufferOffset); 914f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 924f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 934f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset); 944f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_name == NULL) { 954f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0); 964f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name = (GLchar*)(_nameBase + _nameBufferOffset); 974f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 984f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 994f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockName( 1004f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)program, 1014f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)uniformBlockIndex, 1024f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLsizei)_nameRemaining, 1034f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length, _name 1044f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall ); 1054f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_nameArray) { 1064f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall releasePointer(_env, _nameArray, _name, JNI_TRUE); 1074f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 1084f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_lengthArray) { 1094f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall releasePointer(_env, _lengthArray, _length, JNI_TRUE); 1104f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 1114f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall} 1124f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 1134f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 1144f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallstatic jstring 1154f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallandroid_glGetActiveUniformBlockName_II 1164f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) { 1174f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLint len = 0; 1184f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex, 1194f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GL_UNIFORM_BLOCK_NAME_LENGTH, &len); 1204f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* name = (GLchar*)malloc(len); 1214f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex, 1224f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall len, NULL, name); 1234f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jstring result = _env->NewStringUTF(name); 1244f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall free(name); 1254f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall return result; 1264f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall} 1274f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 128