diff --git a/openVulkanoCpp/IO/Files/Pfm.hpp b/openVulkanoCpp/IO/Files/Pfm.hpp index c987ef0..d768d49 100644 --- a/openVulkanoCpp/IO/Files/Pfm.hpp +++ b/openVulkanoCpp/IO/Files/Pfm.hpp @@ -73,22 +73,34 @@ namespace openVulkanoCpp return inStream; } - constexpr size_t GetImageSize() const + constexpr size_t GetElementCount() const { - size_t size = height * width * sizeof(float); + size_t size = height * width; if (color) size *= 3; return size; } + constexpr size_t GetImageSize() const + { + return GetElementCount() * sizeof(float); + } + static std::pair> ReadImage(std::istream& inStream) { std::pair> image; inStream >> image.first; + size_t size = image.first.GetElementCount(); if (Utils::IsLittleEndian() != image.first.littleEndian) - throw std::runtime_error("Conversion support for endianness not implemented"); + { + char* data = reinterpret_cast(image.second.get()); + for(size_t i = 0; i < size; i++) + { + size_t idx = i * sizeof(float); + std::reverse(&data[idx], &data[idx + sizeof(float)]); + } + } - size_t size = image.first.height * image.first.width; image.second = std::make_unique(size); inStream.read(reinterpret_cast(image.second.get()), size); return image;