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 15b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos if (length_ref) { 16b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos if (lengthOffset < 0) { 17b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _exception = 1; 18b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _exceptionType = "java/lang/IllegalArgumentException"; 19b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _exceptionMessage = "lengthOffset < 0"; 20b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos goto exit; 21b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos } 22b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset; 23b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _length_base = (GLsizei*)_env->GetIntArrayElements( 24b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos length_ref, (jboolean*)0); 25b62e242c4c2bdfe84ce28231d2fcc85e79517f8cPablo Ceballos _length = _length_base + lengthOffset; 264f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 274f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 284f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (!name_ref) { 294f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception = 1; 304f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionType = "java/lang/IllegalArgumentException"; 314f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionMessage = "uniformBlockName == null"; 324f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall goto exit; 334f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 344f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (nameOffset < 0) { 354f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception = 1; 364f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionType = "java/lang/IllegalArgumentException"; 374f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exceptionMessage = "uniformBlockNameOffset < 0"; 384f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall goto exit; 394f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 404f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset; 414e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _name_base = (GLchar*)_env->GetByteArrayElements( 424f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall name_ref, (jboolean*)0); 434f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name = _name_base + nameOffset; 444f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 454f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockName( 464f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)program, 474f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)uniformBlockIndex, 484f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLsizei)bufSize, 494f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLsizei*)_length, 504f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLchar*)_name 514f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall ); 524f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 534f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallexit: 544f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_name_base) { 554e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base, 564f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception ? JNI_ABORT: 0); 574f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 584f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_length_base) { 594e7de461c18278a31be83e7c9074a02fbb6e9475Hiroshi Yamauchi _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base, 604f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _exception ? JNI_ABORT: 0); 614f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 624f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_exception) { 634f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jniThrowException(_env, _exceptionType, _exceptionMessage); 644f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 654f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall} 664f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 674f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 684f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallstatic void 694f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallandroid_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 704f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) { 714f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _exception = 0; 724f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall const char* _exceptionType; 734f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall const char* _exceptionMessage; 744f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jarray _lengthArray = (jarray)0; 754f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _lengthBufferOffset = (jint)0; 764f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLsizei* _length = (GLsizei*)0; 774f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _lengthRemaining; 784f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jarray _nameArray = (jarray)0; 794f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _nameBufferOffset = (jint)0; 804f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* _name = (GLchar*)0; 814f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jint _nameRemaining; 824f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 834f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset); 844f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_length == NULL) { 854f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0); 864f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length = (GLsizei*)(_lengthBase + _lengthBufferOffset); 874f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 884f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 894f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset); 904f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_name == NULL) { 914f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0); 924f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _name = (GLchar*)(_nameBase + _nameBufferOffset); 934f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 944f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 954f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockName( 964f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)program, 974f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLuint)uniformBlockIndex, 984f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (GLsizei)_nameRemaining, 994f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall _length, _name 1004f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall ); 1014f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_nameArray) { 1024f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall releasePointer(_env, _nameArray, _name, JNI_TRUE); 1034f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 1044f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall if (_lengthArray) { 1054f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall releasePointer(_env, _lengthArray, _length, JNI_TRUE); 1064f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall } 1074f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall} 1084f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall 1094f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */ 1104f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallstatic jstring 1114f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hallandroid_glGetActiveUniformBlockName_II 1124f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) { 1134f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLint len = 0; 1144f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex, 1154f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GL_UNIFORM_BLOCK_NAME_LENGTH, &len); 1164f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall GLchar* name = (GLchar*)malloc(len); 1174f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex, 1184f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall len, NULL, name); 1194f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall jstring result = _env->NewStringUTF(name); 1204f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall free(name); 1214f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall return result; 1224f6693080c9a186f3fe37abe445abdb39662ae22Jesse Hall} 123