Selaa lähdekoodia

Enable BC6H compression for all HDR formats

Previously only RGBH formatted images were compressed to BC6H, this change
enables BC6H compression also for the RH, RGH, and RGBE9995 formats, allowing
1:2, 1:4, and 1:4 size reduction for them, respectively.
This is in particular important for HDRI images which usually come in RGBE9995
format.
Daniel Rakos 6 vuotta sitten
vanhempi
commit
f61ab2fe83
1 muutettua tiedostoa jossa 5 lisäystä ja 1 poistoa
  1. 5 1
      modules/cvtt/image_compress_cvtt.cpp

+ 5 - 1
modules/cvtt/image_compress_cvtt.cpp

@@ -145,7 +145,7 @@ void image_compress_cvtt(Image *p_image, float p_lossy_quality, Image::CompressS
 	int h = p_image->get_height();
 	int h = p_image->get_height();
 
 
 	bool is_ldr = (p_image->get_format() <= Image::FORMAT_RGBA8);
 	bool is_ldr = (p_image->get_format() <= Image::FORMAT_RGBA8);
-	bool is_hdr = (p_image->get_format() == Image::FORMAT_RGBH);
+	bool is_hdr = (p_image->get_format() >= Image::FORMAT_RH) && (p_image->get_format() <= Image::FORMAT_RGBE9995);
 
 
 	if (!is_ldr && !is_hdr) {
 	if (!is_ldr && !is_hdr) {
 		return; // Not a usable source format
 		return; // Not a usable source format
@@ -175,6 +175,10 @@ void image_compress_cvtt(Image *p_image, float p_lossy_quality, Image::CompressS
 
 
 	bool is_signed = false;
 	bool is_signed = false;
 	if (is_hdr) {
 	if (is_hdr) {
+		if (p_image->get_format() != Image::FORMAT_RGBH) {
+			p_image->convert(Image::FORMAT_RGBH);
+		}
+
 		PoolVector<uint8_t>::Read rb = p_image->get_data().read();
 		PoolVector<uint8_t>::Read rb = p_image->get_data().read();
 
 
 		const uint16_t *source_data = reinterpret_cast<const uint16_t *>(&rb[0]);
 		const uint16_t *source_data = reinterpret_cast<const uint16_t *>(&rb[0]);