Add support for importing R8 and R8G8 DDS textures

This commit is contained in:
Samuel Deutsch 2026-02-14 23:31:52 -08:00
parent bf95b62586
commit 83057073d5
2 changed files with 12 additions and 2 deletions

View file

@ -164,6 +164,8 @@ enum DDSFormat {
DDS_LUMINANCE,
DDS_LUMINANCE_ALPHA,
DDS_LUMINANCE_ALPHA_4,
DDS_RG8,
DDS_R8,
DDS_MAX
};
@ -223,4 +225,6 @@ static const DDSFormatInfo dds_format_info[DDS_MAX] = {
{ "GRAYSCALE", false, 1, 1, Image::FORMAT_L8 },
{ "GRAYSCALE_ALPHA", false, 1, 2, Image::FORMAT_LA8 },
{ "GRAYSCALE_ALPHA_4", false, 1, 1, Image::FORMAT_LA8 },
{ "RG8", false, 1, 2, Image::FORMAT_RG8 },
{ "R8", false, 1, 1, Image::FORMAT_R8 },
};

View file

@ -75,7 +75,9 @@ DDSFormat _dxgi_to_dds_format(uint32_t p_dxgi_format) {
case DXGI_R32_FLOAT: {
return DDS_R32F;
}
case DXGI_R8_UNORM:
case DXGI_R8_UNORM: {
return DDS_R8;
}
case DXGI_A8_UNORM: {
return DDS_LUMINANCE;
}
@ -89,7 +91,7 @@ DDSFormat _dxgi_to_dds_format(uint32_t p_dxgi_format) {
return DDS_R16I;
}
case DXGI_R8G8_UNORM: {
return DDS_LUMINANCE_ALPHA;
return DDS_RG8;
}
case DXGI_R9G9B9E5: {
return DDS_RGB9E5;
@ -648,6 +650,10 @@ static Vector<Ref<Image>> _dds_load_images_from_buffer(Ref<FileAccess> p_f, DDSF
r_dds_format = DDS_BGRX8;
} else if (format_rgb_bits == 32 && format_red_mask == 0xff && format_green_mask == 0xff00 && format_blue_mask == 0xff0000) {
r_dds_format = DDS_RGBX8;
} else if (format_rgb_bits == 8 && format_red_mask == 0xff && format_green_mask == 0 && format_blue_mask == 0) {
r_dds_format = DDS_R8;
} else if (format_rgb_bits == 16 && format_red_mask == 0xff && format_green_mask == 0xff00 && format_blue_mask == 0) {
r_dds_format = DDS_RG8;
}
}