diff options
Diffstat (limited to 'modules/etcpak/image_compress_etcpak.cpp')
-rw-r--r-- | modules/etcpak/image_compress_etcpak.cpp | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/modules/etcpak/image_compress_etcpak.cpp b/modules/etcpak/image_compress_etcpak.cpp index f528b92cf2..be3e593610 100644 --- a/modules/etcpak/image_compress_etcpak.cpp +++ b/modules/etcpak/image_compress_etcpak.cpp @@ -44,9 +44,9 @@ EtcpakType _determine_etc_type(Image::UsedChannels p_channels) { case Image::USED_CHANNELS_LA: return EtcpakType::ETCPAK_TYPE_ETC2_ALPHA; case Image::USED_CHANNELS_R: - return EtcpakType::ETCPAK_TYPE_ETC2; + return EtcpakType::ETCPAK_TYPE_ETC2_R; case Image::USED_CHANNELS_RG: - return EtcpakType::ETCPAK_TYPE_ETC2_RA_AS_RG; + return EtcpakType::ETCPAK_TYPE_ETC2_RG; case Image::USED_CHANNELS_RGB: return EtcpakType::ETCPAK_TYPE_ETC2; case Image::USED_CHANNELS_RGBA: @@ -114,6 +114,12 @@ void _compress_etcpak(EtcpakType p_compresstype, Image *r_img) { } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2) { target_format = Image::FORMAT_ETC2_RGB8; r_img->convert_rgba8_to_bgra8(); // It's badly documented but ETCPAK seems to be expected BGRA8 for ETC. + } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_R) { + target_format = Image::FORMAT_ETC2_R11; + r_img->convert_rgba8_to_bgra8(); // It's badly documented but ETCPAK seems to be expected BGRA8 for ETC. + } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_RG) { + target_format = Image::FORMAT_ETC2_RG11; + r_img->convert_rgba8_to_bgra8(); // It's badly documented but ETCPAK seems to be expected BGRA8 for ETC. } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_RA_AS_RG) { target_format = Image::FORMAT_ETC2_RA_AS_RG; r_img->convert_rg_to_ra_rgba8(); @@ -224,22 +230,49 @@ void _compress_etcpak(EtcpakType p_compresstype, Image *r_img) { // Override the src_mip_read pointer to our temporary Vector. src_mip_read = padded_src.ptr(); } - if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC1) { - CompressEtc1RgbDither(src_mip_read, dest_mip_write, blocks, mip_w); - } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2) { - CompressEtc2Rgb(src_mip_read, dest_mip_write, blocks, mip_w, true); - } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_ALPHA || p_compresstype == EtcpakType::ETCPAK_TYPE_ETC2_RA_AS_RG) { - CompressEtc2Rgba(src_mip_read, dest_mip_write, blocks, mip_w, true); - } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_DXT1) { - CompressDxt1Dither(src_mip_read, dest_mip_write, blocks, mip_w); - } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_DXT5 || p_compresstype == EtcpakType::ETCPAK_TYPE_DXT5_RA_AS_RG) { - CompressDxt5(src_mip_read, dest_mip_write, blocks, mip_w); - } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_RGTC_RG) { - CompressRgtcRG(src_mip_read, dest_mip_write, blocks, mip_w); - } else if (p_compresstype == EtcpakType::ETCPAK_TYPE_RGTC_R) { - CompressRgtcR(src_mip_read, dest_mip_write, blocks, mip_w); - } else { - ERR_FAIL_MSG("etcpak: Invalid or unsupported compression format."); + + switch (p_compresstype) { + case EtcpakType::ETCPAK_TYPE_ETC1: + CompressEtc1RgbDither(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + case EtcpakType::ETCPAK_TYPE_ETC2: + CompressEtc2Rgb(src_mip_read, dest_mip_write, blocks, mip_w, true); + break; + + case EtcpakType::ETCPAK_TYPE_ETC2_ALPHA: + case EtcpakType::ETCPAK_TYPE_ETC2_RA_AS_RG: + CompressEtc2Rgba(src_mip_read, dest_mip_write, blocks, mip_w, true); + break; + + case EtcpakType::ETCPAK_TYPE_ETC2_R: + CompressEtc2R8(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + case EtcpakType::ETCPAK_TYPE_ETC2_RG: + CompressEtc2RG8(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + case EtcpakType::ETCPAK_TYPE_DXT1: + CompressDxt1Dither(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + case EtcpakType::ETCPAK_TYPE_DXT5: + case EtcpakType::ETCPAK_TYPE_DXT5_RA_AS_RG: + CompressDxt5(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + case EtcpakType::ETCPAK_TYPE_RGTC_R: + CompressRgtcR(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + case EtcpakType::ETCPAK_TYPE_RGTC_RG: + CompressRgtcRG(src_mip_read, dest_mip_write, blocks, mip_w); + break; + + default: + ERR_FAIL_MSG("etcpak: Invalid or unsupported compression format."); + break; } } |