Loading opengl/libs/EGL/Loader.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,19 @@ void Loader::init_api(void* dso, if (f == NULL) { //ALOGD("%s", name); f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented; /* * GL_EXT_debug_label is special, we always report it as * supported, it's handled by GLES_trace. If GLES_trace is not * enabled, then these are no-ops. */ if (!strcmp(name, "glInsertEventMarkerEXT")) { f = (__eglMustCastToProperFunctionPointerType)gl_noop; } else if (!strcmp(name, "glPushGroupMarkerEXT")) { f = (__eglMustCastToProperFunctionPointerType)gl_noop; } else if (!strcmp(name, "glPopGroupMarkerEXT")) { f = (__eglMustCastToProperFunctionPointerType)gl_noop; } } *curr++ = f; api++; Loading opengl/libs/EGL/egl.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -233,6 +233,26 @@ EGLImageKHR egl_get_image_for_current_context(EGLImageKHR image) // ---------------------------------------------------------------------------- const GLubyte * egl_get_string_for_current_context(GLenum name) { // NOTE: returning NULL here will fall-back to the default // implementation. EGLContext context = egl_tls_t::getContext(); if (context == EGL_NO_CONTEXT) return NULL; egl_context_t const * const c = get_context(context); if (c == NULL) // this should never happen, by construction return NULL; if (name != GL_EXTENSIONS) return NULL; return (const GLubyte *)c->gl_extensions.string(); } // ---------------------------------------------------------------------------- // this mutex protects: // d->disp[] // egl_init_drivers_locked() Loading Loading @@ -290,6 +310,9 @@ void gl_unimplemented() { ALOGE("called unimplemented OpenGL ES API"); } void gl_noop() { } // ---------------------------------------------------------------------------- #if USE_FAST_TLS_KEY Loading opengl/libs/EGL/eglApi.cpp +4 −5 Original line number Diff line number Diff line Loading @@ -578,8 +578,7 @@ static void loseCurrent(egl_context_t * cur_c) SurfaceRef _cur_r(cur_r); SurfaceRef _cur_d(cur_d); cur_c->read = NULL; cur_c->draw = NULL; cur_c->onLooseCurrent(); _cur_c.release(); _cur_r.release(); Loading Loading @@ -687,8 +686,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, _c.acquire(); _r.acquire(); _d.acquire(); c->read = read; c->draw = draw; c->onMakeCurrent(draw, read); } else { setGLHooksThreadSpecific(&gHooksNoContext); egl_tls_t::setContext(EGL_NO_CONTEXT); Loading Loading @@ -924,7 +922,8 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) cnx->hooks[GLESv1_INDEX]->ext.extensions[slot] = cnx->hooks[GLESv2_INDEX]->ext.extensions[slot] = #if EGL_TRACE debugHooks->ext.extensions[slot] = gHooksTrace.ext.extensions[slot] = debugHooks->ext.extensions[slot] = gHooksTrace.ext.extensions[slot] = #endif cnx->egl.eglGetProcAddress(procname); } Loading opengl/libs/EGL/egl_object.cpp +36 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,42 @@ bool egl_object_t::get(egl_display_t const* display, egl_object_t* object) { return display->getObject(object); } // ---------------------------------------------------------------------------- egl_context_t::egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config, int impl, egl_connection_t const* cnx, int version) : egl_object_t(get_display(dpy)), dpy(dpy), context(context), config(config), read(0), draw(0), impl(impl), cnx(cnx), version(version) { } void egl_context_t::onLooseCurrent() { read = NULL; draw = NULL; } void egl_context_t::onMakeCurrent(EGLSurface draw, EGLSurface read) { this->read = read; this->draw = draw; /* * Here we cache the GL_EXTENSIONS string for this context and we * add the extensions always handled by the wrapper */ if (gl_extensions.isEmpty()) { // call the implementation's glGetString(GL_EXTENSIONS) const char* exts = (const char *)gEGLImpl[impl].hooks[version]->gl.glGetString(GL_EXTENSIONS); gl_extensions.setTo(exts); if (gl_extensions.find("GL_EXT_debug_marker") < 0) { String8 temp("GL_EXT_debug_marker "); temp.append(gl_extensions); gl_extensions.setTo(temp); } } } // ---------------------------------------------------------------------------- }; // namespace android // ---------------------------------------------------------------------------- opengl/libs/EGL/egl_object.h +7 −5 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <GLES/glext.h> #include <utils/threads.h> #include <utils/String8.h> #include <system/window.h> Loading Loading @@ -158,11 +159,11 @@ public: typedef egl_object_t::LocalRef<egl_context_t, EGLContext> Ref; egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config, int impl, egl_connection_t const* cnx, int version) : egl_object_t(get_display(dpy)), dpy(dpy), context(context), config(config), read(0), draw(0), impl(impl), cnx(cnx), version(version) { } int impl, egl_connection_t const* cnx, int version); void onLooseCurrent(); void onMakeCurrent(EGLSurface draw, EGLSurface read); EGLDisplay dpy; EGLContext context; EGLConfig config; Loading @@ -171,6 +172,7 @@ public: int impl; egl_connection_t const* cnx; int version; String8 gl_extensions; }; class egl_image_t: public egl_object_t { Loading Loading
opengl/libs/EGL/Loader.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,19 @@ void Loader::init_api(void* dso, if (f == NULL) { //ALOGD("%s", name); f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented; /* * GL_EXT_debug_label is special, we always report it as * supported, it's handled by GLES_trace. If GLES_trace is not * enabled, then these are no-ops. */ if (!strcmp(name, "glInsertEventMarkerEXT")) { f = (__eglMustCastToProperFunctionPointerType)gl_noop; } else if (!strcmp(name, "glPushGroupMarkerEXT")) { f = (__eglMustCastToProperFunctionPointerType)gl_noop; } else if (!strcmp(name, "glPopGroupMarkerEXT")) { f = (__eglMustCastToProperFunctionPointerType)gl_noop; } } *curr++ = f; api++; Loading
opengl/libs/EGL/egl.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -233,6 +233,26 @@ EGLImageKHR egl_get_image_for_current_context(EGLImageKHR image) // ---------------------------------------------------------------------------- const GLubyte * egl_get_string_for_current_context(GLenum name) { // NOTE: returning NULL here will fall-back to the default // implementation. EGLContext context = egl_tls_t::getContext(); if (context == EGL_NO_CONTEXT) return NULL; egl_context_t const * const c = get_context(context); if (c == NULL) // this should never happen, by construction return NULL; if (name != GL_EXTENSIONS) return NULL; return (const GLubyte *)c->gl_extensions.string(); } // ---------------------------------------------------------------------------- // this mutex protects: // d->disp[] // egl_init_drivers_locked() Loading Loading @@ -290,6 +310,9 @@ void gl_unimplemented() { ALOGE("called unimplemented OpenGL ES API"); } void gl_noop() { } // ---------------------------------------------------------------------------- #if USE_FAST_TLS_KEY Loading
opengl/libs/EGL/eglApi.cpp +4 −5 Original line number Diff line number Diff line Loading @@ -578,8 +578,7 @@ static void loseCurrent(egl_context_t * cur_c) SurfaceRef _cur_r(cur_r); SurfaceRef _cur_d(cur_d); cur_c->read = NULL; cur_c->draw = NULL; cur_c->onLooseCurrent(); _cur_c.release(); _cur_r.release(); Loading Loading @@ -687,8 +686,7 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw, _c.acquire(); _r.acquire(); _d.acquire(); c->read = read; c->draw = draw; c->onMakeCurrent(draw, read); } else { setGLHooksThreadSpecific(&gHooksNoContext); egl_tls_t::setContext(EGL_NO_CONTEXT); Loading Loading @@ -924,7 +922,8 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) cnx->hooks[GLESv1_INDEX]->ext.extensions[slot] = cnx->hooks[GLESv2_INDEX]->ext.extensions[slot] = #if EGL_TRACE debugHooks->ext.extensions[slot] = gHooksTrace.ext.extensions[slot] = debugHooks->ext.extensions[slot] = gHooksTrace.ext.extensions[slot] = #endif cnx->egl.eglGetProcAddress(procname); } Loading
opengl/libs/EGL/egl_object.cpp +36 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,42 @@ bool egl_object_t::get(egl_display_t const* display, egl_object_t* object) { return display->getObject(object); } // ---------------------------------------------------------------------------- egl_context_t::egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config, int impl, egl_connection_t const* cnx, int version) : egl_object_t(get_display(dpy)), dpy(dpy), context(context), config(config), read(0), draw(0), impl(impl), cnx(cnx), version(version) { } void egl_context_t::onLooseCurrent() { read = NULL; draw = NULL; } void egl_context_t::onMakeCurrent(EGLSurface draw, EGLSurface read) { this->read = read; this->draw = draw; /* * Here we cache the GL_EXTENSIONS string for this context and we * add the extensions always handled by the wrapper */ if (gl_extensions.isEmpty()) { // call the implementation's glGetString(GL_EXTENSIONS) const char* exts = (const char *)gEGLImpl[impl].hooks[version]->gl.glGetString(GL_EXTENSIONS); gl_extensions.setTo(exts); if (gl_extensions.find("GL_EXT_debug_marker") < 0) { String8 temp("GL_EXT_debug_marker "); temp.append(gl_extensions); gl_extensions.setTo(temp); } } } // ---------------------------------------------------------------------------- }; // namespace android // ----------------------------------------------------------------------------
opengl/libs/EGL/egl_object.h +7 −5 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <GLES/glext.h> #include <utils/threads.h> #include <utils/String8.h> #include <system/window.h> Loading Loading @@ -158,11 +159,11 @@ public: typedef egl_object_t::LocalRef<egl_context_t, EGLContext> Ref; egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config, int impl, egl_connection_t const* cnx, int version) : egl_object_t(get_display(dpy)), dpy(dpy), context(context), config(config), read(0), draw(0), impl(impl), cnx(cnx), version(version) { } int impl, egl_connection_t const* cnx, int version); void onLooseCurrent(); void onMakeCurrent(EGLSurface draw, EGLSurface read); EGLDisplay dpy; EGLContext context; EGLConfig config; Loading @@ -171,6 +172,7 @@ public: int impl; egl_connection_t const* cnx; int version; String8 gl_extensions; }; class egl_image_t: public egl_object_t { Loading