From a9abc43510b4206ffa9c54c3d4c9aa2ed0d1cfce Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Wed, 29 May 2019 16:06:56 +0300 Subject: [core] Introduce PatternAtlas --- test/renderer/image_manager.test.cpp | 47 ++------------------- test/renderer/pattern_atlas.test.cpp | 82 ++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 44 deletions(-) create mode 100644 test/renderer/pattern_atlas.test.cpp (limited to 'test/renderer') diff --git a/test/renderer/image_manager.test.cpp b/test/renderer/image_manager.test.cpp index 443a8539b6..0b72578c35 100644 --- a/test/renderer/image_manager.test.cpp +++ b/test/renderer/image_manager.test.cpp @@ -28,51 +28,10 @@ TEST(ImageManager, Basic) { util::read_file("test/fixtures/annotations/emerald.json")); for (auto& image : images) { imageManager.addImage(image->baseImpl); + auto* stored = imageManager.getImage(image->getID()); + ASSERT_TRUE(stored); + EXPECT_EQ(image->getImage().size, stored->image.size); } - - auto metro = *imageManager.getPattern("metro"); - EXPECT_EQ(1, metro.tl()[0]); - EXPECT_EQ(1, metro.tl()[1]); - EXPECT_EQ(19, metro.br()[0]); - EXPECT_EQ(19, metro.br()[1]); - EXPECT_EQ(18, metro.displaySize()[0]); - EXPECT_EQ(18, metro.displaySize()[1]); - EXPECT_EQ(1.0f, metro.pixelRatio); - EXPECT_EQ(imageManager.getPixelSize(), imageManager.getAtlasImage().size); - - test::checkImage("test/fixtures/image_manager/basic", imageManager.getAtlasImage()); -} - -TEST(ImageManager, Updates) { - ImageManager imageManager; - - PremultipliedImage imageA({ 16, 12 }); - imageA.fill(255); - imageManager.addImage(makeMutable("one", std::move(imageA), 1)); - - auto a = *imageManager.getPattern("one"); - EXPECT_EQ(1, a.tl()[0]); - EXPECT_EQ(1, a.tl()[1]); - EXPECT_EQ(17, a.br()[0]); - EXPECT_EQ(13, a.br()[1]); - EXPECT_EQ(16, a.displaySize()[0]); - EXPECT_EQ(12, a.displaySize()[1]); - EXPECT_EQ(1.0f, a.pixelRatio); - test::checkImage("test/fixtures/image_manager/updates_before", imageManager.getAtlasImage()); - - PremultipliedImage imageB({ 5, 5 }); - imageA.fill(200); - imageManager.updateImage(makeMutable("one", std::move(imageB), 1)); - - auto b = *imageManager.getPattern("one"); - EXPECT_EQ(1, b.tl()[0]); - EXPECT_EQ(1, b.tl()[1]); - EXPECT_EQ(6, b.br()[0]); - EXPECT_EQ(6, b.br()[1]); - EXPECT_EQ(5, b.displaySize()[0]); - EXPECT_EQ(5, b.displaySize()[1]); - EXPECT_EQ(1.0f, b.pixelRatio); - test::checkImage("test/fixtures/image_manager/updates_after", imageManager.getAtlasImage()); } TEST(ImageManager, AddRemove) { diff --git a/test/renderer/pattern_atlas.test.cpp b/test/renderer/pattern_atlas.test.cpp new file mode 100644 index 0000000000..2a19e463bd --- /dev/null +++ b/test/renderer/pattern_atlas.test.cpp @@ -0,0 +1,82 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace mbgl; + +TEST(PatternAtlas, Basic) { + FixtureLog log; + PatternAtlas patternAtlas; + + auto images = parseSprite(util::read_file("test/fixtures/annotations/emerald.png"), + util::read_file("test/fixtures/annotations/emerald.json")); + for (auto& image : images) { + if (image->getID() == "metro") { + ASSERT_TRUE(patternAtlas.addPattern(*image->baseImpl)); + } + } + auto found = patternAtlas.getPattern("metro"); + ASSERT_TRUE(found); + + auto metro = *found; + EXPECT_EQ(1, metro.tl()[0]); + EXPECT_EQ(1, metro.tl()[1]); + EXPECT_EQ(19, metro.br()[0]); + EXPECT_EQ(19, metro.br()[1]); + EXPECT_EQ(18, metro.displaySize()[0]); + EXPECT_EQ(18, metro.displaySize()[1]); + EXPECT_EQ(1.0f, metro.pixelRatio); + EXPECT_EQ(patternAtlas.getPixelSize(), patternAtlas.getAtlasImageForTests().size); + + test::checkImage("test/fixtures/image_manager/basic", patternAtlas.getAtlasImageForTests()); +} + +TEST(PatternAtlas, Updates) { + PatternAtlas patternAtlas; + + PremultipliedImage imageA({ 16, 12 }); + imageA.fill(255); + + auto added = patternAtlas.addPattern(*makeMutable("one", std::move(imageA), 1)); + ASSERT_TRUE(added); + auto found = patternAtlas.getPattern("one"); + ASSERT_TRUE(found); + EXPECT_EQ(added->textureRect, found->textureRect); + + auto a = *found; + EXPECT_EQ(1, a.tl()[0]); + EXPECT_EQ(1, a.tl()[1]); + EXPECT_EQ(17, a.br()[0]); + EXPECT_EQ(13, a.br()[1]); + EXPECT_EQ(16, a.displaySize()[0]); + EXPECT_EQ(12, a.displaySize()[1]); + EXPECT_EQ(1.0f, a.pixelRatio); + test::checkImage("test/fixtures/image_manager/updates_before", patternAtlas.getAtlasImageForTests()); + + auto imageB = makeMutable("one", PremultipliedImage({ 5, 5 }), 1); + EXPECT_FALSE(patternAtlas.addPattern(*imageB)); // Already added. + + patternAtlas.removePattern("one"); + ASSERT_FALSE(patternAtlas.getPattern("one")); + EXPECT_TRUE(patternAtlas.addPattern(*imageB)); + + auto b = *patternAtlas.getPattern("one"); + EXPECT_EQ(1, b.tl()[0]); + EXPECT_EQ(1, b.tl()[1]); + EXPECT_EQ(6, b.br()[0]); + EXPECT_EQ(6, b.br()[1]); + EXPECT_EQ(5, b.displaySize()[0]); + EXPECT_EQ(5, b.displaySize()[1]); + EXPECT_EQ(1.0f, b.pixelRatio); + test::checkImage("test/fixtures/image_manager/updates_after", patternAtlas.getAtlasImageForTests()); +} -- cgit v1.2.1