canvas/source/opengl/ogl_canvascustomsprite.cxx | 47 ++++++++++++------------ canvas/source/opengl/ogl_canvashelper.cxx | 17 +++++++- 2 files changed, 39 insertions(+), 25 deletions(-)
New commits: commit c74a5358d92e3c163da541add4682e9f24482f4c Author: Michael Jaumann <meta_...@yahoo.com> Date: Thu Dec 18 12:17:45 2014 +0000 subdivide bezier curves Change-Id: I616eefabc083d78bd259689c77908edd45788cd6 diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx index 992fe87..9aa92e2 100644 --- a/canvas/source/opengl/ogl_canvashelper.cxx +++ b/canvas/source/opengl/ogl_canvashelper.cxx @@ -543,14 +543,27 @@ namespace oglcanvas Action& rAct=mpRecordedActions->back(); setupGraphicsState( rAct, viewState, renderState ); + //untested code, otherways commented out should work... + basegfx::B2DPolygon aPoly; + aPoly.append(basegfx::B2DPoint(aBezierSegment.Px, aBezierSegment.Py)); + aPoly.appendBezierSegment( basegfx::B2DPoint(aBezierSegment.C1x, aBezierSegment.C1y), + basegfx::B2DPoint(aBezierSegment.C1x, aBezierSegment.C1y), + basegfx::B2DPoint(aEndPoint.X,aEndPoint.Y)); + + basegfx::B2DPolyPolygon aPolyPoly; + aPolyPoly.append(aPoly); + rAct.maPolyPolys.push_back(aPolyPoly); + 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, + /* rAct.maFunction = ::boost::bind(&lcl_drawLine, _1,_2,_3,_4,_5, geometry::RealPoint2D( aBezierSegment.Px, aBezierSegment.Py), - aEndPoint); + aEndPoint);*/ + } } commit 9c3a9e987bc5a7b5f8e84349fc8c39a3999011f9 Author: Michael Jaumann <meta_...@yahoo.com> Date: Thu Dec 18 12:11:17 2014 +0000 renderSprite renders still to framebuffer with the wrong offset ( polygon is clipped, or entire out of texture bounds ) Change-Id: I485fd141c73d1e9783db7f4638bb33875e3af9be diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx index 9962eb4..ac8272e 100644 --- a/canvas/source/opengl/ogl_canvascustomsprite.cxx +++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx @@ -25,6 +25,7 @@ #include <basegfx/polygon/b2dpolygontriangulator.hxx> #include <basegfx/polygon/b2dpolypolygontools.hxx> #include <GL/glew.h> +#include <vcl/opengl/GLMHelper.hxx> using namespace ::com::sun::star; @@ -131,42 +132,46 @@ namespace oglcanvas if( ::basegfx::fTools::equalZero( mfAlpha ) ) return true; - const glm::vec2 aSpriteSizePixel( - ::canvas::tools::roundUp( maSize.Width ), - ::canvas::tools::roundUp( maSize.Height )); - RenderHelper* pRenderHelper = maCanvasHelper.getDeviceHelper()->getRenderHelper(); + const glm::vec2 aSpriteSizePixel( + ::canvas::tools::roundUp( maSize.Width), + ::canvas::tools::roundUp( maSize.Height)); + + RenderHelper* pRenderHelper = maCanvasHelper.getDeviceHelper()->getRenderHelper(); IBufferContextSharedPtr pBufferContext; - if( mfAlpha != 1.0 || mxClip.is() ) + + if( mfAlpha != 0.0 || mxClip.is() ) { // drats. need to render to temp surface before, and then // composite that to screen // TODO(P3): buffer texture pBufferContext = maCanvasHelper.getDeviceHelper()->createBufferContext(aSpriteSizePixel); + //glViewport(0, 0,aSpriteSizePixel.x,aSpriteSizePixel.y); pBufferContext->startBufferRendering(); } - // this ends up in pBufferContext, if that one's "current" if( !maCanvasHelper.renderRecordedActions() ) return false; - const glm::mat4 translate = glm::translate(glm::vec3(maPosition.getX(), maPosition.getY(), 0)); if( pBufferContext ) { + //pRenderHelper->SetModelAndMVP( aGLTransform); + // content ended up in background buffer - compose to + // screen now. Calls below switches us back to window + // context, and binds to generated, dynamic texture + + pBufferContext->endBufferRendering(); + const glm::mat4 aGLTransform = glm::mat4( maTransformation.m00, maTransformation.m10, 0, 0, maTransformation.m01, maTransformation.m11, 0, 0, 0, 0, 1, 0, maTransformation.m02, maTransformation.m12, 0, 1 - ); + ); + + pRenderHelper->SetModelAndMVP( translate *aGLTransform ); - //pRenderHelper->SetModelAndMVP(translate * aGLTransform); - pRenderHelper->SetModelAndMVP( aGLTransform); - // content ended up in background buffer - compose to - // screen now. Calls below switches us back to window - // context, and binds to generated, dynamic texture - pBufferContext->endBufferRendering(); GLuint nTexture = pBufferContext->getTextureId(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, nTexture); @@ -212,22 +217,19 @@ namespace oglcanvas } else { - const double fWidth=maSize.Width/aSpriteSizePixel.x; - const double fHeight=maSize.Height/aSpriteSizePixel.y; - std::vector<glm::vec2> vertices; vertices.reserve(4); - vertices.push_back(glm::vec2(0, 0)); - vertices.push_back(glm::vec2(0, (float) aSpriteSizePixel.y)); vertices.push_back(glm::vec2((float) aSpriteSizePixel.x, 0)); vertices.push_back(glm::vec2((float) aSpriteSizePixel.x, (float) aSpriteSizePixel.y)); + vertices.push_back(glm::vec2(0, 0)); + vertices.push_back(glm::vec2(0, (float) aSpriteSizePixel.y)); std::vector<glm::vec2> uvCoordinates; uvCoordinates.reserve(4); + uvCoordinates.push_back(glm::vec2(1, 1)); + uvCoordinates.push_back(glm::vec2(1, 0)); + uvCoordinates.push_back(glm::vec2(0, 1)); uvCoordinates.push_back(glm::vec2(0, 0)); - uvCoordinates.push_back(glm::vec2(0, (float) fHeight)); - uvCoordinates.push_back(glm::vec2((float) fWidth, 0)); - uvCoordinates.push_back(glm::vec2((float) fWidth, (float) fHeight)); pRenderHelper->renderVertexUVTex(vertices, uvCoordinates, color, GL_TRIANGLE_STRIP ); } @@ -235,7 +237,6 @@ namespace oglcanvas glBindTexture(GL_TEXTURE_2D, 0); } - std::vector<glm::vec2> vertices; vertices.reserve(6); vertices.push_back(glm::vec2(-2, -2)); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits