Remove Utility module and move its content to Core and TextRenderer modules

This commit is contained in:
SirLynix
2024-02-10 22:46:53 +01:00
committed by Jérôme Leclercq
parent 965a00182c
commit e64c2b036e
364 changed files with 2336 additions and 2516 deletions

View File

@@ -1,3 +1,4 @@
#include <Nazara/Core/ByteArray.hpp>
#include <Nazara/Core/ByteStream.hpp>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>

View File

@@ -0,0 +1,41 @@
#include <Nazara/Core/Image.hpp>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>
#include <filesystem>
std::filesystem::path GetAssetDir();
SCENARIO("Images", "[Core][Image]")
{
WHEN("Loading PNG files")
{
GIVEN("Logo.png")
{
std::shared_ptr<Nz::Image> logo = Nz::Image::LoadFromFile(GetAssetDir() / "Logo.png");
REQUIRE(logo);
CHECK(logo->GetWidth() == 765);
CHECK(logo->GetHeight() == 212);
CHECK(logo->GetLevelCount() == 1);
CHECK(logo->GetPixelColor(165, 139) == Nz::Color::FromRGB8(51, 58, 100));
CHECK(logo->GetFormat() == Nz::PixelFormat::RGBA8);
CHECK(logo->HasAlpha());
}
}
WHEN("Loading JPG files")
{
GIVEN("stars-background.jpg")
{
std::shared_ptr<Nz::Image> background = Nz::Image::LoadFromFile(GetAssetDir() / "Utility/stars-background.jpg");
REQUIRE(background);
CHECK(background->GetWidth() == 1920);
CHECK(background->GetHeight() == 1200);
CHECK(background->GetLevelCount() == 1);
CHECK(background->GetPixelColor(1377, 372) == Nz::Color::FromRGB8(171, 152, 233));
CHECK(background->GetFormat() == Nz::PixelFormat::RGBA8);
CHECK(!background->HasAlpha());
}
}
}

View File

@@ -0,0 +1,168 @@
#include <Nazara/Core/Image.hpp>
#include <Nazara/Core/ImageStream.hpp>
#include <Nazara/Core/PixelFormat.hpp>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>
#include <filesystem>
std::filesystem::path GetAssetDir();
void CompareFrames(const Nz::ImageStream& gif, std::vector<Nz::UInt8>& frameData, const Nz::Image& referenceImage)
{
Nz::Vector2ui size = gif.GetSize();
REQUIRE(referenceImage.GetSize() == Nz::Vector3ui(size, 1));
REQUIRE(referenceImage.GetFormat() == gif.GetPixelFormat()); //< TODO: Convert?
REQUIRE(frameData.size() == Nz::PixelFormatInfo::ComputeSize(gif.GetPixelFormat(), size.x, size.y, 1));
REQUIRE(std::memcmp(frameData.data(), referenceImage.GetConstPixels(), frameData.size()) == 0);
}
SCENARIO("Streamed images", "[Core][ImageStream]")
{
using namespace Nz::Literals;
std::vector<Nz::UInt8> frameData;
struct ExpectedFrame
{
std::shared_ptr<Nz::Image> referenceImage;
Nz::Time time;
};
std::filesystem::path resourcePath = GetAssetDir();
WHEN("Loading GIF files")
{
GIVEN("canvas_bgnd.gif")
{
std::array expectedFrames = {
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/0.png"),
0_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/1.png"),
1000_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/2.png"),
2000_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/3.png"),
3000_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_bgnd/4.png"),
4000_ms
}
};
std::shared_ptr<Nz::ImageStream> gif = Nz::ImageStream::OpenFromFile(resourcePath / "Utility/GIF/canvas_bgnd.gif");
REQUIRE(gif);
Nz::Vector2ui size = gif->GetSize();
CHECK(size == Nz::Vector2ui(100, 100));
CHECK(gif->GetFrameCount() == expectedFrames.size());
CHECK(gif->GetPixelFormat() == Nz::PixelFormat::RGBA8);
frameData.resize(Nz::PixelFormatInfo::ComputeSize(gif->GetPixelFormat(), size.x, size.y, 1));
// Decode all frames in order
Nz::Time frameTime;
for (ExpectedFrame& expectedFrame : expectedFrames)
{
REQUIRE(expectedFrame.referenceImage);
REQUIRE(gif->DecodeNextFrame(frameData.data(), &frameTime));
CHECK(frameTime == expectedFrame.time);
CompareFrames(*gif, frameData, *expectedFrame.referenceImage);
}
// Decoding the post-the-end frame fails but gives the end frametime
REQUIRE_FALSE(gif->DecodeNextFrame(frameData.data(), &frameTime));
CHECK(frameTime == 5000_ms);
// Decode frames in arbitrary order, to ensure results are corrects
for (std::size_t frameIndex : { 2, 0, 3, 1, 4 })
{
INFO("Decoding frame " << frameIndex);
ExpectedFrame& expectedFrame = expectedFrames[frameIndex];
gif->Seek(frameIndex);
REQUIRE(gif->DecodeNextFrame(frameData.data(), &frameTime));
CHECK(frameTime == expectedFrame.time);
CompareFrames(*gif, frameData, *expectedFrame.referenceImage);
}
}
GIVEN("canvas_prev.gif")
{
std::array expectedFrames = {
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/0.png"),
0_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/1.png"),
100_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/2.png"),
1100_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/3.png"),
2100_ms
},
ExpectedFrame{
Nz::Image::LoadFromFile(resourcePath / "Utility/GIF/canvas_prev/4.png"),
3100_ms
}
};
std::shared_ptr<Nz::ImageStream> gif = Nz::ImageStream::OpenFromFile(resourcePath / "Utility/GIF/canvas_prev.gif");
REQUIRE(gif);
Nz::Vector2ui size = gif->GetSize();
CHECK(size == Nz::Vector2ui(100, 100));
CHECK(gif->GetFrameCount() == expectedFrames.size());
CHECK(gif->GetPixelFormat() == Nz::PixelFormat::RGBA8);
frameData.resize(Nz::PixelFormatInfo::ComputeSize(gif->GetPixelFormat(), size.x, size.y, 1));
// Decode all frames in order
Nz::Time frameTime;
for (ExpectedFrame& expectedFrame : expectedFrames)
{
REQUIRE(expectedFrame.referenceImage);
REQUIRE(gif->DecodeNextFrame(frameData.data(), &frameTime));
CHECK(frameTime == expectedFrame.time);
CompareFrames(*gif, frameData, *expectedFrame.referenceImage);
}
// Decoding the post-the-end frame fails but gives the end frametime
REQUIRE_FALSE(gif->DecodeNextFrame(frameData.data(), &frameTime));
CHECK(frameTime == 4100_ms);
// Decode frames in arbitrary order, to ensure results are corrects
for (std::size_t frameIndex : { 2, 0, 3, 1, 4 })
{
INFO("Decoding frame " << frameIndex);
ExpectedFrame& expectedFrame = expectedFrames[frameIndex];
gif->Seek(frameIndex);
REQUIRE(gif->DecodeNextFrame(frameData.data(), &frameTime));
CHECK(frameTime == expectedFrame.time);
CompareFrames(*gif, frameData, *expectedFrame.referenceImage);
}
}
}
}

