chart2/Library_chartcore.mk | 2 - chart2/source/view/charttypes/3DBarChart.cxx | 2 + chart2/source/view/inc/3DChartObjects.hxx | 4 ++ chart2/source/view/main/3DChartObjects.cxx | 9 ++++ chart2/source/view/main/ChartView.cxx | 1 include/vcl/OpenGLContext.hxx | 2 + vcl/Library_vclopengl.mk | 1 vcl/source/opengl/OpenGLContext.cxx | 53 +++++++++++++++++++++++++++ 8 files changed, 70 insertions(+), 4 deletions(-)
New commits: commit 54c59b66cecdea2d14057520565764d6c5f2088f Author: Markus Mohrhard <[email protected]> Date: Tue Apr 8 02:17:28 2014 +0200 remove unused variable Change-Id: I8291aa433fb8f9d8fd3a5c2c756c006321a6deb4 diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx index b30b367..1a3a5cd 100644 --- a/chart2/source/view/main/ChartView.cxx +++ b/chart2/source/view/main/ChartView.cxx @@ -3116,7 +3116,6 @@ void ChartView::createShapes3D() return; uno::Sequence< uno::Reference< XCoordinateSystem > > aCooSysList( xCooSysContainer->getCoordinateSystems() ); - sal_Int32 nGlobalSeriesIndex = 0;//for automatic symbols std::vector<VDataSeries*> aDataSeries; for( sal_Int32 nCS = 0; nCS < aCooSysList.getLength(); ++nCS ) { commit 85f0819b6cce011e5e2859eb6ec62c24e8ef094f Author: Markus Mohrhard <[email protected]> Date: Tue Apr 8 02:16:08 2014 +0200 temporarily render to a file Change-Id: Ibfc8101f261489bf11f990ea3fe6ae2e74b99df9 diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk index e4b0051..e027865 100644 --- a/chart2/Library_chartcore.mk +++ b/chart2/Library_chartcore.mk @@ -249,6 +249,4 @@ $(eval $(call gb_Library_add_exception_objects,chartcore,\ chart2/source/tools/XMLRangeHelper \ )) - - # vim: set noet sw=4 ts=4: diff --git a/chart2/source/view/charttypes/3DBarChart.cxx b/chart2/source/view/charttypes/3DBarChart.cxx index 3a13059..e8db5bf 100644 --- a/chart2/source/view/charttypes/3DBarChart.cxx +++ b/chart2/source/view/charttypes/3DBarChart.cxx @@ -7,6 +7,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <GL/glew.h> + #include "3DBarChart.hxx" #include <glm/glm.hpp> diff --git a/chart2/source/view/inc/3DChartObjects.hxx b/chart2/source/view/inc/3DChartObjects.hxx index f7eed23..257653f 100644 --- a/chart2/source/view/inc/3DChartObjects.hxx +++ b/chart2/source/view/inc/3DChartObjects.hxx @@ -71,12 +71,16 @@ namespace temporary { class TemporaryContext { public: + TemporaryContext(); void init(); void render(); private: OpenGLContext maContext; + + int miWidth; + int miHeight; }; } diff --git a/chart2/source/view/main/3DChartObjects.cxx b/chart2/source/view/main/3DChartObjects.cxx index 3c5a5b8..c74b475 100644 --- a/chart2/source/view/main/3DChartObjects.cxx +++ b/chart2/source/view/main/3DChartObjects.cxx @@ -20,14 +20,21 @@ Bar::Bar(const glm::mat4& rPosition): namespace temporary { +TemporaryContext::TemporaryContext(): + miWidth(200), + miHeight(200) +{ +} + void TemporaryContext::init() { maContext.init(); + maContext.setWinSize(Size(miWidth, miHeight)); } void TemporaryContext::render() { - + maContext.renderToFile(); } } diff --git a/include/vcl/OpenGLContext.hxx b/include/vcl/OpenGLContext.hxx index 8c7eb55..b62448a 100644 --- a/include/vcl/OpenGLContext.hxx +++ b/include/vcl/OpenGLContext.hxx @@ -103,6 +103,8 @@ public: void setWinSize(const Size& rSize); GLWindow& getOpenGLWindow(); + void renderToFile(); + private: SAL_DLLPRIVATE bool initWindow(); diff --git a/vcl/Library_vclopengl.mk b/vcl/Library_vclopengl.mk index 793f09f..e14899b 100644 --- a/vcl/Library_vclopengl.mk +++ b/vcl/Library_vclopengl.mk @@ -32,6 +32,7 @@ $(eval $(call gb_Library_use_libraries,vclopengl,\ cppu \ cppuhelper \ sal \ + tl \ vcl \ $(gb_UWINAPI) \ )) diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index 985018b..6069471 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -11,6 +11,12 @@ #include <vcl/syschild.hxx> #include <vcl/sysdata.hxx> +#include <boost/scoped_array.hpp> +#include <vcl/pngwrite.hxx> +#include <vcl/bmpacc.hxx> +#include <vcl/graph.hxx> +#include <vcl/bitmapex.hxx> + using namespace com::sun::star; OpenGLContext::OpenGLContext(): @@ -470,6 +476,9 @@ void OpenGLContext::setWinSize(const Size& rSize) if(m_pWindow) m_pWindow->SetSizePixel(rSize); m_pChildWindow->SetSizePixel(rSize); + + m_aGLWin.Width = rSize.Width(); + m_aGLWin.Height = rSize.Height(); } GLWindow& OpenGLContext::getOpenGLWindow() @@ -477,6 +486,50 @@ GLWindow& OpenGLContext::getOpenGLWindow() return m_aGLWin; } +void OpenGLContext::renderToFile() +{ + int iWidth = m_aGLWin.Width; + int iHeight = m_aGLWin.Height; + boost::scoped_array<sal_uInt8> buf(new sal_uInt8[iWidth * iHeight * 4]); + glReadPixels(0, 0, iWidth, iHeight, GL_BGRA, GL_UNSIGNED_BYTE, buf.get()); + + Bitmap aBitmap( Size(iWidth, iHeight), 24 ); + AlphaMask aAlpha( Size(iWidth, iHeight) ); + + { + Bitmap::ScopedWriteAccess pWriteAccess( aBitmap ); + AlphaMask::ScopedWriteAccess pAlphaWriteAccess( aAlpha ); + + size_t nCurPos = 0; + for( int y = 0; y < iHeight; ++y) + { + Scanline pScan = pWriteAccess->GetScanline(y); + Scanline pAlphaScan = pAlphaWriteAccess->GetScanline(y); + for( int x = 0; x < iWidth; ++x ) + { + *pScan++ = buf[nCurPos]; + *pScan++ = buf[nCurPos+1]; + *pScan++ = buf[nCurPos+2]; + + nCurPos += 3; + *pAlphaScan++ = static_cast<sal_uInt8>( 255 - buf[nCurPos++] ); + } + } + } + + BitmapEx aBmp(aBitmap, aAlpha); + static int nIdx = 0; + OUString aName = OUString( "file:///home/moggi/Documents/work/text" ) + OUString::number( nIdx++ ) + ".png"; + try { + vcl::PNGWriter aWriter( aBmp ); + SvFileStream sOutput( aName, STREAM_WRITE ); + aWriter.Write( sOutput ); + sOutput.Close(); + } catch (...) { + SAL_WARN("chart2.opengl", "Error writing png to " << aName); + } +} + #if defined( WNT ) bool OpenGLContext::initWindow() _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
