Validate image formats, check if resize_to_po2 failed

(cherry picked from commit 3dae9993ac)
This commit is contained in:
Paweł Fertyk 2021-06-25 13:50:22 +02:00 committed by Rémi Verschelde
parent b268fdc980
commit 2676d815ab
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 12 additions and 1 deletions

View file

@ -2113,6 +2113,8 @@ Error Image::decompress() {
}
Error Image::compress(CompressMode p_mode, CompressSource p_source, float p_lossy_quality) {
ERR_FAIL_INDEX_V_MSG(p_mode, COMPRESS_MAX, ERR_INVALID_PARAMETER, "Invalid compress mode.");
ERR_FAIL_INDEX_V_MSG(p_source, COMPRESS_SOURCE_MAX, ERR_INVALID_PARAMETER, "Invalid compress source.");
switch (p_mode) {
case COMPRESS_S3TC: {
ERR_FAIL_COND_V(!_image_compress_bc_func, ERR_UNAVAILABLE);
@ -2138,6 +2140,9 @@ Error Image::compress(CompressMode p_mode, CompressSource p_source, float p_loss
ERR_FAIL_COND_V(!_image_compress_bptc_func, ERR_UNAVAILABLE);
_image_compress_bptc_func(this, p_lossy_quality, p_source);
} break;
case COMPRESS_MAX: {
ERR_FAIL_V(ERR_INVALID_PARAMETER);
} break;
}
return OK;

View file

@ -124,6 +124,7 @@ public:
COMPRESS_SOURCE_SRGB,
COMPRESS_SOURCE_NORMAL,
COMPRESS_SOURCE_LAYERED,
COMPRESS_SOURCE_MAX,
};
//some functions provided by something else
@ -304,7 +305,8 @@ public:
COMPRESS_PVRTC4,
COMPRESS_ETC,
COMPRESS_ETC2,
COMPRESS_BPTC
COMPRESS_BPTC,
COMPRESS_MAX,
};
Error compress(CompressMode p_mode = COMPRESS_S3TC, CompressSource p_source = COMPRESS_SOURCE_GENERIC, float p_lossy_quality = 0.7);

View file

@ -43,6 +43,10 @@ static void _compress_pvrtc4(Image *p_img) {
if (!img->is_size_po2() || img->get_width() != img->get_height()) {
make_mipmaps = img->has_mipmaps();
img->resize_to_po2(true);
// Resizing can fail for some formats
if (!img->is_size_po2() || img->get_width() != img->get_height()) {
ERR_FAIL_MSG("Failed to resize the image for compression.");
}
}
img->convert(Image::FORMAT_RGBA8);
if (!img->has_mipmaps() && make_mipmaps) {