From e842e50d42e311eaf97aa01548c4fc29ad352b53 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 29 Nov 2016 19:26:29 -0800 Subject: [PATCH] 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 --- core/jni/android_opengl_GLES20.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/jni/android_opengl_GLES20.cpp b/core/jni/android_opengl_GLES20.cpp index ac3bf7a5b7355..b5c0b645c7f03 100644 --- a/core/jni/android_opengl_GLES20.cpp +++ b/core/jni/android_opengl_GLES20.cpp @@ -3084,15 +3084,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; }