fix image loader bug where rows and cols were misinterpreted

This commit is contained in:
ohyzha
2025-01-02 17:40:15 +02:00
parent b866f5ac46
commit e789c569db

View File

@@ -16,9 +16,9 @@ namespace OpenVulkano::Image
std::unique_ptr<Image> IImageLoader::loadData(const uint8_t* data, int size, int desiredChannels)
{
Image result;
int rows, cols, channels;
int width, height, channels;
stbi_set_flip_vertically_on_load(true);
uint8_t* pixelData = stbi_load_from_memory(data, static_cast<int>(size), &rows, &cols, &channels, desiredChannels);
uint8_t* pixelData = stbi_load_from_memory(data, static_cast<int>(size), &width, &height, &channels, desiredChannels);
if (desiredChannels != 0 && channels < desiredChannels)
{
Logger::INPUT->warn(
@@ -38,13 +38,13 @@ namespace OpenVulkano::Image
result.dataFormat = OpenVulkano::DataFormat::R8G8B8A8_UNORM;
break;
}
result.resolution.x = cols;
result.resolution.y = rows;
result.resolution.x = width;
result.resolution.y = height;
result.resolution.z = 1;
if (channels == 3)
{
result.data = OpenVulkano::Array<uint8_t>(cols * rows * 4);
for (size_t srcPos = 0, dstPos = 0; srcPos < cols * rows * 3; srcPos += 3, dstPos += 4)
result.data = OpenVulkano::Array<uint8_t>(width * height * 4);
for (size_t srcPos = 0, dstPos = 0; srcPos < width * height * 3; srcPos += 3, dstPos += 4)
{
result.data[dstPos] = pixelData[srcPos];
result.data[dstPos + 1] = pixelData[srcPos + 1];
@@ -54,7 +54,7 @@ namespace OpenVulkano::Image
}
else
{
result.data = OpenVulkano::Array<uint8_t>(cols * rows * channels);
result.data = OpenVulkano::Array<uint8_t>(width * height * channels);
std::memcpy(result.data.Data(), pixelData, result.data.Size());
}
stbi_image_free(pixelData);