only init the OpenGL context if we need it
Change-Id: Ia88a1720d204b9933f1476bd703b99180e45abde Reviewed-on: https://gerrit.libreoffice.org/26023 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
This commit is contained in:
@@ -50,7 +50,7 @@ ChartWindow::ChartWindow( ChartController* pController, vcl::Window* pParent, Wi
|
|||||||
, m_pWindowController( pController )
|
, m_pWindowController( pController )
|
||||||
, m_bInPaint(false)
|
, m_bInPaint(false)
|
||||||
#if HAVE_FEATURE_OPENGL
|
#if HAVE_FEATURE_OPENGL
|
||||||
, m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this))
|
, m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this, false))
|
||||||
#else
|
#else
|
||||||
, m_pOpenGLWindow(nullptr)
|
, m_pOpenGLWindow(nullptr)
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2731,6 +2731,10 @@ void ChartView::impl_updateView( bool bCheckLockedCtrler )
|
|||||||
|
|
||||||
//create chart view
|
//create chart view
|
||||||
{
|
{
|
||||||
|
OpenGLWindow* pWindow = mrChartModel.getOpenGLWindow();
|
||||||
|
if (pWindow && ChartHelper::isGL3DDiagram(mrChartModel.getFirstDiagram()))
|
||||||
|
pWindow->Initialize();
|
||||||
|
|
||||||
m_bViewDirty = false;
|
m_bViewDirty = false;
|
||||||
m_bViewUpdatePending = false;
|
m_bViewUpdatePending = false;
|
||||||
createShapes();
|
createShapes();
|
||||||
|
@@ -33,7 +33,7 @@ public:
|
|||||||
class VCL_DLLPUBLIC OpenGLWindow : public vcl::Window
|
class VCL_DLLPUBLIC OpenGLWindow : public vcl::Window
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OpenGLWindow(vcl::Window* pParent);
|
OpenGLWindow(vcl::Window* pParent, bool bInit = true);
|
||||||
virtual ~OpenGLWindow();
|
virtual ~OpenGLWindow();
|
||||||
virtual void dispose() override;
|
virtual void dispose() override;
|
||||||
|
|
||||||
@@ -48,6 +48,10 @@ public:
|
|||||||
virtual void MouseMove( const MouseEvent& rMEvt ) override;
|
virtual void MouseMove( const MouseEvent& rMEvt ) override;
|
||||||
virtual void Command( const CommandEvent& rCEvt ) override;
|
virtual void Command( const CommandEvent& rCEvt ) override;
|
||||||
|
|
||||||
|
bool IsInitialized() const;
|
||||||
|
|
||||||
|
void Initialize();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<OpenGLWindowImpl> mxImpl;
|
std::unique_ptr<OpenGLWindowImpl> mxImpl;
|
||||||
IRenderer* mpRenderer;
|
IRenderer* mpRenderer;
|
||||||
|
@@ -15,21 +15,33 @@
|
|||||||
class OpenGLWindowImpl
|
class OpenGLWindowImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit OpenGLWindowImpl(vcl::Window* pWindow);
|
explicit OpenGLWindowImpl(vcl::Window* pWindow, bool bInit);
|
||||||
~OpenGLWindowImpl();
|
~OpenGLWindowImpl();
|
||||||
OpenGLContext& getContext() { return *mxContext.get(); }
|
OpenGLContext& getContext() { return *mxContext.get(); }
|
||||||
|
|
||||||
|
bool IsInitialized() const;
|
||||||
|
|
||||||
|
void Initialize();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
rtl::Reference<OpenGLContext> mxContext;
|
rtl::Reference<OpenGLContext> mxContext;
|
||||||
VclPtr<SystemChildWindow> mxChildWindow;
|
VclPtr<SystemChildWindow> mxChildWindow;
|
||||||
|
|
||||||
|
bool mbInitialized;
|
||||||
};
|
};
|
||||||
|
|
||||||
OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow)
|
OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow, bool bInit)
|
||||||
: mxContext(OpenGLContext::Create())
|
: mxContext(OpenGLContext::Create()),
|
||||||
|
mbInitialized(bInit)
|
||||||
{
|
{
|
||||||
SystemWindowData aData = mxContext->generateWinData(pWindow, false);
|
SystemWindowData aData = mxContext->generateWinData(pWindow, false);
|
||||||
mxChildWindow.reset(VclPtr<SystemChildWindow>::Create(pWindow, 0, &aData));
|
mxChildWindow.reset(VclPtr<SystemChildWindow>::Create(pWindow, 0, &aData));
|
||||||
mxChildWindow->Show();
|
mxChildWindow->Show();
|
||||||
mxContext->init(mxChildWindow.get());
|
|
||||||
|
if (bInit)
|
||||||
|
mxContext->init(mxChildWindow.get());
|
||||||
|
|
||||||
pWindow->SetMouseTransparent(false);
|
pWindow->SetMouseTransparent(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,9 +51,19 @@ OpenGLWindowImpl::~OpenGLWindowImpl()
|
|||||||
mxChildWindow.disposeAndClear();
|
mxChildWindow.disposeAndClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenGLWindow::OpenGLWindow(vcl::Window* pParent):
|
bool OpenGLWindowImpl::IsInitialized() const
|
||||||
|
{
|
||||||
|
return mbInitialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindowImpl::Initialize()
|
||||||
|
{
|
||||||
|
mxContext->init(mxChildWindow.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenGLWindow::OpenGLWindow(vcl::Window* pParent, bool bInit):
|
||||||
Window(pParent, 0),
|
Window(pParent, 0),
|
||||||
mxImpl(new OpenGLWindowImpl(this)),
|
mxImpl(new OpenGLWindowImpl(this, bInit)),
|
||||||
mpRenderer(nullptr)
|
mpRenderer(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -118,4 +140,15 @@ void OpenGLWindow::setRenderer(IRenderer* pRenderer)
|
|||||||
mpRenderer = pRenderer;
|
mpRenderer = pRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool OpenGLWindow::IsInitialized() const
|
||||||
|
{
|
||||||
|
return mxImpl->IsInitialized();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLWindow::Initialize()
|
||||||
|
{
|
||||||
|
if (!IsInitialized())
|
||||||
|
mxImpl->Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
Reference in New Issue
Block a user