vcl/inc/openglgdiimpl.hxx | 2 +- vcl/opengl/gdiimpl.cxx | 36 +++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 18 deletions(-)
New commits: commit ce326521f315893dedaffb3a851a1ed0fc6eb1b6 Author: Michael Meeks <michael.me...@collabora.com> Date: Thu Dec 10 18:31:04 2015 +0000 vcl: opengl - lean on the default window's context much more. Avoid creating our own OpenGLContext to render until we need to refresh the screen. Change-Id: I29d4a1cb6193c92ed77ae98566f8b897a6bc67b5 Reviewed-on: https://gerrit.libreoffice.org/20709 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx index 813a7be..a81b1e8 100644 --- a/vcl/inc/openglgdiimpl.hxx +++ b/vcl/inc/openglgdiimpl.hxx @@ -158,7 +158,7 @@ public: void PostDraw(); protected: - bool AcquireContext(); + bool AcquireContext(bool bForceCreate = false); bool ReleaseContext(); /// retrieve the default context for offscreen rendering diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx index 860cdbc..41f8e93 100644 --- a/vcl/opengl/gdiimpl.cxx +++ b/vcl/opengl/gdiimpl.cxx @@ -92,7 +92,7 @@ OpenGLSalGraphicsImpl::~OpenGLSalGraphicsImpl() rtl::Reference<OpenGLContext> OpenGLSalGraphicsImpl::GetOpenGLContext() { - if( !AcquireContext() ) + if( !AcquireContext(true) ) return nullptr; return mpContext; } @@ -102,7 +102,7 @@ rtl::Reference<OpenGLContext> OpenGLSalGraphicsImpl::GetDefaultContext() return ImplGetDefaultWindow()->GetGraphics()->GetOpenGLContext(); } -bool OpenGLSalGraphicsImpl::AcquireContext( ) +bool OpenGLSalGraphicsImpl::AcquireContext( bool bForceCreate ) { ImplSVData* pSVData = ImplGetSVData(); @@ -134,7 +134,12 @@ bool OpenGLSalGraphicsImpl::AcquireContext( ) mpContext = pContext; else if( mpWindowContext.is() ) mpContext = mpWindowContext; - else + else if( bForceCreate && !IsOffscreen() ) + { + mpWindowContext = CreateWinContext(); + mpContext = mpWindowContext; + } + if( !mpContext.is() ) mpContext = GetDefaultContext(); return mpContext.is(); @@ -175,12 +180,8 @@ void OpenGLSalGraphicsImpl::Init() VCL_GL_INFO("::Init - re-size offscreen texture"); } - if( !IsOffscreen() ) - { - if( mpWindowContext.is() ) - mpWindowContext->reset(); - mpWindowContext = CreateWinContext(); - } + if( mpWindowContext.is() ) + mpWindowContext->reset(); } // Currently only used to get windows ordering right. @@ -245,11 +246,6 @@ void OpenGLSalGraphicsImpl::PostDraw() assert (maOffscreenTex); - if( IsOffscreen() ) - assert( !mpWindowContext.is() ); - else - assert( mpWindowContext.is() ); - // Always queue the flush. if( !IsOffscreen() ) flush(); @@ -2022,15 +2018,13 @@ void OpenGLSalGraphicsImpl::doFlush() if( IsOffscreen() ) return; - assert( mpWindowContext.is() ); - if( !maOffscreenTex ) { VCL_GL_INFO( "flushAndSwap - odd no texture !" ); return; } - if (mnDrawCountAtFlush == mnDrawCount) + if( mnDrawCountAtFlush == mnDrawCount ) { VCL_GL_INFO( "eliding redundant flushAndSwap, no drawing since last!" ); return; @@ -2042,6 +2036,14 @@ void OpenGLSalGraphicsImpl::doFlush() VCL_GL_INFO( "flushAndSwap" ); + if( !mpWindowContext.is() ) + { + VCL_GL_INFO( "late creation of window context" ); + mpWindowContext = CreateWinContext(); + } + + assert( mpWindowContext.is() ); + // Interesting ! -> this destroys a context [ somehow ] ... mpWindowContext->makeCurrent(); CHECK_GL_ERROR(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits