Loading libs/ui/EGLUtils.cpp +39 −19 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ #include <EGL/egl.h> #include <system/graphics.h> #include <private/ui/android_natives_priv.h> // ---------------------------------------------------------------------------- Loading Loading @@ -67,32 +69,50 @@ status_t EGLUtils::selectConfigForPixelFormat( return BAD_VALUE; // Get all the "potential match" configs... if (eglGetConfigs(dpy, NULL, 0, &numConfigs) == EGL_FALSE) if (eglChooseConfig(dpy, attrs, 0, 0, &numConfigs) == EGL_FALSE) return BAD_VALUE; EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs); if (numConfigs) { EGLConfig* const configs = new EGLConfig[numConfigs]; if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { free(configs); 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; 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) { if (!hasAlpha) { EGLint alphaSize; eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &alphaSize); if (alphaSize > 0) { continue; } } config = configs[i]; break; } } free(configs); delete [] configs; if (i<n) { *outConfig = config; return NO_ERROR; } } return NAME_NOT_FOUND; } Loading services/surfaceflinger/DisplayHardware/DisplayHardware.cpp +39 −6 Original line number Diff line number Diff line Loading @@ -99,6 +99,31 @@ uint32_t DisplayHardware::getMaxViewportDims() const { mMaxViewportDims[0] : mMaxViewportDims[1]; } static status_t selectConfigForPixelFormat( EGLDisplay dpy, EGLint const* attrs, PixelFormat format, EGLConfig* outConfig) { EGLConfig config = NULL; EGLint numConfigs = -1, n=0; eglGetConfigs(dpy, NULL, 0, &numConfigs); EGLConfig* const configs = new EGLConfig[numConfigs]; eglChooseConfig(dpy, attrs, configs, numConfigs, &n); for (int i=0 ; i<n ; i++) { EGLint nativeVisualId = 0; eglGetConfigAttrib(dpy, configs[i], EGL_NATIVE_VISUAL_ID, &nativeVisualId); if (nativeVisualId>0 && format == nativeVisualId) { *outConfig = configs[i]; delete [] configs; return NO_ERROR; } } delete [] configs; return NAME_NOT_FOUND; } void DisplayHardware::init(uint32_t dpy) { mNativeWindow = new FramebufferNativeWindow(); Loading @@ -108,6 +133,9 @@ void DisplayHardware::init(uint32_t dpy) exit(0); } int format; ANativeWindow const * const window = mNativeWindow.get(); window->query(window, NATIVE_WINDOW_FORMAT, &format); mDpiX = mNativeWindow->xdpi; mDpiY = mNativeWindow->ydpi; mRefreshRate = fbDev->fps; Loading @@ -116,6 +144,8 @@ void DisplayHardware::init(uint32_t dpy) EGLint numConfigs=0; EGLSurface surface; EGLContext context; EGLBoolean result; status_t err; // initialize EGL EGLint attribs[] = { Loading @@ -141,9 +171,8 @@ void DisplayHardware::init(uint32_t dpy) eglInitialize(display, NULL, NULL); eglGetConfigs(display, NULL, 0, &numConfigs); EGLConfig config; status_t err = EGLUtils::selectConfigForNativeWindow( display, attribs, mNativeWindow.get(), &config); EGLConfig config = NULL; err = selectConfigForPixelFormat(display, attribs, format, &config); LOGE_IF(err, "couldn't find an EGLConfig matching the screen format"); EGLint r,g,b,a; Loading Loading @@ -224,7 +253,11 @@ void DisplayHardware::init(uint32_t dpy) * Gather OpenGL ES extensions */ eglMakeCurrent(display, surface, surface, context); result = eglMakeCurrent(display, surface, surface, context); if (!result) { LOGE("Couldn't create a working GLES context. check logs. exiting..."); exit(0); } GLExtensions& extensions(GLExtensions::getInstance()); extensions.initWithGLStrings( Loading Loading
libs/ui/EGLUtils.cpp +39 −19 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ #include <EGL/egl.h> #include <system/graphics.h> #include <private/ui/android_natives_priv.h> // ---------------------------------------------------------------------------- Loading Loading @@ -67,32 +69,50 @@ status_t EGLUtils::selectConfigForPixelFormat( return BAD_VALUE; // Get all the "potential match" configs... if (eglGetConfigs(dpy, NULL, 0, &numConfigs) == EGL_FALSE) if (eglChooseConfig(dpy, attrs, 0, 0, &numConfigs) == EGL_FALSE) return BAD_VALUE; EGLConfig* const configs = (EGLConfig*)malloc(sizeof(EGLConfig)*numConfigs); if (numConfigs) { EGLConfig* const configs = new EGLConfig[numConfigs]; if (eglChooseConfig(dpy, attrs, configs, numConfigs, &n) == EGL_FALSE) { free(configs); 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; 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) { if (!hasAlpha) { EGLint alphaSize; eglGetConfigAttrib(dpy, configs[i], EGL_ALPHA_SIZE, &alphaSize); if (alphaSize > 0) { continue; } } config = configs[i]; break; } } free(configs); delete [] configs; if (i<n) { *outConfig = config; return NO_ERROR; } } return NAME_NOT_FOUND; } Loading
services/surfaceflinger/DisplayHardware/DisplayHardware.cpp +39 −6 Original line number Diff line number Diff line Loading @@ -99,6 +99,31 @@ uint32_t DisplayHardware::getMaxViewportDims() const { mMaxViewportDims[0] : mMaxViewportDims[1]; } static status_t selectConfigForPixelFormat( EGLDisplay dpy, EGLint const* attrs, PixelFormat format, EGLConfig* outConfig) { EGLConfig config = NULL; EGLint numConfigs = -1, n=0; eglGetConfigs(dpy, NULL, 0, &numConfigs); EGLConfig* const configs = new EGLConfig[numConfigs]; eglChooseConfig(dpy, attrs, configs, numConfigs, &n); for (int i=0 ; i<n ; i++) { EGLint nativeVisualId = 0; eglGetConfigAttrib(dpy, configs[i], EGL_NATIVE_VISUAL_ID, &nativeVisualId); if (nativeVisualId>0 && format == nativeVisualId) { *outConfig = configs[i]; delete [] configs; return NO_ERROR; } } delete [] configs; return NAME_NOT_FOUND; } void DisplayHardware::init(uint32_t dpy) { mNativeWindow = new FramebufferNativeWindow(); Loading @@ -108,6 +133,9 @@ void DisplayHardware::init(uint32_t dpy) exit(0); } int format; ANativeWindow const * const window = mNativeWindow.get(); window->query(window, NATIVE_WINDOW_FORMAT, &format); mDpiX = mNativeWindow->xdpi; mDpiY = mNativeWindow->ydpi; mRefreshRate = fbDev->fps; Loading @@ -116,6 +144,8 @@ void DisplayHardware::init(uint32_t dpy) EGLint numConfigs=0; EGLSurface surface; EGLContext context; EGLBoolean result; status_t err; // initialize EGL EGLint attribs[] = { Loading @@ -141,9 +171,8 @@ void DisplayHardware::init(uint32_t dpy) eglInitialize(display, NULL, NULL); eglGetConfigs(display, NULL, 0, &numConfigs); EGLConfig config; status_t err = EGLUtils::selectConfigForNativeWindow( display, attribs, mNativeWindow.get(), &config); EGLConfig config = NULL; err = selectConfigForPixelFormat(display, attribs, format, &config); LOGE_IF(err, "couldn't find an EGLConfig matching the screen format"); EGLint r,g,b,a; Loading Loading @@ -224,7 +253,11 @@ void DisplayHardware::init(uint32_t dpy) * Gather OpenGL ES extensions */ eglMakeCurrent(display, surface, surface, context); result = eglMakeCurrent(display, surface, surface, context); if (!result) { LOGE("Couldn't create a working GLES context. check logs. exiting..."); exit(0); } GLExtensions& extensions(GLExtensions::getInstance()); extensions.initWithGLStrings( Loading