support msdf

This commit is contained in:
ohyzha
2024-08-13 10:35:46 +03:00
parent f975581390
commit 1f418fa673
13 changed files with 327 additions and 163 deletions

View File

@@ -25,18 +25,15 @@ namespace OpenVulkano::Image
"Stbi load image channels mismatch. Desired channels = {}, actual amount of channels in image = {}",
desiredChannels, channels);
}
result.data = OpenVulkano::Array<uint8_t>(cols * rows * channels);
switch (channels)
{
case 1:
result.dataFormat = OpenVulkano::DataFormat::R8_UNORM;
break;
case 2:
result.dataFormat = OpenVulkano::DataFormat::R8G8_UNORM;
result.dataFormat = OpenVulkano::DataFormat::R8G8_UNORM;
break;
case 3:
result.dataFormat = OpenVulkano::DataFormat::R8G8B8_UNORM;
break;
case 4:
result.dataFormat = OpenVulkano::DataFormat::R8G8B8A8_UNORM;
break;
@@ -44,7 +41,22 @@ namespace OpenVulkano::Image
result.resolution.x = cols;
result.resolution.y = rows;
result.resolution.z = 1;
std::memcpy(result.data.Data(), pixelData, result.data.Size());
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[dstPos] = pixelData[srcPos];
result.data[dstPos + 1] = pixelData[srcPos + 1];
result.data[dstPos + 2] = pixelData[srcPos + 2];
result.data[dstPos + 3] = 255;
}
}
else
{
result.data = OpenVulkano::Array<uint8_t>(cols * rows * channels);
std::memcpy(result.data.Data(), pixelData, result.data.Size());
}
stbi_image_free(pixelData);
return std::make_unique<Image>(std::move(result));
}