From 81074d60801b5ca1c29f7f8127de5c62d652dce1 Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Tue, 6 May 2014 06:35:32 +0200 Subject: [PATCH] fix the OpenGL offscreen rendering a bit Change-Id: I1f11cdff0de48e3281a58aec9ea37a78c637195e --- chart2/source/view/charttypes/GL3DBarChart.cxx | 8 ++++---- chart2/source/view/inc/3DChartObjects.hxx | 2 +- chart2/source/view/inc/GL3DBarChart.hxx | 2 ++ chart2/source/view/main/3DChartObjects.cxx | 8 ++++++-- vcl/source/opengl/OpenGLContext.cxx | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 9bb94f54e4e3..caf13a7fc769 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -21,7 +21,8 @@ namespace chart { GL3DBarChart::GL3DBarChart(const std::vector& rDataSeries): maDataSeries(rDataSeries), - mxContext(new opengl3D::temporary::TemporaryContext()) + mpRenderer(new opengl3D::OpenGL3DRenderer()), + mxContext(new opengl3D::temporary::TemporaryContext(mpRenderer.get())) { } @@ -35,10 +36,9 @@ void GL3DBarChart::create3DShapes() const float nBarSizeY = 10; const float nBarDistanceX = nBarSizeX / 2; const float nBarDistanceY = nBarSizeY / 2; - opengl3D::OpenGL3DRenderer* pRenderer = NULL; maShapes.clear(); - maShapes.push_back(new opengl3D::Camera(pRenderer)); + maShapes.push_back(new opengl3D::Camera(mpRenderer.get())); sal_Int32 nSeriesIndex = 0; sal_uInt32 nId = 1; for(std::vector::const_iterator itr = maDataSeries.begin(), @@ -56,7 +56,7 @@ void GL3DBarChart::create3DShapes() glm::scale(aBarPosition, nBarSizeX, nBarSizeY, nVal); glm::translate(aBarPosition, nXPos, nYPos, nVal/2); - maShapes.push_back(new opengl3D::Bar(pRenderer, aBarPosition, nId++)); + maShapes.push_back(new opengl3D::Bar(mpRenderer.get(), aBarPosition, nId++)); } ++nSeriesIndex; diff --git a/chart2/source/view/inc/3DChartObjects.hxx b/chart2/source/view/inc/3DChartObjects.hxx index 9e964ff8f1c6..739384be00f9 100644 --- a/chart2/source/view/inc/3DChartObjects.hxx +++ b/chart2/source/view/inc/3DChartObjects.hxx @@ -99,7 +99,7 @@ namespace temporary { class TemporaryContext: public opengl3D::Renderable3DObject { public: - TemporaryContext(); + TemporaryContext(OpenGL3DRenderer* pRenderer); void init(); virtual void render() SAL_OVERRIDE; diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 4eefdaa872b2..da3d1e14056d 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -21,6 +21,7 @@ namespace chart { namespace opengl3D { class Renderable3DObject; +class OpenGL3DRenderer; namespace temporary { @@ -43,6 +44,7 @@ private: std::vector maDataSeries; boost::ptr_vector maShapes; + boost::scoped_ptr mpRenderer; boost::scoped_ptr mxContext; }; diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index 6e3df0c4f5ee..4f9da3317df8 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -75,8 +75,8 @@ void Camera::render() namespace temporary { -TemporaryContext::TemporaryContext(): - Renderable3DObject(NULL, -1) +TemporaryContext::TemporaryContext(OpenGL3DRenderer* pRenderer): + Renderable3DObject(pRenderer, -1) { } @@ -87,6 +87,10 @@ void TemporaryContext::render() void TemporaryContext::init() { + maContext.init(); + Size winSize(800, 600); + maContext.setWinSize(winSize); + mpRenderer->SetSize(winSize); } } diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index 08f6b32143c2..33e2ffbdc606 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -563,7 +563,7 @@ void OpenGLContext::renderToFile() BitmapEx aBmp = OpenGLHelper::ConvertBGRABufferToBitmapEx(buf.get(), iWidth, iHeight); static int nIdx = 0; - OUString aName = OUString( "file:///home/moggi/Documents/work/text" ) + OUString::number( nIdx++ ) + ".png"; + OUString aName = OUString( "file:///home/moggi/Documents/work/output" ) + OUString::number( nIdx++ ) + ".png"; try { vcl::PNGWriter aWriter( aBmp ); SvFileStream sOutput( aName, STREAM_WRITE );