| #include <rive/file.hpp> | |
| #include <rive/node.hpp> | |
| #include <rive/shapes/clipping_shape.hpp> | |
| #include <rive/shapes/rectangle.hpp> | |
| #include <rive/shapes/image.hpp> | |
| #include <rive/shapes/mesh.hpp> | |
| #include <rive/assets/image_asset.hpp> | |
| #include <rive/relative_local_asset_resolver.hpp> | |
| #include <utils/no_op_renderer.hpp> | |
| #include "rive_file_reader.hpp" | |
| #include <catch.hpp> | |
| #include <cstdio> | |
| TEST_CASE("image with mesh loads correctly", "[mesh]") | |
| { | |
| auto file = ReadRiveFile("../../test/assets/tape.riv"); | |
| auto node = file->artboard()->find("Tape body.png"); | |
| REQUIRE(node != nullptr); | |
| REQUIRE(node->is<rive::Image>()); | |
| auto tape = node->as<rive::Image>(); | |
| REQUIRE(tape->imageAsset() != nullptr); | |
| REQUIRE(tape->imageAsset()->decodedByteSize == 70903); | |
| REQUIRE(tape->mesh() != nullptr); | |
| REQUIRE(tape->mesh()->vertices().size() == 24); | |
| REQUIRE(tape->mesh()->indices()->size() == 31 * 3); // Expect 31 triangles. | |
| } | |
| TEST_CASE("duplicating a mesh shares the indices", "[mesh]") | |
| { | |
| auto file = ReadRiveFile("../../test/assets/tape.riv"); | |
| auto instance1 = file->artboardDefault(); | |
| auto instance2 = file->artboardDefault(); | |
| auto instance3 = file->artboardDefault(); | |
| auto node1 = instance1->find("Tape body.png"); | |
| auto node2 = instance2->find("Tape body.png"); | |
| auto node3 = instance3->find("Tape body.png"); | |
| REQUIRE(node1 != nullptr); | |
| REQUIRE(node2 != nullptr); | |
| REQUIRE(node3 != nullptr); | |
| REQUIRE(node1->is<rive::Image>()); | |
| REQUIRE(node2->is<rive::Image>()); | |
| REQUIRE(node3->is<rive::Image>()); | |
| auto tape1 = node1->as<rive::Image>(); | |
| auto tape2 = node2->as<rive::Image>(); | |
| auto tape3 = node3->as<rive::Image>(); | |
| REQUIRE(tape1->imageAsset() != nullptr); | |
| REQUIRE(tape1->mesh() != nullptr); | |
| REQUIRE(tape2->imageAsset() != nullptr); | |
| REQUIRE(tape2->mesh() != nullptr); | |
| REQUIRE(tape3->imageAsset() != nullptr); | |
| REQUIRE(tape3->mesh() != nullptr); | |
| REQUIRE(tape1->mesh()->indices()->size() == 31 * 3); | |
| REQUIRE(tape2->mesh()->indices()->size() == 31 * 3); | |
| REQUIRE(tape3->mesh()->indices()->size() == 31 * 3); | |
| // Important part, make sure they're all actually the same reference. | |
| REQUIRE(tape1->mesh()->indices() == tape2->mesh()->indices()); | |
| REQUIRE(tape2->mesh()->indices() == tape3->mesh()->indices()); | |
| } |