| #include "rive/shapes/path.hpp" |
| #include "rive/math/mat2d.hpp" |
| #include "rive/tess/tess_render_path.hpp" |
| #include "rive_file_reader.hpp" |
| |
| class TestRenderPath : public rive::TessRenderPath |
| { |
| public: |
| std::vector<rive::Vec2D> vertices; |
| std::vector<uint16_t> indices; |
| |
| protected: |
| virtual void addTriangles(rive::Span<const rive::Vec2D> vts, |
| rive::Span<const uint16_t> idx) override |
| { |
| vertices.insert(vertices.end(), vts.begin(), vts.end()); |
| indices.insert(indices.end(), idx.begin(), idx.end()); |
| } |
| |
| void setTriangulatedBounds(const rive::AABB& value) override {} |
| }; |
| |
| TEST_CASE("simple triangle path triangulates as expected", "[file]") |
| { |
| auto file = ReadRiveFile("../test/assets/triangle.riv"); |
| auto artboard = file->artboard(); |
| artboard->advance(0.0f); |
| |
| auto path = artboard->find<rive::Path>("triangle_path"); |
| REQUIRE(path != nullptr); |
| TestRenderPath renderPath; |
| path->buildPath(renderPath); |
| |
| rive::Mat2D identity; |
| TestRenderPath shapeRenderPath; |
| shapeRenderPath.addRenderPath(&renderPath, identity); |
| shapeRenderPath.triangulate(); |
| REQUIRE(shapeRenderPath.vertices.size() == 4); |
| REQUIRE(shapeRenderPath.indices.size() == 3); |
| REQUIRE(shapeRenderPath.indices[0] == 2); |
| REQUIRE(shapeRenderPath.indices[1] == 0); |
| REQUIRE(shapeRenderPath.indices[2] == 1); |
| } |