| #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); |
| } |