From be21964ff61008c134e303456e4e6e6900aad486 Mon Sep 17 00:00:00 2001 From: Kimmo Hoikka Date: Wed, 10 Sep 2014 11:39:35 +0100 Subject: [PATCH] Fix the framebuffer texture context loss handling [Problem] [Cause] [Solution] Change-Id: Ie1af7d726e7e33a3e889c7e03de79cc6b33842f5 --- .../render/gl-resources/frame-buffer-texture.cpp | 15 ++++++--------- .../render/gl-resources/native-frame-buffer-texture.cpp | 17 +++++++---------- dali/internal/render/gl-resources/texture-cache.cpp | 7 +++++++ 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/dali/internal/render/gl-resources/frame-buffer-texture.cpp b/dali/internal/render/gl-resources/frame-buffer-texture.cpp index d25ceed..0755310 100644 --- a/dali/internal/render/gl-resources/frame-buffer-texture.cpp +++ b/dali/internal/render/gl-resources/frame-buffer-texture.cpp @@ -113,16 +113,13 @@ bool FrameBufferTexture::CreateGlTexture() mContext.TexImage2D(GL_TEXTURE_2D, 0, pixelFormat,mWidth, mHeight, 0, pixelFormat, pixelDataType, NULL); - if (!mFrameBufferName) - { - // generate frame and render buffer names - mContext.GenFramebuffers(1, &mFrameBufferName); - mContext.GenRenderbuffers(1, &mRenderBufferName); + // generate frame and render buffer names + mContext.GenFramebuffers(1, &mFrameBufferName); + mContext.GenRenderbuffers(1, &mRenderBufferName); - // Bind render buffer and create 16 depth buffer - mContext.BindRenderbuffer(GL_RENDERBUFFER, mRenderBufferName); - mContext.RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, mWidth, mHeight); - } + // Bind render buffer and create 16 depth buffer + mContext.BindRenderbuffer(GL_RENDERBUFFER, mRenderBufferName); + mContext.RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, mWidth, mHeight); return mId != 0; } diff --git a/dali/internal/render/gl-resources/native-frame-buffer-texture.cpp b/dali/internal/render/gl-resources/native-frame-buffer-texture.cpp index 2a6bd75..e762dbf 100644 --- a/dali/internal/render/gl-resources/native-frame-buffer-texture.cpp +++ b/dali/internal/render/gl-resources/native-frame-buffer-texture.cpp @@ -87,16 +87,13 @@ bool NativeFrameBufferTexture::CreateGlTexture() // platform specific implementation decides on what GL extension to use mNativeImage->TargetTexture(); - if (!mFrameBufferName) - { - // generate frame and render buffer names - mContext.GenFramebuffers(1, &mFrameBufferName); - mContext.GenRenderbuffers(1, &mRenderBufferName); - - // Bind render buffer and create 16 depth buffer - mContext.BindRenderbuffer(GL_RENDERBUFFER, mRenderBufferName); - mContext.RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, mWidth, mHeight); - } + // generate frame and render buffer names + mContext.GenFramebuffers(1, &mFrameBufferName); + mContext.GenRenderbuffers(1, &mRenderBufferName); + + // Bind render buffer and create 16 depth buffer + mContext.BindRenderbuffer(GL_RENDERBUFFER, mRenderBufferName); + mContext.RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, mWidth, mHeight); } else { diff --git a/dali/internal/render/gl-resources/texture-cache.cpp b/dali/internal/render/gl-resources/texture-cache.cpp index a5b2811..c8249ff 100644 --- a/dali/internal/render/gl-resources/texture-cache.cpp +++ b/dali/internal/render/gl-resources/texture-cache.cpp @@ -363,6 +363,13 @@ void TextureCache::GlContextDestroyed() { (*iter->second).GlContextDestroyed(); // map holds intrusive pointers } + + end = mFramebufferTextures.end(); + iter = mFramebufferTextures.begin(); + for( ; iter != end; ++iter ) + { + (*iter->second).GlContextDestroyed(); // map holds intrusive pointers + } } /******************************************************************************** -- 2.7.4