diff options
| author | 2011-08-01 16:36:02 -0700 | |
|---|---|---|
| committer | 2011-08-01 16:36:02 -0700 | |
| commit | d05b34a07940f3d6009b90b3eda067a2d0a35d2c (patch) | |
| tree | e205321a5bd067fde518d37a6b0b32c2e19bec33 | |
| parent | d8501af36354aaf0de9c6c475a78941af8b0e7fc (diff) | |
| parent | 81a63350527cafce6929309533c58586878f10b5 (diff) | |
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 e6837ea360..d1037defc4 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 0e8ae619fc..89497302a2 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 ba5d29a17d..10cea22bbd 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();      } |