diff options
author | Mathias Agopian <mathias@google.com> | 2011-08-01 16:36:02 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-08-01 16:36:02 -0700 |
commit | d05b34a07940f3d6009b90b3eda067a2d0a35d2c (patch) | |
tree | e205321a5bd067fde518d37a6b0b32c2e19bec33 | |
parent | d8501af36354aaf0de9c6c475a78941af8b0e7fc (diff) | |
parent | 81a63350527cafce6929309533c58586878f10b5 (diff) | |
download | frameworks_native-d05b34a07940f3d6009b90b3eda067a2d0a35d2c.zip frameworks_native-d05b34a07940f3d6009b90b3eda067a2d0a35d2c.tar.gz frameworks_native-d05b34a07940f3d6009b90b3eda067a2d0a35d2c.tar.bz2 |
Merge "connect/disconnect is now called from our EGL wrapper"
-rw-r--r-- | libs/gui/SurfaceTextureClient.cpp | 10 | ||||
-rw-r--r-- | libs/ui/FramebufferNativeWindow.cpp | 2 | ||||
-rw-r--r-- | opengl/libs/EGL/eglApi.cpp | 19 |
3 files changed, 27 insertions, 4 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index e6837ea..d1037de 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -258,10 +258,10 @@ int SurfaceTextureClient::perform(int operation, va_list args) int res = NO_ERROR; switch (operation) { case NATIVE_WINDOW_CONNECT: - res = dispatchConnect(args); + // deprecated. must return NO_ERROR. break; case NATIVE_WINDOW_DISCONNECT: - res = dispatchDisconnect(args); + // deprecated. must return NO_ERROR. break; case NATIVE_WINDOW_SET_USAGE: res = dispatchSetUsage(args); @@ -296,6 +296,12 @@ int SurfaceTextureClient::perform(int operation, va_list args) case NATIVE_WINDOW_SET_SCALING_MODE: res = dispatchSetScalingMode(args); break; + case NATIVE_WINDOW_API_CONNECT: + res = dispatchConnect(args); + break; + case NATIVE_WINDOW_API_DISCONNECT: + res = dispatchDisconnect(args); + break; default: res = NAME_NOT_FOUND; break; diff --git a/libs/ui/FramebufferNativeWindow.cpp b/libs/ui/FramebufferNativeWindow.cpp index 0e8ae61..8949730 100644 --- a/libs/ui/FramebufferNativeWindow.cpp +++ b/libs/ui/FramebufferNativeWindow.cpp @@ -317,6 +317,8 @@ int FramebufferNativeWindow::perform(ANativeWindow* window, case NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS: case NATIVE_WINDOW_SET_BUFFERS_FORMAT: case NATIVE_WINDOW_SET_BUFFERS_TRANSFORM: + case NATIVE_WINDOW_API_CONNECT: + case NATIVE_WINDOW_API_DISCONNECT: // TODO: we should implement these return NO_ERROR; diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index ba5d29a..10cea22 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -363,6 +363,12 @@ EGLSurface eglCreateWindowSurface( EGLDisplay dpy, EGLConfig config, EGLConfig iConfig = dp->configs[intptr_t(config)].config; EGLint format; + if (native_window_api_connect(window, NATIVE_WINDOW_API_EGL) != OK) { + LOGE("EGLNativeWindowType %p already connected to another API", + window); + return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); + } + // set the native window's buffers format to match this config if (cnx->egl.eglGetConfigAttrib(iDpy, iConfig, EGL_NATIVE_VISUAL_ID, &format)) { @@ -371,6 +377,7 @@ EGLSurface eglCreateWindowSurface( EGLDisplay dpy, EGLConfig config, if (err != 0) { LOGE("error setting native window pixel format: %s (%d)", strerror(-err), err); + native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } } @@ -383,6 +390,10 @@ EGLSurface eglCreateWindowSurface( EGLDisplay dpy, EGLConfig config, dp->configs[intptr_t(config)].impl, cnx); return s; } + + // EGLSurface creation failed + native_window_set_buffers_format(window, 0); + native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); } return EGL_NO_SURFACE; } @@ -443,8 +454,12 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface) EGLBoolean result = s->cnx->egl.eglDestroySurface( dp->disp[s->impl].dpy, s->surface); if (result == EGL_TRUE) { - if (s->win != NULL) { - native_window_set_buffers_geometry(s->win.get(), 0, 0, 0); + ANativeWindow* const window = s->win.get(); + if (window != NULL) { + native_window_set_buffers_format(window, 0); + if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) { + LOGE("EGLNativeWindowType %p disconnected failed", window); + } } _s.terminate(); } |