mirror of
https://github.com/godotengine/godot.git
synced 2025-03-07 23:32:58 +08:00
Validate image formats, check if resize_to_po2 failed
(cherry picked from commit 3dae9993ac
)
This commit is contained in:
parent
b268fdc980
commit
2676d815ab
@ -2113,6 +2113,8 @@ Error Image::decompress() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Error Image::compress(CompressMode p_mode, CompressSource p_source, float p_lossy_quality) {
|
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) {
|
switch (p_mode) {
|
||||||
case COMPRESS_S3TC: {
|
case COMPRESS_S3TC: {
|
||||||
ERR_FAIL_COND_V(!_image_compress_bc_func, ERR_UNAVAILABLE);
|
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);
|
ERR_FAIL_COND_V(!_image_compress_bptc_func, ERR_UNAVAILABLE);
|
||||||
_image_compress_bptc_func(this, p_lossy_quality, p_source);
|
_image_compress_bptc_func(this, p_lossy_quality, p_source);
|
||||||
} break;
|
} break;
|
||||||
|
case COMPRESS_MAX: {
|
||||||
|
ERR_FAIL_V(ERR_INVALID_PARAMETER);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
@ -124,6 +124,7 @@ public:
|
|||||||
COMPRESS_SOURCE_SRGB,
|
COMPRESS_SOURCE_SRGB,
|
||||||
COMPRESS_SOURCE_NORMAL,
|
COMPRESS_SOURCE_NORMAL,
|
||||||
COMPRESS_SOURCE_LAYERED,
|
COMPRESS_SOURCE_LAYERED,
|
||||||
|
COMPRESS_SOURCE_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
//some functions provided by something else
|
//some functions provided by something else
|
||||||
@ -304,7 +305,8 @@ public:
|
|||||||
COMPRESS_PVRTC4,
|
COMPRESS_PVRTC4,
|
||||||
COMPRESS_ETC,
|
COMPRESS_ETC,
|
||||||
COMPRESS_ETC2,
|
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);
|
Error compress(CompressMode p_mode = COMPRESS_S3TC, CompressSource p_source = COMPRESS_SOURCE_GENERIC, float p_lossy_quality = 0.7);
|
||||||
|
@ -43,6 +43,10 @@ static void _compress_pvrtc4(Image *p_img) {
|
|||||||
if (!img->is_size_po2() || img->get_width() != img->get_height()) {
|
if (!img->is_size_po2() || img->get_width() != img->get_height()) {
|
||||||
make_mipmaps = img->has_mipmaps();
|
make_mipmaps = img->has_mipmaps();
|
||||||
img->resize_to_po2(true);
|
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);
|
img->convert(Image::FORMAT_RGBA8);
|
||||||
if (!img->has_mipmaps() && make_mipmaps) {
|
if (!img->has_mipmaps() && make_mipmaps) {
|
||||||
|
Loading…
Reference in New Issue
Block a user