fix image loader bug where rows and cols were misinterpreted
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user