From 6d2d827f19a565f0d80b7665d90bc60ee0d0590c Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Sun, 27 Dec 2020 11:00:33 +0100 Subject: [PATCH] Add convenience Read methods --- openVulkanoCpp/IO/Files/Pfm.hpp | 21 +++++++++++++-------- openVulkanoCpp/IO/Files/Pnm.hpp | 21 +++++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/openVulkanoCpp/IO/Files/Pfm.hpp b/openVulkanoCpp/IO/Files/Pfm.hpp index c14a979..baf203c 100644 --- a/openVulkanoCpp/IO/Files/Pfm.hpp +++ b/openVulkanoCpp/IO/Files/Pfm.hpp @@ -90,15 +90,14 @@ namespace openVulkanoCpp PfmHeader header; std::unique_ptr image; - static PfmImage ReadImage(std::istream& inStream) + void Read(std::istream& inStream) { - PfmImage image; - inStream >> image.header; - size_t size = image.header.GetElementCount(); + inStream >> header; + size_t size = header.GetElementCount(); - if (Utils::IsLittleEndian() != image.header.littleEndian) + if (Utils::IsLittleEndian() != header.littleEndian) { - char* data = reinterpret_cast(image.image.get()); + char* data = reinterpret_cast(image.get()); for(size_t i = 0; i < size; i++) { size_t idx = i * sizeof(float); @@ -106,8 +105,14 @@ namespace openVulkanoCpp } } - image.image = std::make_unique(size); - inStream.read(reinterpret_cast(image.image.get()), size); + image = std::make_unique(size); + inStream.read(reinterpret_cast(image.get()), size); + } + + static PfmImage ReadImage(std::istream& inStream) + { + PfmImage image; + image.Read(inStream); return image; } }; diff --git a/openVulkanoCpp/IO/Files/Pnm.hpp b/openVulkanoCpp/IO/Files/Pnm.hpp index 7b5e0e0..a17c609 100644 --- a/openVulkanoCpp/IO/Files/Pnm.hpp +++ b/openVulkanoCpp/IO/Files/Pnm.hpp @@ -109,17 +109,22 @@ namespace openVulkanoCpp PnmHeader header; std::unique_ptr image; + void Read(std::istream& inStream) + { + inStream >> header; + + // TODO handle ascii mode + if (header.ascii) throw std::runtime_error("ascii mode not supported!"); + + size_t size = header.GetImageSize(); + image = std::make_unique(size); + inStream.read(image.get(), size); + } + static PnmImage ReadImage(std::istream& inStream) { PnmImage image; - inStream >> image.header; - - // TODO handle ascii mode - if (image.header.ascii) throw std::runtime_error("ascii mode not supported!"); - - size_t size = image.header.GetImageSize(); - image.image = std::make_unique(size); - inStream.read(image.image.get(), size); + image.Read(inStream); return image; } };