From 9e3839781fdf1b1c6a2d61a5de9b2c7ddd68e9ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 26 Oct 2016 16:39:25 -0700 Subject: [core] convert SpriteAtlas to use managed texture handling --- test/sprite/sprite_atlas.test.cpp | 68 +++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 38 deletions(-) (limited to 'test/sprite') diff --git a/test/sprite/sprite_atlas.test.cpp b/test/sprite/sprite_atlas.test.cpp index 231e2b1246..c9576013d4 100644 --- a/test/sprite/sprite_atlas.test.cpp +++ b/test/sprite/sprite_atlas.test.cpp @@ -21,14 +21,6 @@ auto readImage(const std::string& name) { return decodeImage(util::read_file(name)); } -auto imageFromAtlas(const SpriteAtlas& atlas) { - const size_t bytes = atlas.getTextureWidth() * atlas.getTextureHeight() * 4; - auto data = std::make_unique(bytes); - const auto src = reinterpret_cast(atlas.getData()); - std::copy(src, src + bytes, data.get()); - return PremultipliedImage{ { atlas.getTextureWidth(), atlas.getTextureHeight() }, std::move(data) }; -} - } // namespace TEST(SpriteAtlas, Basic) { @@ -37,17 +29,12 @@ TEST(SpriteAtlas, Basic) { auto spriteParseResult = parseSprite(util::read_file("test/fixtures/annotations/emerald.png"), util::read_file("test/fixtures/annotations/emerald.json")); - SpriteAtlas atlas(63, 112, 1); + SpriteAtlas atlas({ 63, 112 }, 1); atlas.setSprites(spriteParseResult.get()); EXPECT_EQ(1.0f, atlas.getPixelRatio()); - EXPECT_EQ(63, atlas.getWidth()); - EXPECT_EQ(112, atlas.getHeight()); - EXPECT_EQ(63, atlas.getTextureWidth()); - EXPECT_EQ(112, atlas.getTextureHeight()); - - // Image hasn't been created yet. - EXPECT_FALSE(atlas.getData()); + EXPECT_EQ(63u, atlas.getSize().width); + EXPECT_EQ(112u, atlas.getSize().height); auto metro = *atlas.getImage("metro", SpritePatternMode::Single); EXPECT_EQ(0, metro.pos.x); @@ -60,7 +47,8 @@ TEST(SpriteAtlas, Basic) { EXPECT_EQ(18u, metro.spriteImage->image.size.height); EXPECT_EQ(1.0f, metro.spriteImage->pixelRatio); - EXPECT_TRUE(atlas.getData()); + EXPECT_EQ(63u, atlas.getAtlasImage().size.width); + EXPECT_EQ(112u, atlas.getAtlasImage().size.height); auto pos = *atlas.getPosition("metro", SpritePatternMode::Single); EXPECT_DOUBLE_EQ(18, pos.size[0]); @@ -87,21 +75,19 @@ TEST(SpriteAtlas, Basic) { EXPECT_EQ(20, metro2.pos.w); EXPECT_EQ(20, metro2.pos.h); - EXPECT_EQ(readImage("test/fixtures/annotations/result-spriteatlas.png"), imageFromAtlas(atlas)); + EXPECT_EQ(readImage("test/fixtures/annotations/result-spriteatlas.png"), atlas.getAtlasImage()); } TEST(SpriteAtlas, Size) { auto spriteParseResult = parseSprite(util::read_file("test/fixtures/annotations/emerald.png"), util::read_file("test/fixtures/annotations/emerald.json")); - SpriteAtlas atlas(63, 112, 1.4); + SpriteAtlas atlas({ 63, 112 }, 1.4); atlas.setSprites(spriteParseResult.get()); EXPECT_DOUBLE_EQ(1.4f, atlas.getPixelRatio()); - EXPECT_EQ(63, atlas.getWidth()); - EXPECT_EQ(112, atlas.getHeight()); - EXPECT_EQ(89, atlas.getTextureWidth()); - EXPECT_EQ(157, atlas.getTextureHeight()); + EXPECT_EQ(63u, atlas.getSize().width); + EXPECT_EQ(112u, atlas.getSize().height); auto metro = *atlas.getImage("metro", SpritePatternMode::Single); EXPECT_EQ(0, metro.pos.x); @@ -114,18 +100,20 @@ TEST(SpriteAtlas, Size) { EXPECT_EQ(18u, metro.spriteImage->image.size.height); EXPECT_EQ(1.0f, metro.spriteImage->pixelRatio); + // Now the image was created lazily. + EXPECT_EQ(89u, atlas.getAtlasImage().size.width); + EXPECT_EQ(157u, atlas.getAtlasImage().size.height); + EXPECT_EQ(readImage("test/fixtures/annotations/result-spriteatlassize.png"), - imageFromAtlas(atlas)); + atlas.getAtlasImage()); } TEST(SpriteAtlas, Updates) { - SpriteAtlas atlas(32, 32, 1); + SpriteAtlas atlas({ 32, 32 }, 1); EXPECT_EQ(1.0f, atlas.getPixelRatio()); - EXPECT_EQ(32, atlas.getWidth()); - EXPECT_EQ(32, atlas.getHeight()); - EXPECT_EQ(32, atlas.getTextureWidth()); - EXPECT_EQ(32, atlas.getTextureHeight()); + EXPECT_EQ(32u, atlas.getSize().width); + EXPECT_EQ(32u, atlas.getSize().height); atlas.setSprite("one", std::make_shared(PremultipliedImage({ 16, 12 }), 1)); auto one = *atlas.getImage("one", SpritePatternMode::Single); @@ -139,8 +127,12 @@ TEST(SpriteAtlas, Updates) { EXPECT_EQ(12u, one.spriteImage->image.size.height); EXPECT_EQ(1.0f, one.spriteImage->pixelRatio); + // Now the image was created lazily. + EXPECT_EQ(32u, atlas.getAtlasImage().size.width); + EXPECT_EQ(32u, atlas.getAtlasImage().size.height); + EXPECT_EQ(readImage("test/fixtures/annotations/result-spriteatlas-empty.png"), - imageFromAtlas(atlas)); + atlas.getAtlasImage()); // Update sprite PremultipliedImage image2({ 16, 12 }); @@ -153,13 +145,13 @@ TEST(SpriteAtlas, Updates) { // Atlas texture hasn't changed yet. EXPECT_EQ(readImage("test/fixtures/annotations/result-spriteatlas-empty.png"), - imageFromAtlas(atlas)); + atlas.getAtlasImage()); atlas.updateDirty(); // Now the atlas texture has changed. EXPECT_EQ(readImage("test/fixtures/annotations/result-spriteatlas-updated.png"), - imageFromAtlas(atlas)); + atlas.getAtlasImage()); } TEST(SpriteAtlas, AddRemove) { @@ -169,7 +161,7 @@ TEST(SpriteAtlas, AddRemove) { const auto sprite2 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); const auto sprite3 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); - SpriteAtlas atlas(32, 32, 1); + SpriteAtlas atlas({ 32, 32 }, 1); // Adding single atlas.setSprite("one", sprite1); @@ -212,7 +204,7 @@ TEST(SpriteAtlas, OtherPixelRatio) { const auto sprite1 = std::make_shared(PremultipliedImage({ 8, 8 }), 1); - SpriteAtlas atlas(32, 32, 1); + SpriteAtlas atlas({ 32, 32 }, 1); // Adding mismatched sprite image atlas.setSprite("one", sprite1); @@ -222,7 +214,7 @@ TEST(SpriteAtlas, Multiple) { const auto sprite1 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); const auto sprite2 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); - SpriteAtlas atlas(32, 32, 1); + SpriteAtlas atlas({ 32, 32 }, 1); atlas.setSprites({ { "one", sprite1 }, { "two", sprite2 }, @@ -235,7 +227,7 @@ TEST(SpriteAtlas, Replace) { const auto sprite1 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); const auto sprite2 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); - SpriteAtlas atlas(32, 32, 1); + SpriteAtlas atlas({ 32, 32 }, 1); atlas.setSprite("sprite", sprite1); EXPECT_EQ(sprite1, atlas.getSprite("sprite")); @@ -251,7 +243,7 @@ TEST(SpriteAtlas, ReplaceWithDifferentDimensions) { const auto sprite1 = std::make_shared(PremultipliedImage({ 16, 16 }), 2); const auto sprite2 = std::make_shared(PremultipliedImage({ 18, 18 }), 2); - SpriteAtlas atlas(32, 32, 1); + SpriteAtlas atlas({ 32, 32 }, 1); atlas.setSprite("sprite", sprite1); atlas.setSprite("sprite", sprite2); @@ -273,7 +265,7 @@ public: util::RunLoop loop; StubFileSource fileSource; StubStyleObserver observer; - SpriteAtlas spriteAtlas { 32, 32, 1 }; + SpriteAtlas spriteAtlas{ { 32, 32 }, 1 }; void run() { // Squelch logging. -- cgit v1.2.1