Add convenience Read methods

This commit is contained in:
2020-12-27 11:00:33 +01:00
parent 265003ebb9
commit 6d2d827f19
2 changed files with 26 additions and 16 deletions

View File

@@ -90,15 +90,14 @@ namespace openVulkanoCpp
PfmHeader header; PfmHeader header;
std::unique_ptr<float[]> image; std::unique_ptr<float[]> image;
static PfmImage ReadImage(std::istream& inStream) void Read(std::istream& inStream)
{ {
PfmImage image; inStream >> header;
inStream >> image.header; size_t size = header.GetElementCount();
size_t size = image.header.GetElementCount();
if (Utils::IsLittleEndian() != image.header.littleEndian) if (Utils::IsLittleEndian() != header.littleEndian)
{ {
char* data = reinterpret_cast<char*>(image.image.get()); char* data = reinterpret_cast<char*>(image.get());
for(size_t i = 0; i < size; i++) for(size_t i = 0; i < size; i++)
{ {
size_t idx = i * sizeof(float); size_t idx = i * sizeof(float);
@@ -106,8 +105,14 @@ namespace openVulkanoCpp
} }
} }
image.image = std::make_unique<float[]>(size); image = std::make_unique<float[]>(size);
inStream.read(reinterpret_cast<char*>(image.image.get()), size); inStream.read(reinterpret_cast<char*>(image.get()), size);
}
static PfmImage ReadImage(std::istream& inStream)
{
PfmImage image;
image.Read(inStream);
return image; return image;
} }
}; };

View File

@@ -109,17 +109,22 @@ namespace openVulkanoCpp
PnmHeader header; PnmHeader header;
std::unique_ptr<char[]> image; std::unique_ptr<char[]> 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<char[]>(size);
inStream.read(image.get(), size);
}
static PnmImage ReadImage(std::istream& inStream) static PnmImage ReadImage(std::istream& inStream)
{ {
PnmImage image; PnmImage image;
inStream >> image.header; image.Read(inStream);
// 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<char[]>(size);
inStream.read(image.image.get(), size);
return image; return image;
} }
}; };