diff --git a/modules/dds/dds_enums.h b/modules/dds/dds_enums.h index aa5fcf9d35..176c6c5c96 100644 --- a/modules/dds/dds_enums.h +++ b/modules/dds/dds_enums.h @@ -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 }, }; diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp index 8cc3f54ae6..037adaf798 100644 --- a/modules/dds/texture_loader_dds.cpp +++ b/modules/dds/texture_loader_dds.cpp @@ -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> _dds_load_images_from_buffer(Ref 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; } }