blob: 5ba568e90430d4d2488508124e4080cddc6ca428 [file] [log] [blame]
#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_loader.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());
}