implement png image loader and refactor existing loader classes

This commit is contained in:
ohyzha
2024-07-31 12:53:27 +03:00
parent 51608425c1
commit 847b8660b5
5 changed files with 108 additions and 15 deletions

View File

@@ -33,11 +33,11 @@ namespace OpenVulkano::Image
std::unique_ptr<Image> ImageLoaderJpeg::loadJpeg(const uint8_t* data, size_t size)
{
Image result;
int rows, cols;
#if __has_include("turbojpeg.h")
{
Image result;
int rows, cols;
unsigned char* compressedImage = const_cast<uint8_t*>(data);
int jpegSubsamp;
@@ -51,22 +51,16 @@ namespace OpenVulkano::Image
tjDecompress2(jpegDecompressor, compressedImage, size, result.data.Data(), cols, 0 /*pitch*/, rows,
TJPF_RGBA, TJFLAG_FASTDCT);
tjDestroy(jpegDecompressor);
result.resolution.x = cols;
result.resolution.y = rows;
result.resolution.z = 1;
return std::make_unique<Image>(std::move(result));
}
#else
{
int channels;
uint8_t* pixelData = stbi_load_from_memory(data, size, &cols, &rows, &channels, 3);
result.data = OpenVulkano::Array<uint8_t>(cols * rows * channels);
result.dataFormat = channels == 3 ? OpenVulkano::DataFormat::R8G8B8_UINT :
OpenVulkano::DataFormat::R8G8B8A8_UINT;
std::memcpy(result.data.Data(), pixelData, result.data.Size());
stbi_image_free(pixelData);
return loadData(data, static_cast<int>(size), 3);
}
#endif
result.resolution.x = cols;
result.resolution.y = rows;
result.resolution.z = 1;
return std::make_unique<Image>(std::move(result));
}
}