canvas/source/opengl/ogl_canvasbitmap.cxx | 5 +++ canvas/source/opengl/ogl_canvasbitmap.hxx | 4 ++ canvas/source/opengl/ogl_canvashelper.cxx | 42 +++++++++++++++++++++--------- canvas/source/opengl/ogl_canvashelper.hxx | 8 +++++ canvas/source/opengl/ogl_canvastools.cxx | 8 ++--- 5 files changed, 50 insertions(+), 17 deletions(-)
New commits: commit 2ff6febd530646dde32d6f2b3fa2212886b74dc3 Author: Michael Jaumann <meta_...@yahoo.com> Date: Wed Feb 11 12:13:10 2015 +0000 removed unnecessary conversion Change-Id: Id5c1c7d9d26bb74d34a652655ddac8dae7568a41 diff --git a/canvas/source/opengl/ogl_canvastools.cxx b/canvas/source/opengl/ogl_canvastools.cxx index eacac6b..6490cff 100644 --- a/canvas/source/opengl/ogl_canvastools.cxx +++ b/canvas/source/opengl/ogl_canvastools.cxx @@ -112,16 +112,14 @@ namespace oglcanvas GLenum eSrcBlend, GLenum eDstBlend) { - float aGLTransform[] = - { + const glm::mat4 aGLTransform = glm::mat4( (float) rTransform.get(0,0), (float) rTransform.get(1,0), 0, 0, (float) rTransform.get(0,1), (float) rTransform.get(1,1), 0, 0, 0, 0, 1, 0, - (float) rTransform.get(0,2), (float) rTransform.get(1,2), 0, 1 - }; + (float) rTransform.get(0,2), (float) rTransform.get(1,2), 0, 1); glEnable(GL_BLEND); glBlendFunc(eSrcBlend, eDstBlend); - return glm::make_mat4(aGLTransform); + return aGLTransform; } void renderOSD( const std::vector<double>& rNumbers, double scale, RenderHelper *renderHelper) commit ec6054e0cdd03827f118cdb344595bc5b51320ec Author: Michael Jaumann <meta_...@yahoo.com> Date: Wed Feb 11 12:05:41 2015 +0000 general transformation for canvasbitmaps applys the same transformation matrix additional to the basic transformation matrix for each action -> the background image is composed and drawn to the same offset relative to the right border Change-Id: I85bc670841c9f884fd276451233cd1812ed6d9f7 diff --git a/canvas/source/opengl/ogl_canvasbitmap.cxx b/canvas/source/opengl/ogl_canvasbitmap.cxx index b7c5d9b..e0f0361 100644 --- a/canvas/source/opengl/ogl_canvasbitmap.cxx +++ b/canvas/source/opengl/ogl_canvasbitmap.cxx @@ -50,6 +50,11 @@ namespace oglcanvas { return maCanvasHelper.renderRecordedActions(); } + + bool CanvasBitmap::renderRecordedActions(const ::basegfx::B2DHomMatrix& rGeneralTransform) const + { + return maCanvasHelper.renderRecordedActions(rGeneralTransform); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/opengl/ogl_canvasbitmap.hxx b/canvas/source/opengl/ogl_canvasbitmap.hxx index 534837a..c5c3202 100644 --- a/canvas/source/opengl/ogl_canvasbitmap.hxx +++ b/canvas/source/opengl/ogl_canvasbitmap.hxx @@ -65,6 +65,10 @@ namespace oglcanvas */ bool renderRecordedActions() const; + /** Write out recorded actions + apply transformation for each action + */ + bool renderRecordedActions( const ::basegfx::B2DHomMatrix& rGeneralTransform) const; private: /** MUST hold here, too, since CanvasHelper only contains a raw pointer (without refcounting) diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx index 58e8072..c0b94ec 100644 --- a/canvas/source/opengl/ogl_canvashelper.cxx +++ b/canvas/source/opengl/ogl_canvashelper.cxx @@ -326,23 +326,21 @@ namespace oglcanvas return true; } - bool lcl_drawOwnBitmap( const CanvasHelper& rHelper, + bool lcl_drawOwnBitmap( const CanvasHelper& /*rHelper*/, const ::basegfx::B2DHomMatrix& rTransform, - GLenum eSrcBlend, - GLenum eDstBlend, + GLenum /*eSrcBlend*/, + GLenum /*eDstBlend*/, const rendering::ARGBColor& /*rColor*/, const CanvasBitmap& rBitmap ) { - RenderHelper* pRenderHelper = rHelper.getDeviceHelper()->getRenderHelper(); - pRenderHelper->SetModelAndMVP(setupState(rTransform, eSrcBlend, eDstBlend)); - return rBitmap.renderRecordedActions(); + return rBitmap.renderRecordedActions(rTransform); } bool lcl_drawGenericBitmap( const CanvasHelper& rHelper, const ::basegfx::B2DHomMatrix& rTransform, GLenum eSrcBlend, GLenum eDstBlend, - const rendering::ARGBColor& rColor, + const rendering::ARGBColor& /*rColor*/, const geometry::IntegerSize2D& rPixelSize, const uno::Sequence<sal_Int8>& rPixelData, sal_uInt32 nPixelCrc32) @@ -553,7 +551,6 @@ namespace oglcanvas rAct.maPolyPolys.back().makeUnique(); // own copy, for thread safety rAct.maFunction = lcl_drawPolyPolygon; - // TODO(F2): subdivide&render whole curve /* rAct.maFunction = ::boost::bind(&lcl_drawLine, _1,_2,_3,_4,_5, geometry::RealPoint2D( @@ -659,10 +656,8 @@ namespace oglcanvas unoCapeFromCap(strokeAttributes.StartCapType) )); } - // Note: the generated stroke poly-polygon is NOT free of - // self-intersections. Therefore, if we would render it - // via OutDev::DrawPolyPolygon(), on/off fill would - // generate off areas on those self-intersections. + + //Render each subpolygon for itself const sal_uInt16 nSize( aStrokedPolyPoly.count() ); @@ -1163,10 +1158,33 @@ namespace oglcanvas return true; } + bool CanvasHelper::renderRecordedActions( const ::basegfx::B2DHomMatrix& rGeneralTransform) const + { + std::vector<Action>::const_iterator aCurr(mpRecordedActions->begin()); + const std::vector<Action>::const_iterator aEnd(mpRecordedActions->end()); + while( aCurr != aEnd ) + { + const ::basegfx::B2DHomMatrix& combinedTransform = rGeneralTransform * aCurr->maTransform; + if( !aCurr->maFunction( *this, + combinedTransform, + aCurr->meSrcBlendMode, + aCurr->meDstBlendMode, + aCurr->maARGBColor, + aCurr->maPolyPolys ) ) + return false; + + ++aCurr; + } + + return true; + } + size_t CanvasHelper::getRecordedActionCount() const { return mpRecordedActions->size(); } + + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/opengl/ogl_canvashelper.hxx b/canvas/source/opengl/ogl_canvashelper.hxx index 71b7f2c..7e5d6f8 100644 --- a/canvas/source/opengl/ogl_canvashelper.hxx +++ b/canvas/source/opengl/ogl_canvashelper.hxx @@ -14,11 +14,13 @@ #include <basegfx/vector/b2isize.hxx> #include <basegfx/vector/b2dsize.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> #include <o3tl/cow_wrapper.hxx> #include <vector> #include "ogl_renderHelper.hxx" + namespace oglcanvas { class SpriteDeviceHelper; @@ -194,6 +196,11 @@ namespace oglcanvas */ bool renderRecordedActions() const; + /** Write out recorded actions + Apply the general transformation for each action + */ + bool renderRecordedActions( const ::basegfx::B2DHomMatrix& rGeneralTransform) const; + /** Retrieve number of recorded actions */ size_t getRecordedActionCount() const; @@ -205,6 +212,7 @@ namespace oglcanvas typedef o3tl::cow_wrapper< std::vector<Action>, o3tl::ThreadSafeRefCountingPolicy > RecordVectorT; + private: // declared, but not defined CanvasHelper( const CanvasHelper& ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits