Loading libs/ui/EGLUtils.cpp +19 −39 Original line number Original line Diff line number Diff line Loading @@ -24,8 +24,6 @@ #include <EGL/egl.h> #include <EGL/egl.h> #include <system/graphics.h> #include <private/ui/android_natives_priv.h> #include <private/ui/android_natives_priv.h> // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- Loading Loading @@ -69,50 +67,32 @@ status_t EGLUtils::selectConfigForPixelFormat( return BAD_VALUE; return BAD_VALUE; // Get all the "potential match" configs... // 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; return BAD_VALUE; if (numConfigs) { EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs); EGLConfig* const configs = new EGLConfig[numConfigs]; if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { delete [] configs; free(configs); return BAD_VALUE; 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; int i; EGLConfig config = NULL; for (i=0 ; i<n ; i++) { for (i=0 ; i<n ; i++) { if (!hasAlpha) { EGLint nativeVisualId = 0; EGLint alphaSize; eglGetConfigAttrib(dpy, configs[i], EGL_NATIVE_VISUAL_ID, &nativeVisualId); eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &alphaSize); if (nativeVisualId>0 && format == nativeVisualId) { if (alphaSize > 0) { continue; } } config = configs[i]; config = configs[i]; break; break; } } } delete [] configs; free(configs); if (i<n) { if (i<n) { *outConfig = config; *outConfig = config; return NO_ERROR; return NO_ERROR; } } } return NAME_NOT_FOUND; return NAME_NOT_FOUND; } } Loading Loading
libs/ui/EGLUtils.cpp +19 −39 Original line number Original line Diff line number Diff line Loading @@ -24,8 +24,6 @@ #include <EGL/egl.h> #include <EGL/egl.h> #include <system/graphics.h> #include <private/ui/android_natives_priv.h> #include <private/ui/android_natives_priv.h> // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- Loading Loading @@ -69,50 +67,32 @@ status_t EGLUtils::selectConfigForPixelFormat( return BAD_VALUE; return BAD_VALUE; // Get all the "potential match" configs... // 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; return BAD_VALUE; if (numConfigs) { EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs); EGLConfig* const configs = new EGLConfig[numConfigs]; if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { delete [] configs; free(configs); return BAD_VALUE; 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; int i; EGLConfig config = NULL; for (i=0 ; i<n ; i++) { for (i=0 ; i<n ; i++) { if (!hasAlpha) { EGLint nativeVisualId = 0; EGLint alphaSize; eglGetConfigAttrib(dpy, configs[i], EGL_NATIVE_VISUAL_ID, &nativeVisualId); eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &alphaSize); if (nativeVisualId>0 && format == nativeVisualId) { if (alphaSize > 0) { continue; } } config = configs[i]; config = configs[i]; break; break; } } } delete [] configs; free(configs); if (i<n) { if (i<n) { *outConfig = config; *outConfig = config; return NO_ERROR; return NO_ERROR; } } } return NAME_NOT_FOUND; return NAME_NOT_FOUND; } } Loading