diff options
author | Jesse Hall <jessehall@google.com> | 2012-05-16 23:44:34 -0700 |
---|---|---|
committer | Jesse Hall <jessehall@google.com> | 2012-05-17 11:25:21 -0700 |
commit | 90ed8508ed89b4fdb5c21d621b29369d31dcb958 (patch) | |
tree | f76f8b27b48b3bdd21c7fc68b130b8db32c7719b /libs/gui/SurfaceTexture.cpp | |
parent | e804aa4819a764e1f3929f4c578e9a44593a1467 (diff) | |
download | frameworks_native-90ed8508ed89b4fdb5c21d621b29369d31dcb958.zip frameworks_native-90ed8508ed89b4fdb5c21d621b29369d31dcb958.tar.gz frameworks_native-90ed8508ed89b4fdb5c21d621b29369d31dcb958.tar.bz2 |
Recreate EGLImage for previously used slots
SurfaceTexture would only create an EGLImage for a buffer slot when
BufferQueue returns a GraphicBuffer, i.e. either the slot was acquired
for the first time ever, or the buffer for the slot was reallocated.
But the EGLImage may also need to be re-created for a
previously-acquired buffer if the slot's EGLImage was destroyed during
detachFromContext(); in this case BufferQueue won't return a
GraphicBuffer since SurfaceTexture already has a reference to the
correct buffer.
Bug: 6461693
Change-Id: Ib95d0d757192efe336c5fda0866f857481a6617d
Diffstat (limited to 'libs/gui/SurfaceTexture.cpp')
-rw-r--r-- | libs/gui/SurfaceTexture.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp index 1e58a21..feaf07a 100644 --- a/libs/gui/SurfaceTexture.cpp +++ b/libs/gui/SurfaceTexture.cpp @@ -228,14 +228,16 @@ status_t SurfaceTexture::updateTexImage() { mEGLSlots[buf].mGraphicBuffer = item.mGraphicBuffer; } - // Update the GL texture object. + // Update the GL texture object. We may have to do this even when + // item.mGraphicBuffer == NULL, if we destroyed the EGLImage when + // detaching from a context but the buffer has not been re-allocated. EGLImageKHR image = mEGLSlots[buf].mEglImage; if (image == EGL_NO_IMAGE_KHR) { - if (item.mGraphicBuffer == 0) { + if (mEGLSlots[buf].mGraphicBuffer == NULL) { ST_LOGE("updateTexImage: buffer at slot %d is null", buf); return BAD_VALUE; } - image = createImage(dpy, item.mGraphicBuffer); + image = createImage(dpy, mEGLSlots[buf].mGraphicBuffer); mEGLSlots[buf].mEglImage = image; if (image == EGL_NO_IMAGE_KHR) { // NOTE: if dpy was invalid, createImage() is guaranteed to |