support msdf
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user