summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis-Francis Ratté-Boulianne <lfrb@collabora.com>2014-12-04 22:27:38 -0500
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-12-15 21:32:32 +0100
commitd917ae4330d3af16a3f2af96f7666581d38854a6 (patch)
treee1c95bb69e8b2d9f037966826a7a22125a65e3ac
parentvcl: Re-use a framebuffer of the same size when possible (diff)
downloadcore-private/moggi/opengl-4-4-build-test.tar.gz
core-private/moggi/opengl-4-4-build-test.zip
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.hxx4
-rw-r--r--vcl/opengl/framebuffer.cxx22
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: */