You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Merge pull request #110215 from WhalesState/resource-deep-copy
Fix Resource duplicate calls `ImageTexture::set_image` with an invalid image.
This commit is contained in:
@@ -83,7 +83,13 @@ Ref<ImageTexture> ImageTexture::create_from_image(const Ref<Image> &p_image) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ImageTexture::set_image(const Ref<Image> &p_image) {
|
void ImageTexture::set_image(const Ref<Image> &p_image) {
|
||||||
ERR_FAIL_COND_MSG(p_image.is_null() || p_image->is_empty(), "Invalid image");
|
if (p_image.is_null() || p_image->is_empty()) {
|
||||||
|
if (image_stored) {
|
||||||
|
ERR_PRINT("Invalid image");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
w = p_image->get_width();
|
w = p_image->get_width();
|
||||||
h = p_image->get_height();
|
h = p_image->get_height();
|
||||||
format = p_image->get_format();
|
format = p_image->get_format();
|
||||||
@@ -474,8 +480,13 @@ TypedArray<Image> ImageTexture3D::_get_images() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ImageTexture3D::_set_images(const TypedArray<Image> &p_images) {
|
void ImageTexture3D::_set_images(const TypedArray<Image> &p_images) {
|
||||||
int new_layers = p_images.size();
|
if (p_images.size() == 0) {
|
||||||
ERR_FAIL_COND(new_layers == 0);
|
if (images_stored) {
|
||||||
|
ERR_PRINT("Invalid images");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Ref<Image> img_base = p_images[0];
|
Ref<Image> img_base = p_images[0];
|
||||||
ERR_FAIL_COND(img_base.is_null());
|
ERR_FAIL_COND(img_base.is_null());
|
||||||
|
|
||||||
@@ -504,6 +515,8 @@ void ImageTexture3D::_set_images(const TypedArray<Image> &p_images) {
|
|||||||
|
|
||||||
Error err = _create(new_format, new_width, new_height, new_depth, new_mipmaps, p_images);
|
Error err = _create(new_format, new_width, new_height, new_depth, new_mipmaps, p_images);
|
||||||
ERR_FAIL_COND(err != OK);
|
ERR_FAIL_COND(err != OK);
|
||||||
|
|
||||||
|
images_stored = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageTexture3D::_bind_methods() {
|
void ImageTexture3D::_bind_methods() {
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ class ImageTexture3D : public Texture3D {
|
|||||||
int height = 1;
|
int height = 1;
|
||||||
int depth = 1;
|
int depth = 1;
|
||||||
bool mipmaps = false;
|
bool mipmaps = false;
|
||||||
|
bool images_stored = false;
|
||||||
|
|
||||||
TypedArray<Image> _get_images() const;
|
TypedArray<Image> _get_images() const;
|
||||||
void _set_images(const TypedArray<Image> &p_images);
|
void _set_images(const TypedArray<Image> &p_images);
|
||||||
|
|||||||
Reference in New Issue
Block a user