Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e842e50d authored by Romain Guy's avatar Romain Guy
Browse files

Add fallback case in glGetShaderInfoLog

Some drivers do not always report the proper info log length
through glGetShaderiv which causes the JNI bindings to return
an empty log string. This change falls back to a length of
512 bytes when the queried length is 0. This is the same
fallback used in libhwui.

Test: CtsOpenGLTest
Bug: 16624915
Change-Id: I86ea52903b280a86305eaaa83eefcf46a7a8d0b4
parent 51295748
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -3084,15 +3084,16 @@ static jstring android_glGetShaderInfoLog(JNIEnv *_env, jobject, jint shader) {
    GLint infoLen = 0;
    GLint infoLen = 0;
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
    if (!infoLen) {
    if (!infoLen) {
        return _env->NewStringUTF("");
        infoLen = 512;
    }
    }
    char* buf = (char*) malloc(infoLen);
    char* buf = (char*) malloc(infoLen);
    if (buf == NULL) {
    if (buf == NULL) {
        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
        return NULL;
        return NULL;
    }
    }
    glGetShaderInfoLog(shader, infoLen, NULL, buf);
    GLsizei outLen = 0;
    jstring result = _env->NewStringUTF(buf);
    glGetShaderInfoLog(shader, infoLen, &outLen, buf);
    jstring result = _env->NewStringUTF(outLen == 0 ? "" : buf);
    free(buf);
    free(buf);
    return result;
    return result;
}
}