diff options
author | Louis-Francis Ratté-Boulianne <lfrb@collabora.com> | 2014-12-04 22:27:38 -0500 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-12-15 21:32:32 +0100 |
commit | d917ae4330d3af16a3f2af96f7666581d38854a6 (patch) | |
tree | e1c95bb69e8b2d9f037966826a7a22125a65e3ac | |
parent | f13df3095481c11aed24b573dc6b84a8b42bd768 (diff) |
vcl: Don't keep a reference to the texture in the FBO object
private/moggi/opengl-4-4-build-test
Change-Id: I240d2b44e77d28af3cd5952b6d666a1709c4c54a
-rw-r--r-- | vcl/inc/opengl/framebuffer.hxx | 4 | ||||
-rw-r--r-- | 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: */ |