Merge pull request #49905 from pfertyk/issue-46480-image-compress-crashes-godot
Validate image formats, check if resize_to_po2 failed
This commit is contained in:
commit
05336adb86
|
@ -2380,6 +2380,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.");
|
||||
return compress_from_channels(p_mode, detect_used_channels(p_source), p_lossy_quality);
|
||||
}
|
||||
|
||||
|
@ -2405,6 +2407,9 @@ Error Image::compress_from_channels(CompressMode p_mode, UsedChannels p_channels
|
|||
ERR_FAIL_COND_V(!_image_compress_bptc_func, ERR_UNAVAILABLE);
|
||||
_image_compress_bptc_func(this, p_lossy_quality, p_channels);
|
||||
} break;
|
||||
case COMPRESS_MAX: {
|
||||
ERR_FAIL_V(ERR_INVALID_PARAMETER);
|
||||
} break;
|
||||
}
|
||||
|
||||
return OK;
|
||||
|
|
|
@ -336,11 +336,13 @@ public:
|
|||
COMPRESS_ETC,
|
||||
COMPRESS_ETC2,
|
||||
COMPRESS_BPTC,
|
||||
COMPRESS_MAX,
|
||||
};
|
||||
enum CompressSource {
|
||||
COMPRESS_SOURCE_GENERIC,
|
||||
COMPRESS_SOURCE_SRGB,
|
||||
COMPRESS_SOURCE_NORMAL
|
||||
COMPRESS_SOURCE_NORMAL,
|
||||
COMPRESS_SOURCE_MAX,
|
||||
};
|
||||
|
||||
Error compress(CompressMode p_mode, CompressSource p_source = COMPRESS_SOURCE_GENERIC, float p_lossy_quality = 0.7);
|
||||
|
|
|
@ -43,6 +43,10 @@ static void _compress_pvrtc1_4bpp(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) {
|
||||
|
|
Loading…
Reference in New Issue