Browse Source

Merge pull request #36695 from clayjohn/ETC-mipmaps-4

Force mipmaps off when importing RGBA4444 textures
Rémi Verschelde 5 years ago
parent
commit
1ab695bf37
2 changed files with 8 additions and 0 deletions
  1. 2 0
      core/image.cpp
  2. 6 0
      modules/etc/image_etc.cpp

+ 2 - 0
core/image.cpp

@@ -1458,6 +1458,8 @@ Error Image::generate_mipmaps(bool p_renormalize) {
 
 	ERR_FAIL_COND_V_MSG(!_can_modify(format), ERR_UNAVAILABLE, "Cannot generate mipmaps in compressed or custom image formats.");
 
+	ERR_FAIL_COND_V_MSG(format == FORMAT_RGBA4444, ERR_UNAVAILABLE, "Cannot generate mipmaps from RGBA4444 format.");
+
 	ERR_FAIL_COND_V_MSG(width == 0 || height == 0, ERR_UNCONFIGURED, "Cannot generate mipmaps with width or height equal to 0.");
 
 	int mmcount;

+ 6 - 0
modules/etc/image_etc.cpp

@@ -106,9 +106,15 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f
 		// If VRAM compression is using ETC, but image has alpha, convert to RGBA4444 or LA8
 		// This saves space while maintaining the alpha channel
 		if (detected_channels == Image::USED_CHANNELS_RGBA) {
+			
+			if (p_img->has_mipmaps()) {
+				// Image doesn't support mipmaps with RGBA4444 textures
+				p_img->clear_mipmaps();
+			}
 			p_img->convert(Image::FORMAT_RGBA4444);
 			return;
 		} else if (detected_channels == Image::USE_CHANNELS_LA) {
+
 			p_img->convert(Image::FORMAT_LA8);
 			return;
 		}