From d917ae4330d3af16a3f2af96f7666581d38854a6 Mon Sep 17 00:00:00 2001 From: Louis-Francis Ratté-Boulianne Date: Thu, 4 Dec 2014 22:27:38 -0500 Subject: vcl: Don't keep a reference to the texture in the FBO object Change-Id: I240d2b44e77d28af3cd5952b6d666a1709c4c54a --- vcl/inc/opengl/framebuffer.hxx | 4 ++-- vcl/opengl/framebuffer.cxx | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/vcl/inc/opengl/framebuffer.hxx b/vcl/inc/opengl/framebuffer.hxx index e9c9065f1edc..915008c03464 100644 --- a/vcl/inc/opengl/framebuffer.hxx +++ b/vcl/inc/opengl/framebuffer.hxx @@ -18,10 +18,10 @@ class VCL_PLUGIN_PUBLIC OpenGLFramebuffer { private: - GLuint mnId; - OpenGLTexture maAttachedTexture; + GLuint mnId; int mnWidth; int mnHeight; + GLuint mnAttachedTexture; public: OpenGLFramebuffer(); diff --git a/vcl/opengl/framebuffer.cxx b/vcl/opengl/framebuffer.cxx index e760b53f614d..c4dfb05ae4b1 100644 --- a/vcl/opengl/framebuffer.cxx +++ b/vcl/opengl/framebuffer.cxx @@ -17,6 +17,7 @@ OpenGLFramebuffer::OpenGLFramebuffer() : mnId( 0 ), mnWidth( 0 ), mnHeight( 0 ), + mnAttachedTexture( 0 ), mpPrevFramebuffer( NULL ), mpNextFramebuffer( NULL ) { @@ -45,30 +46,37 @@ void OpenGLFramebuffer::Unbind() bool OpenGLFramebuffer::IsFree() const { - return (!maAttachedTexture); + return (!mnAttachedTexture); } bool OpenGLFramebuffer::IsAttached( const OpenGLTexture& rTexture ) const { - return ( maAttachedTexture == rTexture ); + return ( mnAttachedTexture == rTexture.Id() ); } void OpenGLFramebuffer::AttachTexture( const OpenGLTexture& rTexture ) { + if( rTexture.Id() == mnAttachedTexture ) + return; + SAL_INFO( "vcl.opengl", "Attaching texture " << rTexture.Id() << " to framebuffer " << (int)mnId ); - maAttachedTexture = rTexture; + mnAttachedTexture = rTexture.Id(); mnWidth = rTexture.GetWidth(); mnHeight = rTexture.GetHeight(); glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, - maAttachedTexture.Id(), 0 ); + mnAttachedTexture, 0 ); CHECK_GL_ERROR(); } void OpenGLFramebuffer::DetachTexture() { - maAttachedTexture = OpenGLTexture(); - glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0 ); - CHECK_GL_ERROR(); + if( mnAttachedTexture != 0 ) + { + CHECK_GL_ERROR(); + mnAttachedTexture = 0; + glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0 ); + CHECK_GL_ERROR(); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3