diff --git a/openVulkanoCpp/Image/ImageLoader.cpp b/openVulkanoCpp/Image/ImageLoader.cpp index c1b001a..14c51e5 100644 --- a/openVulkanoCpp/Image/ImageLoader.cpp +++ b/openVulkanoCpp/Image/ImageLoader.cpp @@ -61,9 +61,15 @@ namespace OpenVulkano::Image return std::make_unique(std::move(result)); } - bool IImageLoader::GetDimensionsInternal(const std::string& filename, int& width, int& height) + Math::Vector2i IImageLoader::GetDimensionsInternal(const std::string& filename) { + Math::Vector2i res = {}; int channels; - return stbi_info(filename.c_str(), &width, &height, &channels); + if (!stbi_info(filename.c_str(), &res.x, &res.y, &channels)) + { + Logger::FILESYS->error("Failed to read image header of file {}", filename); + return Math::Vector2i{ -1, -1 }; + } + return res; } } \ No newline at end of file diff --git a/openVulkanoCpp/Image/ImageLoader.hpp b/openVulkanoCpp/Image/ImageLoader.hpp index 3af4d86..d6340da 100644 --- a/openVulkanoCpp/Image/ImageLoader.hpp +++ b/openVulkanoCpp/Image/ImageLoader.hpp @@ -21,8 +21,8 @@ namespace OpenVulkano::Image static std::unique_ptr loadData(const uint8_t* data, int size, int desiredChannels = 0); virtual std::unique_ptr loadFromFile(const std::string& filePath) = 0; virtual std::unique_ptr loadFromMemory(const std::vector& buffer) = 0; - virtual bool GetImageDimensions(const std::string& filename, int& width, int& height) = 0; + virtual Math::Vector2i GetImageDimensions(const std::string& filename) = 0; protected: - static bool GetDimensionsInternal(const std::string& filename, int& width, int& height); + static Math::Vector2i GetDimensionsInternal(const std::string& filename); }; } \ No newline at end of file diff --git a/openVulkanoCpp/Image/ImageLoaderJpeg.cpp b/openVulkanoCpp/Image/ImageLoaderJpeg.cpp index b7bd57e..1a9fe74 100644 --- a/openVulkanoCpp/Image/ImageLoaderJpeg.cpp +++ b/openVulkanoCpp/Image/ImageLoaderJpeg.cpp @@ -31,7 +31,7 @@ namespace OpenVulkano::Image return loadJpeg(buffer.data(), buffer.size()); } - bool ImageLoaderJpeg::GetImageDimensions(const std::string& filename, int& width, int& height) + Math::Vector2i ImageLoaderJpeg::GetImageDimensions(const std::string& filename) { #if __has_include("turbojpeg.h") auto image = Utils::ReadFile(filename); @@ -39,21 +39,22 @@ namespace OpenVulkano::Image if (!jpegDecompressor) { Logger::FILESYS->error("Failed to read jpeg header. Error: {}", tjGetErrorStr()); - return false; + return Math::Vector2i { -1, -1 }; } + Math::Vector2i res = {}; int size = 0, jpegSubsamp = 0; int status = tjDecompressHeader2(jpegDecompressor, reinterpret_cast(image.Data()), image.Size(), - &width, &height, &jpegSubsamp); + &res.x, &res.y, &jpegSubsamp); if (status != 0) { Logger::FILESYS->error("Failed to read jpeg header. Error: {}", tjGetErrorStr()); tjDestroy(jpegDecompressor); - return false; + return Math::Vector2i { -1, -1 }; } tjDestroy(jpegDecompressor); - return true; + return res; #else - return IImageLoader::GetDimensionsInternal(filename, width, height); + return IImageLoader::GetDimensionsInternal(filename); #endif } diff --git a/openVulkanoCpp/Image/ImageLoaderJpeg.hpp b/openVulkanoCpp/Image/ImageLoaderJpeg.hpp index a127b18..8b5d87a 100644 --- a/openVulkanoCpp/Image/ImageLoaderJpeg.hpp +++ b/openVulkanoCpp/Image/ImageLoaderJpeg.hpp @@ -15,7 +15,7 @@ namespace OpenVulkano::Image public: std::unique_ptr loadFromFile(const std::string& filePath) override; std::unique_ptr loadFromMemory(const std::vector& buffer) override; - bool GetImageDimensions(const std::string& filename, int& width, int& height) override; + Math::Vector2i GetImageDimensions(const std::string& filename) override; private: std::unique_ptr loadJpeg(const uint8_t* data, size_t size); }; diff --git a/openVulkanoCpp/Image/ImageLoaderPng.cpp b/openVulkanoCpp/Image/ImageLoaderPng.cpp index 462f0f8..92900b9 100644 --- a/openVulkanoCpp/Image/ImageLoaderPng.cpp +++ b/openVulkanoCpp/Image/ImageLoaderPng.cpp @@ -23,8 +23,8 @@ namespace OpenVulkano::Image return loadData(buffer.data(), static_cast(buffer.size())); } - bool ImageLoaderPng::GetImageDimensions(const std::string& filename, int& width, int& height) + Math::Vector2i ImageLoaderPng::GetImageDimensions(const std::string& filename) { - return GetDimensionsInternal(filename, width, height); + return GetDimensionsInternal(filename); } } \ No newline at end of file diff --git a/openVulkanoCpp/Image/ImageLoaderPng.hpp b/openVulkanoCpp/Image/ImageLoaderPng.hpp index ef0181b..2ab52dc 100644 --- a/openVulkanoCpp/Image/ImageLoaderPng.hpp +++ b/openVulkanoCpp/Image/ImageLoaderPng.hpp @@ -15,6 +15,6 @@ namespace OpenVulkano::Image public: std::unique_ptr loadFromFile(const std::string& filePath) override; std::unique_ptr loadFromMemory(const std::vector& buffer) override; - bool GetImageDimensions(const std::string& filename, int& width, int& height) override; + Math::Vector2i GetImageDimensions(const std::string& filename) override; }; } \ No newline at end of file