View File

@@ -0,0 +1,51 @@
#include <Nazara/Core/Mesh.hpp>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>
#include <filesystem>
std::filesystem::path GetAssetDir();
SCENARIO("Meshes", "[Core][Mesh]")
{
WHEN("Loading OJB files")
{
GIVEN("Spaceship/spaceship.obj")
{
std::shared_ptr<Nz::Mesh> spaceship = Nz::Mesh::LoadFromFile(GetAssetDir() / "Utility/Spaceship/spaceship.obj");
REQUIRE(spaceship);
CHECK(!spaceship->IsAnimable());
CHECK(spaceship->GetSubMeshCount() == 2);
CHECK(spaceship->GetMaterialCount() == 2);
CHECK(spaceship->GetTriangleCount() == 6814);
CHECK(spaceship->GetVertexCount() == 8713);
}
GIVEN("SpaceStation/space_station.obj")
{
std::shared_ptr<Nz::Mesh> spacestation = Nz::Mesh::LoadFromFile(GetAssetDir() / "Utility/SpaceStation/space_station.obj");
REQUIRE(spacestation);
CHECK(!spacestation->IsAnimable());
CHECK(spacestation->GetSubMeshCount() == 1);
CHECK(spacestation->GetMaterialCount() == 1);
CHECK(spacestation->GetTriangleCount() == 422);
CHECK(spacestation->GetVertexCount() == 516);
}
}
WHEN("Loading MD2 files")
{
GIVEN("drfreak.md2")
{
std::shared_ptr<Nz::Mesh> drfreak = Nz::Mesh::LoadFromFile(GetAssetDir() / "Utility/drfreak/drfreak.md2");
CHECK(drfreak);
CHECK(!drfreak->IsAnimable()); //< non-skeletal animations are not supported
CHECK(drfreak->GetSubMeshCount() == 1);
CHECK(drfreak->GetMaterialCount() == 1);
CHECK(drfreak->GetTriangleCount() == 593);
CHECK(drfreak->GetVertexCount() == 496);
}
}
}

View File

@@ -1,4 +1,4 @@
#include <Nazara/Core/SerializationContext.hpp>
#include <Nazara/Core/Serialization.hpp>
#include <Nazara/Core/Color.hpp>
#include <Nazara/Core/MemoryView.hpp>

View File

@@ -1,4 +1,3 @@
#include <Nazara/Core/Algorithm.hpp>
#include <Nazara/Core/File.hpp>
#include <Nazara/Core/StringExt.hpp>
#include <Nazara/Core/VirtualDirectory.hpp>
@@ -260,7 +259,7 @@ TEST_CASE("VirtualDirectory", "[Core][VirtualDirectory]")
CHECK(resourceDir->GetEntry("./..", CheckOurselves));
CHECK(resourceDir->GetEntry("./..", CheckOurselves));
CHECK(resourceDir->GetEntry("Audio/../..", CheckOurselves));
CHECK(resourceDir->GetEntry("Core/../Audio/../../..", CheckOurselves));
CHECK(resourceDir->GetEntry("Utility/../Audio/../../..", CheckOurselves));
}
AND_THEN("Overriding the physical file with another one")
{