diff options
| -rw-r--r-- | libs/ui/EGLUtils.cpp | 58 | ||||
| -rw-r--r-- | opengl/tests/swapinterval/swapinterval.cpp | 16 |
2 files changed, 29 insertions, 45 deletions
diff --git a/libs/ui/EGLUtils.cpp b/libs/ui/EGLUtils.cpp index 020646b9c4..f24a71d88d 100644 --- a/libs/ui/EGLUtils.cpp +++ b/libs/ui/EGLUtils.cpp @@ -24,8 +24,6 @@ #include <EGL/egl.h> -#include <system/graphics.h> - #include <private/ui/android_natives_priv.h> // ---------------------------------------------------------------------------- @@ -69,49 +67,31 @@ status_t EGLUtils::selectConfigForPixelFormat( return BAD_VALUE; // Get all the "potential match" configs... - if (eglChooseConfig(dpy, attrs, 0, 0, &numConfigs) == EGL_FALSE) + if (eglGetConfigs(dpy, NULL, 0, &numConfigs) == EGL_FALSE) return BAD_VALUE; - if (numConfigs) { - EGLConfig* const configs = new EGLConfig[numConfigs]; - if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { - delete [] configs; - return BAD_VALUE; - } - - bool hasAlpha = false; - switch (format) { - case HAL_PIXEL_FORMAT_RGBA_8888: - case HAL_PIXEL_FORMAT_BGRA_8888: - case HAL_PIXEL_FORMAT_RGBA_5551: - case HAL_PIXEL_FORMAT_RGBA_4444: - hasAlpha = true; - break; - } - - // The first config is guaranteed to over-satisfy the constraints - EGLConfig config = configs[0]; - - // go through the list and skip configs that over-satisfy our needs - int i; - for (i=0 ; i<n ; i++) { - if (!hasAlpha) { - EGLint alphaSize; - eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &alphaSize); - if (alphaSize > 0) { - continue; - } - } + EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs); + if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { + free(configs); + return BAD_VALUE; + } + + int i; + EGLConfig config = NULL; + for (i=0 ; i<n ; i++) { + EGLint nativeVisualId = 0; + eglGetConfigAttrib(dpy, configs[i], EGL_NATIVE_VISUAL_ID, &nativeVisualId); + if (nativeVisualId>0 && format == nativeVisualId) { config = configs[i]; break; } + } - delete [] configs; - - if (i<n) { - *outConfig = config; - return NO_ERROR; - } + free(configs); + + if (i<n) { + *outConfig = config; + return NO_ERROR; } return NAME_NOT_FOUND; diff --git a/opengl/tests/swapinterval/swapinterval.cpp b/opengl/tests/swapinterval/swapinterval.cpp index df53b62699..8ca031bef5 100644 --- a/opengl/tests/swapinterval/swapinterval.cpp +++ b/opengl/tests/swapinterval/swapinterval.cpp @@ -48,31 +48,35 @@ int main(int argc, char** argv) EGLNativeWindowType window = android_createDisplaySurface(); dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); - eglInitialize(dpy, 0 ,0) ;//&majorVersion, &minorVersion); + eglInitialize(dpy, &majorVersion, &minorVersion); eglGetConfigs(dpy, NULL, 0, &numConfigs); printf("# configs = %d\n", numConfigs); status_t err = EGLUtils::selectConfigForNativeWindow( dpy, configAttribs, window, &config); if (err) { - fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n"); + fprintf(stderr, "error: %s", EGLUtils::strerror(eglGetError())); + eglTerminate(dpy); return 0; } - EGLint r,g,b,a; + EGLint r,g,b,a, vid; eglGetConfigAttrib(dpy, config, EGL_RED_SIZE, &r); eglGetConfigAttrib(dpy, config, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(dpy, config, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(dpy, config, EGL_ALPHA_SIZE, &a); + eglGetConfigAttrib(dpy, config, EGL_NATIVE_VISUAL_ID, &vid); surface = eglCreateWindowSurface(dpy, config, window, NULL); if (surface == EGL_NO_SURFACE) { EGLint err = eglGetError(); - fprintf(stderr, "%s, config=%p, format = %d-%d-%d-%d\n", - EGLUtils::strerror(err), config, r,g,b,a); + fprintf(stderr, "error: %s, config=%p, format = %d-%d-%d-%d, visual-id = %d\n", + EGLUtils::strerror(err), config, r,g,b,a, vid); + eglTerminate(dpy); return 0; } else { - printf("config=%p, format = %d-%d-%d-%d\n", config, r,g,b,a); + printf("config=%p, format = %d-%d-%d-%d, visual-id = %d\n", + config, r,g,b,a, vid); } context = eglCreateContext(dpy, config, NULL, NULL); |