Kaydet (Commit) 3bd173af authored tarafından Markus Mohrhard's avatar Markus Mohrhard

only render through OpenGL after successful context creation

Change-Id: I60ebceee2bf0eca1c7022e14fc43128347d682b5
üst d321709f
......@@ -239,9 +239,9 @@ public:
/**
* Only necessary for stateless implementations
*/
virtual void render(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xRootShape) = 0;
virtual void render(com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > xDrawPage) = 0;
virtual void clearPage(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xRootShape) = 0;
virtual void clearPage(com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > xDrawPage) = 0;
static ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >
getChartRootShape( const ::com::sun::star::uno::Reference<
......
......@@ -184,9 +184,9 @@ public:
virtual void setPageSize( com::sun::star::uno::Reference < com::sun::star::drawing::XShapes > xChartShapes, const com::sun::star::awt::Size& rSize ) SAL_OVERRIDE;
virtual void render(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xRootShape) SAL_OVERRIDE;
virtual void render(com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > xDrawPage) SAL_OVERRIDE;
virtual void clearPage(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xRootShape) SAL_OVERRIDE;
virtual void clearPage(com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > xDrawPage) SAL_OVERRIDE;
};
}
......
......@@ -197,9 +197,9 @@ public:
/**
* not necessary right now
*/
virtual void render(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > ) SAL_OVERRIDE {}
virtual void render(com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > ) SAL_OVERRIDE {}
virtual void clearPage(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > ) SAL_OVERRIDE {}
virtual void clearPage(com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > ) SAL_OVERRIDE {}
private:
ShapeFactory();
......
......@@ -2453,7 +2453,7 @@ void ChartView::createShapes()
OSL_FAIL("could not set page size correctly");
}
pShapeFactory->setPageSize(mxRootShape, aPageSize);
pShapeFactory->clearPage(mxRootShape);
pShapeFactory->clearPage(m_xDrawPage);
if(isReal3DChart())
{
......@@ -2606,7 +2606,7 @@ void ChartView::createShapes()
//cleanup: remove all empty group shapes to avoid grey border lines:
lcl_removeEmptyGroupShapes( mxRootShape );
pShapeFactory->render( mxRootShape );
pShapeFactory->render( m_xDrawPage );
if(maTimeBased.bTimeBased && maTimeBased.nFrame % 60 == 0)
{
......
......@@ -71,7 +71,6 @@ public:
mxShapes(xShapes) {}
virtual ~OpenGLChartAdapter() {}
virtual void operator()() {}
uno::Reference<drawing::XShapes> getShapes()
{
......@@ -483,15 +482,34 @@ uno::Reference< drawing::XShape >
return pText;
}
void OpenglShapeFactory::render(uno::Reference< drawing::XShapes > xRootShape)
void OpenglShapeFactory::render(uno::Reference< drawing::XDrawPage > xDrawPage)
{
IOpenGLRenderer* pRenderer = getRenderer(xDrawPage);
if(!pRenderer)
return;
if(!pRenderer->isOpenGLInitialized())
return;
OpenGLChartAdapter* pAdapter = dynamic_cast<OpenGLChartAdapter*>(pRenderer);
if(!pAdapter)
return;
uno::Reference< drawing::XShapes > xRootShape = pAdapter->getShapes();
dummy::DummyChart* pChart = dynamic_cast<dummy::DummyChart*>(xRootShape.get());
assert(pChart);
pChart->render();
}
void OpenglShapeFactory::clearPage(uno::Reference< drawing::XShapes > xRootShape)
void OpenglShapeFactory::clearPage(uno::Reference< drawing::XDrawPage > xDrawPage)
{
IOpenGLRenderer* pRenderer = getRenderer(xDrawPage);
OpenGLChartAdapter* pAdapter = dynamic_cast<OpenGLChartAdapter*>(pRenderer);
if(!pAdapter)
return;
uno::Reference< drawing::XShapes > xRootShape = pAdapter->getShapes();
dummy::DummyChart* pChart = dynamic_cast<dummy::DummyChart*>(xRootShape.get());
assert(pChart);
pChart->clear();
......
......@@ -23,7 +23,7 @@ namespace sdr { namespace contact {
class IOpenGLRenderer;
class SVX_DLLPUBLIC SdrOpenGLObj : public SdrObject
class SVX_DLLPUBLIC SdrOpenGLObj : public SdrObject, public IOpenGLInfoProvider
{
public:
virtual ~SdrOpenGLObj();
......@@ -36,6 +36,8 @@ public:
void setRenderer(IOpenGLRenderer* pRenderer);
IOpenGLRenderer* getRenderer();
virtual bool isOpenGLInitialized();
private:
OpenGLContext maContext;
......
......@@ -10,12 +10,36 @@
#ifndef VCL_IOPENGLRENDER_HXX
#define VCL_IOPENGLRENDER_HXX
class IOpenGLInfoProvider
{
public:
virtual ~IOpenGLInfoProvider() {}
virtual bool isOpenGLInitialized() = 0;
};
class IOpenGLRenderer
{
public:
virtual ~IOpenGLRenderer() {};
virtual void operator()() = 0;
IOpenGLRenderer():
mpInfoProvider(NULL) {}
virtual ~IOpenGLRenderer() {}
bool isOpenGLInitialized()
{
if(mpInfoProvider)
return mpInfoProvider->isOpenGLInitialized();
return false;
}
void setInfoProvider(IOpenGLInfoProvider* pInfo)
{
mpInfoProvider = pInfo;
}
private:
IOpenGLInfoProvider* mpInfoProvider;
};
#endif
......
......@@ -152,6 +152,11 @@ public:
void renderToFile();
bool isInitialized()
{
return mbInitialized;
}
private:
SAL_DLLPRIVATE bool initWindow();
......
......@@ -38,6 +38,7 @@ void SdrOpenGLObj::NbcResize(const Point& rRef, const Fraction& xFact, const Fra
void SdrOpenGLObj::setRenderer(IOpenGLRenderer* pRenderer)
{
mpRenderer.reset(pRenderer);
mpRenderer->setInfoProvider(this);
}
IOpenGLRenderer* SdrOpenGLObj::getRenderer()
......@@ -45,4 +46,9 @@ IOpenGLRenderer* SdrOpenGLObj::getRenderer()
return mpRenderer.get();
}
bool SdrOpenGLObj::isOpenGLInitialized()
{
return maContext.isInitialized();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment