OSDN Git Service

better fix for [3028370] GL get error should return a valid error if no context is...
authorMathias Agopian <mathias@google.com>
Thu, 23 Sep 2010 23:38:38 +0000 (16:38 -0700)
committerMathias Agopian <mathias@google.com>
Thu, 23 Sep 2010 23:44:48 +0000 (16:44 -0700)
it turns out that we cannot return INVALID_OPERATION from glGetError() because the
GL spec says that it must be called in a loop until it returns GL_NO_ERROR.

now, we always return 0 from GL functions called from a thread with no
context bound. This means that glGetError() will return NO_ERROR in this case,
which is better than returning a random value (which could trap the app in a loop).

if this happens in the main thread of a process, we LOG an error message once.

Change-Id: Id59620e675a890286ef62a257c02b06e0fdcaf69

opengl/libs/EGL/egl.cpp
opengl/libs/GLES2/gl2.cpp
opengl/libs/GLES_CM/gl.cpp

index 0437263..2d1a278 100644 (file)
@@ -428,19 +428,14 @@ static void(*findProcAddress(const char* name,
 
 // ----------------------------------------------------------------------------
 
-static void gl_no_context() {
+static int gl_no_context() {
     tls_t* tls = getTLS();
     if (tls->logCallWithNoContext == EGL_TRUE) {
         tls->logCallWithNoContext = EGL_FALSE;
         LOGE("call to OpenGL ES API with no current context "
              "(logged once per thread)");
     }
-}
-
-// Always return GL_INVALID_OPERATION from glGetError() when called from
-// a thread without a bound context.
-static GLenum gl_no_context_glGetError() {
-    return GL_INVALID_OPERATION;
+    return 0;
 }
 
 static void early_egl_init(void) 
@@ -454,8 +449,6 @@ static void early_egl_init(void)
             addr, 
             sizeof(gHooksNoContext));
 
-    gHooksNoContext.gl.glGetError = gl_no_context_glGetError;
-
     setGlThreadSpecific(&gHooksNoContext);
 }
 
index 924737e..18dd483 100644 (file)
@@ -58,6 +58,7 @@ using namespace android;
             "ldr   r12, [r12, %[tls]] \n"                       \
             "cmp   r12, #0            \n"                       \
             "ldrne pc,  [r12, %[api]] \n"                       \
+            "mov   r0, #0             \n"                       \
             "bx    lr                 \n"                       \
             :                                                   \
             : [tls] "J"(TLS_SLOT_OPENGL_API*4),                 \
index d71ff76..ee29f12 100644 (file)
@@ -114,6 +114,7 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
             "ldr   r12, [r12, %[tls]] \n"                       \
             "cmp   r12, #0            \n"                       \
             "ldrne pc,  [r12, %[api]] \n"                       \
+            "mov   r0, #0             \n"                       \
             "bx    lr                 \n"                       \
             :                                                   \
             : [tls] "J"(TLS_SLOT_OPENGL_API*4),                 \