chart2/source/controller/main/ChartWindow.cxx | 2 - chart2/source/view/main/ChartView.cxx | 4 ++ include/vcl/openglwin.hxx | 6 ++- vcl/source/window/openglwin.cxx | 46 ++++++++++++++++++++++---- 4 files changed, 50 insertions(+), 8 deletions(-)
New commits: commit dc4b01a5a937565b1d6491850c922e1b7de0e949 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Tue Jun 7 16:11:02 2016 +0200 only init the OpenGL context if we need it Reviewed-on: https://gerrit.libreoffice.org/26023 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit 78b100ec9cb0db2f7b33ece5ad3287a67a37246f) we also need to set initialized falg for deferred initialization Change-Id: Ia88a1720d204b9933f1476bd703b99180e45abde Reviewed-on: https://gerrit.libreoffice.org/26031 Reviewed-by: Tor Lillqvist <t...@collabora.com> Tested-by: Tor Lillqvist <t...@collabora.com> diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx index 25bdc33..3d3b849 100644 --- a/chart2/source/controller/main/ChartWindow.cxx +++ b/chart2/source/controller/main/ChartWindow.cxx @@ -50,7 +50,7 @@ ChartWindow::ChartWindow( ChartController* pController, vcl::Window* pParent, Wi , m_pWindowController( pController ) , m_bInPaint(false) #if HAVE_FEATURE_OPENGL - , m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this)) + , m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this, false)) #else , m_pOpenGLWindow(nullptr) #endif diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx index 569eeae..56c7a59 100644 --- a/chart2/source/view/main/ChartView.cxx +++ b/chart2/source/view/main/ChartView.cxx @@ -2731,6 +2731,10 @@ void ChartView::impl_updateView( bool bCheckLockedCtrler ) //create chart view { + OpenGLWindow* pWindow = mrChartModel.getOpenGLWindow(); + if (pWindow && ChartHelper::isGL3DDiagram(mrChartModel.getFirstDiagram())) + pWindow->Initialize(); + m_bViewDirty = false; m_bViewUpdatePending = false; createShapes(); diff --git a/include/vcl/openglwin.hxx b/include/vcl/openglwin.hxx index 6b2e58d..cac81a6 100644 --- a/include/vcl/openglwin.hxx +++ b/include/vcl/openglwin.hxx @@ -33,7 +33,7 @@ public: class VCL_DLLPUBLIC OpenGLWindow : public vcl::Window { public: - OpenGLWindow(vcl::Window* pParent); + OpenGLWindow(vcl::Window* pParent, bool bInit = true); virtual ~OpenGLWindow(); virtual void dispose() override; @@ -48,6 +48,10 @@ public: virtual void MouseMove( const MouseEvent& rMEvt ) override; virtual void Command( const CommandEvent& rCEvt ) override; + bool IsInitialized() const; + + void Initialize(); + private: std::unique_ptr<OpenGLWindowImpl> mxImpl; IRenderer* mpRenderer; diff --git a/vcl/source/window/openglwin.cxx b/vcl/source/window/openglwin.cxx index 442d1da..b7c309c 100644 --- a/vcl/source/window/openglwin.cxx +++ b/vcl/source/window/openglwin.cxx @@ -15,21 +15,33 @@ class OpenGLWindowImpl { public: - explicit OpenGLWindowImpl(vcl::Window* pWindow); + explicit OpenGLWindowImpl(vcl::Window* pWindow, bool bInit); ~OpenGLWindowImpl(); OpenGLContext& getContext() { return *mxContext.get(); } + + bool IsInitialized() const; + + void Initialize(); + private: + rtl::Reference<OpenGLContext> mxContext; VclPtr<SystemChildWindow> mxChildWindow; + + bool mbInitialized; }; -OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow) - : mxContext(OpenGLContext::Create()) +OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow, bool bInit) + : mxContext(OpenGLContext::Create()), + mbInitialized(bInit) { SystemWindowData aData = mxContext->generateWinData(pWindow, false); mxChildWindow.reset(VclPtr<SystemChildWindow>::Create(pWindow, 0, &aData)); mxChildWindow->Show(); - mxContext->init(mxChildWindow.get()); + + if (bInit) + mxContext->init(mxChildWindow.get()); + pWindow->SetMouseTransparent(false); } @@ -39,9 +51,20 @@ OpenGLWindowImpl::~OpenGLWindowImpl() mxChildWindow.disposeAndClear(); } -OpenGLWindow::OpenGLWindow(vcl::Window* pParent): +bool OpenGLWindowImpl::IsInitialized() const +{ + return mbInitialized; +} + +void OpenGLWindowImpl::Initialize() +{ + mxContext->init(mxChildWindow.get()); + mbInitialized = true; +} + +OpenGLWindow::OpenGLWindow(vcl::Window* pParent, bool bInit): Window(pParent, 0), - mxImpl(new OpenGLWindowImpl(this)), + mxImpl(new OpenGLWindowImpl(this, bInit)), mpRenderer(nullptr) { } @@ -118,4 +141,15 @@ void OpenGLWindow::setRenderer(IRenderer* pRenderer) mpRenderer = pRenderer; } +bool OpenGLWindow::IsInitialized() const +{ + return mxImpl->IsInitialized(); +} + +void OpenGLWindow::Initialize() +{ + if (!IsInitialized()) + mxImpl->Initialize(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits