diff options
author | Jesse Hall <jessehall@google.com> | 2012-09-19 22:30:55 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-19 22:30:56 -0700 |
commit | 1887af43a5dd5181f4582a6090ae25c7aa17fa4a (patch) | |
tree | 17034472dfd405f1a0902487aad30eae089f4559 | |
parent | 2a60824abcbfc2c5b936d3711d6d32318c489e88 (diff) | |
parent | f21cffa7d707dad10b2974c58c91482f7ca689ac (diff) | |
download | frameworks_native-1887af43a5dd5181f4582a6090ae25c7aa17fa4a.zip frameworks_native-1887af43a5dd5181f4582a6090ae25c7aa17fa4a.tar.gz frameworks_native-1887af43a5dd5181f4582a6090ae25c7aa17fa4a.tar.bz2 |
Merge "Allow 16-bit color EGLConfigs" into jb-mr1-dev
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index a1e72a4..c99f250 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -268,25 +268,41 @@ EGLConfig SurfaceFlinger::selectEGLConfig(EGLDisplay display, EGLint nativeVisua EGLint attribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + // The rest of the attributes must be in this order and at the end + // of the list; we rely on that for fallback searches below. EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, - // EGL_RECORDABLE_ANDROID must be last so that we can retry - // without it easily (see below) EGL_RECORDABLE_ANDROID, EGL_TRUE, EGL_NONE }; err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config); - if (err) { - // maybe we failed because of EGL_RECORDABLE_ANDROID - ALOGW("couldn't find an EGLConfig with EGL_RECORDABLE_ANDROID"); - attribs[NELEM(attribs) - 3] = EGL_NONE; - err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config); - } - ALOGE_IF(err, "couldn't find an EGLConfig matching the screen format"); - if (eglGetConfigAttrib(display, config, EGL_CONFIG_CAVEAT, &dummy) == EGL_TRUE) { + if (!err) + goto success; + + // maybe we failed because of EGL_RECORDABLE_ANDROID + ALOGW("no suitable EGLConfig found, trying without EGL_RECORDABLE_ANDROID"); + attribs[NELEM(attribs) - 3] = EGL_NONE; + err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config); + if (!err) + goto success; + + // allow less than 24-bit color; the non-gpu-accelerated emulator only + // supports 16-bit color + ALOGW("no suitable EGLConfig found, trying with 16-bit color allowed"); + attribs[NELEM(attribs) - 9] = EGL_NONE; + err = selectConfigForPixelFormat(display, attribs, nativeVisualId, &config); + if (!err) + goto success; + + // this EGL is too lame for Android + ALOGE("no suitable EGLConfig found, giving up"); + + return 0; + +success: + if (eglGetConfigAttrib(display, config, EGL_CONFIG_CAVEAT, &dummy)) ALOGW_IF(dummy == EGL_SLOW_CONFIG, "EGL_SLOW_CONFIG selected!"); - } return config; } |