include/vcl/opengl/OpenGLContext.hxx | 1 + vcl/opengl/framebuffer.cxx | 1 + vcl/opengl/gdiimpl.cxx | 2 +- vcl/source/opengl/OpenGLContext.cxx | 21 +++++++++++++++++++++ vcl/source/opengl/OpenGLHelper.cxx | 3 ++- 5 files changed, 26 insertions(+), 2 deletions(-)
New commits: commit 370199fa0f92f29cb75ad50705c71cd871abb2d9 Author: Michael Meeks <michael.me...@collabora.com> Date: Thu Dec 31 22:12:59 2015 +0000 vcl: improve OpenGL debugging variously. Change-Id: I097f1c1fb7fb505b6859289997bff3562fc06ba6 Reviewed-on: https://gerrit.libreoffice.org/21027 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index 6f5ba5f..b2a0f09 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 464662d..215eadf 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 21ff211..7c6664b 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 36ede42..d4397a1 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 bfd8110..32f2994 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, ...) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits