OSDN Git Service

Add fallback case in glGetShaderInfoLog
authorRomain Guy <romainguy@google.com>
Wed, 30 Nov 2016 02:36:46 +0000 (18:36 -0800)
committerRomain Guy <romainguy@google.com>
Wed, 30 Nov 2016 02:36:46 +0000 (18:36 -0800)
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

opengl/tools/glgen/stubs/gles11/glGetShaderInfoLog.cpp

index dd656b6..6d42e56 100644 (file)
@@ -5,15 +5,16 @@ static jstring android_glGetShaderInfoLog(JNIEnv *_env, jobject, jint shader) {
     GLint infoLen = 0;
     glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
     if (!infoLen) {
-        return _env->NewStringUTF("");
+        infoLen = 512;
     }
     char* buf = (char*) malloc(infoLen);
     if (buf == NULL) {
         jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
         return NULL;
     }
-    glGetShaderInfoLog(shader, infoLen, NULL, buf);
-    jstring result = _env->NewStringUTF(buf);
+    GLsizei outLen = 0;
+    glGetShaderInfoLog(shader, infoLen, &outLen, buf);
+    jstring result = _env->NewStringUTF(outLen == 0 ? "" : buf);
     free(buf);
     return result;
 }