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.
This commit is contained in:
Daniel Rakos 2019-05-08 16:43:12 +02:00
parent 0239d8bd9f
commit f61ab2fe83

View file

@ -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]);