diff options
Diffstat (limited to 'libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp')
| -rw-r--r-- | libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp | 51 |
1 files changed, 15 insertions, 36 deletions
diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp index 002a3ab..a479b4c 100644 --- a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +++ b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp @@ -42,28 +42,6 @@ using namespace android; -static __attribute__((noinline)) -const char *egl_strerror(EGLint err) -{ - switch (err){ - case EGL_SUCCESS: return "EGL_SUCCESS"; - case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; - case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; - case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; - case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; - case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; - case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; - case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; - case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; - case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; - case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; - case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; - case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; - case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; - case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; - default: return "UNKNOWN"; - } -} static __attribute__((noinline)) void checkGLErrors() @@ -80,7 +58,7 @@ void checkEGLErrors(const char* token) // GLESonGL seems to be returning 0 when there is no errors? if (error && error != EGL_SUCCESS) LOGE("%s error 0x%04x (%s)", - token, int(error), egl_strerror(error)); + token, int(error), EGLUtils::strerror(error)); } @@ -112,28 +90,22 @@ PixelFormat DisplayHardware::getFormat() const { return mFormat; } void DisplayHardware::init(uint32_t dpy) { - hw_module_t const* module; - mNativeWindow = new FramebufferNativeWindow(); + framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); mOverlayEngine = NULL; + hw_module_t const* module; if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) { overlay_control_open(module, &mOverlayEngine); } - framebuffer_device_t const * fbDev = mNativeWindow->getDevice(); - - PixelFormatInfo fbFormatInfo; - getPixelFormatInfo(PixelFormat(fbDev->format), &fbFormatInfo); - // initialize EGL const EGLint attribs[] = { - EGL_BUFFER_SIZE, fbFormatInfo.bitsPerPixel, - EGL_DEPTH_SIZE, 0, + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE }; EGLint w, h, dummy; - EGLint numConfigs=0, n=0; + EGLint numConfigs=0; EGLSurface surface; EGLContext context; mFlags = 0; @@ -146,10 +118,16 @@ void DisplayHardware::init(uint32_t dpy) eglGetConfigs(display, NULL, 0, &numConfigs); EGLConfig config; - status_t err = EGLUtils::selectConfigForPixelFormat( - display, attribs, fbDev->format, &config); + status_t err = EGLUtils::selectConfigForNativeWindow( + display, attribs, mNativeWindow.get(), &config); LOGE_IF(err, "couldn't find an EGLConfig matching the screen format"); + EGLint r,g,b,a; + eglGetConfigAttrib(display, config, EGL_RED_SIZE, &r); + eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &g); + eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &b); + eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &a); + /* * Gather EGL extensions */ @@ -163,7 +141,8 @@ void DisplayHardware::init(uint32_t dpy) LOGI("version : %s", eglQueryString(display, EGL_VERSION)); LOGI("extensions: %s", egl_extensions); LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported"); - + LOGI("EGLSurface: %d-%d-%d-%d, config=%p", r, g, b, a, config); + if (mNativeWindow->isUpdateOnDemand()) { mFlags |= UPDATE_ON_DEMAND; |
