summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2015-12-31 22:12:59 +0000
committerMichael Meeks <michael.meeks@collabora.com>2016-01-01 10:07:06 +0000
commit370199fa0f92f29cb75ad50705c71cd871abb2d9 (patch)
tree3e3f22784f85f5f85962d4f691bd838504f4216b
parent38e6383009aba9ff779ad9d0b4d9c94ed2bce347 (diff)
vcl: improve OpenGL debugging variously.
Change-Id: I097f1c1fb7fb505b6859289997bff3562fc06ba6 Reviewed-on: https://gerrit.libreoffice.org/21027 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r--include/vcl/opengl/OpenGLContext.hxx1
-rw-r--r--vcl/opengl/framebuffer.cxx1
-rw-r--r--vcl/opengl/gdiimpl.cxx2
-rw-r--r--vcl/source/opengl/OpenGLContext.cxx21
-rw-r--r--vcl/source/opengl/OpenGLHelper.cxx3
5 files changed, 26 insertions, 2 deletions
diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
index 6f5ba5f36b91..b2a0f09412e1 100644
--- a/include/vcl/opengl/OpenGLContext.hxx
+++ b/include/vcl/opengl/OpenGLContext.hxx
@@ -156,6 +156,7 @@ public:
OpenGLFramebuffer* AcquireFramebuffer( const OpenGLTexture& rTexture );
static void ReleaseFramebuffer( OpenGLFramebuffer* pFramebuffer );
void UnbindTextureFromFramebuffers( GLuint nTexture );
+ static bool IsTextureAttachedAnywhere( GLuint nTexture );
void ReleaseFramebuffer( const OpenGLTexture& rTexture );
void ReleaseFramebuffers();
diff --git a/vcl/opengl/framebuffer.cxx b/vcl/opengl/framebuffer.cxx
index 464662d31709..215eadf1312d 100644
--- a/vcl/opengl/framebuffer.cxx
+++ b/vcl/opengl/framebuffer.cxx
@@ -29,6 +29,7 @@ OpenGLFramebuffer::OpenGLFramebuffer() :
OpenGLFramebuffer::~OpenGLFramebuffer()
{
glDeleteFramebuffers( 1, &mnId );
+ VCL_GL_INFO( "Deleted framebuffer " << (int)mnId );
CHECK_GL_ERROR();
}
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 21ff21147394..7c6664bdd7bd 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -460,9 +460,9 @@ bool OpenGLSalGraphicsImpl::CheckOffscreenTexture()
if( maOffscreenTex.GetWidth() != GetWidth() ||
maOffscreenTex.GetHeight() != GetHeight() )
{
+ VCL_GL_INFO( "re-size offscreen texture " << maOffscreenTex.Id() );
mpContext->ReleaseFramebuffer( maOffscreenTex );
maOffscreenTex = OpenGLTexture();
- VCL_GL_INFO( "re-size offscreen texture" );
}
}
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 36ede4264cbf..d4397a130d24 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -1647,6 +1647,27 @@ void OpenGLContext::UnbindTextureFromFramebuffers( GLuint nTexture )
}
pFramebuffer = pFramebuffer->mpPrevFramebuffer;
}
+
+ // Lets just check that no other context has a framebuffer
+ // with this texture - that would be bad ...
+ assert( !IsTextureAttachedAnywhere( nTexture ) );
+}
+
+/// Method for debugging; check texture is not already attached.
+bool OpenGLContext::IsTextureAttachedAnywhere( GLuint nTexture )
+{
+ ImplSVData* pSVData = ImplGetSVData();
+ for( auto *pCheck = pSVData->maGDIData.mpLastContext; pCheck;
+ pCheck = pCheck->mpPrevContext )
+ {
+ for( auto pBuffer = pCheck->mpLastFramebuffer; pBuffer;
+ pBuffer = pBuffer->mpPrevFramebuffer )
+ {
+ if( pBuffer->IsAttached( nTexture ) )
+ return true;
+ }
+ }
+ return false;
}
void OpenGLContext::ReleaseFramebuffer( OpenGLFramebuffer* pFramebuffer )
diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx
index bfd811001926..32f299434e39 100644
--- a/vcl/source/opengl/OpenGLHelper.cxx
+++ b/vcl/source/opengl/OpenGLHelper.cxx
@@ -1012,7 +1012,8 @@ bool OpenGLWrapper::isVCLOpenGLEnabled()
void OpenGLHelper::debugMsgStream(std::ostringstream const &pStream)
{
- debugMsgPrint("%s", pStream.str().c_str());
+ debugMsgPrint ("%x: %s", osl_getThreadIdentifier(nullptr),
+ pStream.str().c_str());
}
void OpenGLHelper::debugMsgPrint(const char *pFormat, ...)