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