summaryrefslogtreecommitdiffstats
path: root/modules/etcpak/image_compress_etcpak.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/etcpak/image_compress_etcpak.cpp')
-rw-r--r--modules/etcpak/image_compress_etcpak.cpp69
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;
}
}