diff options
Diffstat (limited to 'canvas/source/opengl')
-rw-r--r-- | canvas/source/opengl/ogl_canvascustomsprite.cxx | 31 | ||||
-rw-r--r-- | canvas/source/opengl/ogl_canvastools.cxx | 29 |
2 files changed, 47 insertions, 13 deletions
diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx index 5f53ab4ece46..3cb5ec9fe217 100644 --- a/canvas/source/opengl/ogl_canvascustomsprite.cxx +++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx @@ -191,18 +191,35 @@ namespace oglcanvas const double fHeight=maSize.Height; // TODO(P3): buffer triangulation - const ::basegfx::B2DPolygon& rTriangulatedPolygon( + const ::basegfx::triangulator::B2DTriangleVector rTriangulatedPolygon( ::basegfx::triangulator::triangulate( ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(mxClip))); glBegin(GL_TRIANGLES); - for( sal_uInt32 i=0; i<rTriangulatedPolygon.count(); i++ ) + for( size_t i=0; i<rTriangulatedPolygon.size(); i++ ) { - const ::basegfx::B2DPoint& rPt( rTriangulatedPolygon.getB2DPoint(i) ); - const double s(rPt.getX()/fWidth); - const double t(rPt.getY()/fHeight); - glTexCoord2f(s,t); glVertex2d(rPt.getX(), rPt.getY()); - } + const::basegfx::triangulator::B2DTriangle& rCandidate(rTriangulatedPolygon[i]); + glTexCoord2f( + rCandidate.getA().getX()/fWidth, + rCandidate.getA().getY()/fHeight); + glVertex2d( + rCandidate.getA().getX(), + rCandidate.getA().getY()); + + glTexCoord2f( + rCandidate.getB().getX()/fWidth, + rCandidate.getB().getY()/fHeight); + glVertex2d( + rCandidate.getB().getX(), + rCandidate.getB().getY()); + + glTexCoord2f( + rCandidate.getC().getX()/fWidth, + rCandidate.getC().getY()/fHeight); + glVertex2d( + rCandidate.getC().getX(), + rCandidate.getC().getY()); + } glEnd(); } else diff --git a/canvas/source/opengl/ogl_canvastools.cxx b/canvas/source/opengl/ogl_canvastools.cxx index cbf20db3a1e5..56fa47fbf303 100644 --- a/canvas/source/opengl/ogl_canvastools.cxx +++ b/canvas/source/opengl/ogl_canvastools.cxx @@ -35,15 +35,32 @@ namespace oglcanvas const ::basegfx::B2DRange& rBounds(aPolyPoly.getB2DRange()); const double nWidth=rBounds.getWidth(); const double nHeight=rBounds.getHeight(); - const ::basegfx::B2DPolygon& rTriangulatedPolygon( + const ::basegfx::triangulator::B2DTriangleVector rTriangulatedPolygon( ::basegfx::triangulator::triangulate(aPolyPoly)); - for( sal_uInt32 i=0; i<rTriangulatedPolygon.count(); i++ ) + for( size_t i=0; i<rTriangulatedPolygon.size(); i++ ) { - const ::basegfx::B2DPoint& rPt( rTriangulatedPolygon.getB2DPoint(i) ); - const double s(rPt.getX()/nWidth); - const double t(rPt.getY()/nHeight); - glTexCoord2f(s,t); glVertex2d(rPt.getX(), rPt.getY()); + const::basegfx::triangulator::B2DTriangle& rCandidate(rTriangulatedPolygon[i]); + glTexCoord2f( + rCandidate.getA().getX()/nWidth, + rCandidate.getA().getY()/nHeight); + glVertex2d( + rCandidate.getA().getX(), + rCandidate.getA().getY()); + + glTexCoord2f( + rCandidate.getB().getX()/nWidth, + rCandidate.getB().getY()/nHeight); + glVertex2d( + rCandidate.getB().getX(), + rCandidate.getB().getY()); + + glTexCoord2f( + rCandidate.getC().getX()/nWidth, + rCandidate.getC().getY()/nHeight); + glVertex2d( + rCandidate.getC().getX(), + rCandidate.getC().getY()); } } |