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

Commit 7eb9c3a4 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.

Bug: 16624915
Test: CtsOpenGLTestCases
Change-Id: I8deea6a7454efceb7c5d862b7055a34964f5bded
parent 3828399b
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -5,15 +5,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;
}
}