diff options
| author | Mathias Agopian <mathias@google.com> | 2011-11-13 23:52:47 -0800 |
|---|---|---|
| committer | Mathias Agopian <mathias@google.com> | 2011-11-14 19:05:45 -0800 |
| commit | e88740e6264d829099d04bbe57d1ec2b14996c40 (patch) | |
| tree | bef49e54d8541fda96a8defd68807efa1573d662 /opengl/libs/EGL/egl_display.cpp | |
| parent | 274e03c90ee6054e81a16b1bd0a54258e08ddee9 (diff) | |
| download | frameworks_base-e88740e6264d829099d04bbe57d1ec2b14996c40.zip frameworks_base-e88740e6264d829099d04bbe57d1ec2b14996c40.tar.gz frameworks_base-e88740e6264d829099d04bbe57d1ec2b14996c40.tar.bz2 | |
rework a bit how we manage EGL extensions
- don't advertise extensions that are not supported
by any implementation
- remove EGL_ANDROID_swap_rectangle which is not
implemented by anybody and confuses people
- add some comments about mandatory extensions
Bug: 5428001
Change-Id: Id8dc48116ac1d1eb79ec9ef55d03e29d4257c1f3
Diffstat (limited to 'opengl/libs/EGL/egl_display.cpp')
| -rw-r--r-- | opengl/libs/EGL/egl_display.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp index 2935832..862b48d 100644 --- a/opengl/libs/EGL/egl_display.cpp +++ b/opengl/libs/EGL/egl_display.cpp @@ -14,6 +14,8 @@ ** limitations under the License. */ +#include <string.h> + #include "egl_cache.h" #include "egl_display.h" #include "egl_object.h" @@ -25,6 +27,36 @@ namespace android { // ---------------------------------------------------------------------------- +static char const * const sVendorString = "Android"; +static char const * const sVersionString = "1.4 Android META-EGL"; +static char const * const sClientApiString = "OpenGL ES"; + +// this is the list of EGL extensions that are exposed to applications +// some of them are mandatory because used by the ANDROID system. +// +// mandatory extensions are required per the CDD and not explicitly +// checked during EGL initialization. the system *assumes* these extensions +// are present. the system may not function properly if some mandatory +// extensions are missing. +// +// NOTE: sExtensionString MUST be have a single space as the last character. +// +static char const * const sExtensionString = + "EGL_KHR_image " // mandatory + "EGL_KHR_image_base " // mandatory + "EGL_KHR_image_pixmap " + "EGL_KHR_gl_texture_2D_image " + "EGL_KHR_gl_texture_cubemap_image " + "EGL_KHR_gl_renderbuffer_image " + "EGL_KHR_fence_sync " + "EGL_NV_system_time " + "EGL_ANDROID_image_native_buffer " // mandatory + ; + +// extensions not exposed to applications but used by the ANDROID system +// "EGL_ANDROID_recordable " // mandatory +// "EGL_ANDROID_blob_cache " // strongly recommended + extern void initEglTraceLevel(); extern void setGLHooksThreadSpecific(gl_hooks_t const *value); @@ -174,6 +206,36 @@ EGLBoolean egl_display_t::initialize(EGLint *major, EGLint *minor) { } } + // the query strings are per-display + mVendorString.setTo(sVendorString); + mVersionString.setTo(sVersionString); + mClientApiString.setTo(sClientApiString); + + // we only add extensions that exist in at least one implementation + char const* start = sExtensionString; + char const* end; + do { + // find the space separating this extension for the next one + end = strchr(start, ' '); + if (end) { + // length of the extension string + const size_t len = end - start; + // NOTE: we could avoid the copy if we had strnstr. + const String8 ext(start, len); + // now go through all implementations and look for this extension + for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) { + // if we find it, add this extension string to our list + // (and don't forget the space) + const char* match = strstr(disp[i].queryString.extensions, ext.string()); + if (match && (match[len] == ' ' || match[len] == 0)) { + mExtensionString.append(start, len+1); + } + } + // process the next extension string, and skip the space. + start = end + 1; + } + } while (end); + egl_cache_t::get()->initialize(this); EGLBoolean res = EGL_FALSE; |
