blob: 1a77c313dd55c08704ef4dc590e0b3c11ea147b5 [file]
#include <rive/assets/image_asset.hpp>
#include <rive/shapes/image.hpp>
#include "rive_file_reader.hpp"
#include <catch.hpp>
TEST_CASE("image sampler resolves asset defaults and node overrides", "[image]")
{
auto file = ReadRiveFile("assets/tape.riv");
auto node = file->artboard()->find("Tape body.png");
REQUIRE(node != nullptr);
REQUIRE(node->is<rive::Image>());
auto image = node->as<rive::Image>();
auto asset = image->imageAsset();
REQUIRE(asset != nullptr);
REQUIRE(image->imageSampler() == rive::ImageSampler::LinearClamp());
asset->samplerFilter((uint32_t)rive::ImageFilter::nearest);
asset->samplerWrapX((uint32_t)rive::ImageWrap::repeat);
asset->samplerWrapY((uint32_t)rive::ImageWrap::mirror);
auto fromAsset = image->imageSampler();
REQUIRE(fromAsset.filter == rive::ImageFilter::nearest);
REQUIRE(fromAsset.wrapX == rive::ImageWrap::repeat);
REQUIRE(fromAsset.wrapY == rive::ImageWrap::mirror);
// Node values are offset by one, zero inherits from the asset.
image->samplerFilter(1 + (uint32_t)rive::ImageFilter::bilinear);
image->samplerWrapX(1 + (uint32_t)rive::ImageWrap::clamp);
auto overridden = image->imageSampler();
REQUIRE(overridden.filter == rive::ImageFilter::bilinear);
REQUIRE(overridden.wrapX == rive::ImageWrap::clamp);
REQUIRE(overridden.wrapY == rive::ImageWrap::mirror);
// Malformed file values fall back to safe defaults.
image->samplerFilter(200);
image->samplerWrapX(200);
auto clamped = image->imageSampler();
REQUIRE(clamped.filter == rive::ImageFilter::bilinear);
REQUIRE(clamped.wrapX == rive::ImageWrap::clamp);
}