From b42551db85892cbe067a0a1111e756b7f6db9979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Mockers?= Date: Tue, 14 Apr 2026 05:46:31 +0200 Subject: [PATCH] images are serializable through SerializedImage --- crates/bevy_image/src/image.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/crates/bevy_image/src/image.rs b/crates/bevy_image/src/image.rs index a16575b0b064a..2cf89a20ab624 100644 --- a/crates/bevy_image/src/image.rs +++ b/crates/bevy_image/src/image.rs @@ -11,6 +11,8 @@ use bevy_app::{App, Plugin}; use bevy_reflect::TypePath; #[cfg(feature = "bevy_reflect")] use bevy_reflect::{std_traits::ReflectDefault, Reflect}; +#[cfg(feature = "serialize")] +use bevy_reflect::{ReflectDeserialize, ReflectSerialize}; use bevy_asset::{uuid_handle, Asset, AssetApp, Assets, Handle, RenderAssetUsages}; use bevy_color::{Color, ColorToComponents, Gray, LinearRgba, Srgba, Xyza}; @@ -606,6 +608,7 @@ impl ToExtents for UVec3 { derive(Reflect), reflect(opaque, Default, Debug, Clone) )] +#[cfg_attr(feature = "serialize", reflect(Serialize, Deserialize))] #[cfg_attr(not(feature = "bevy_reflect"), derive(TypePath))] pub struct Image { /// Raw pixel data. @@ -642,6 +645,25 @@ pub struct Image { pub copy_on_resize: bool, } +#[cfg(feature = "serialize")] +mod image_serde { + use super::*; + + impl Serialize for Image { + fn serialize(&self, serializer: S) -> Result { + super::super::serialized_image::SerializedImage::from_image(self.clone()) + .serialize(serializer) + } + } + + impl<'de> Deserialize<'de> for Image { + fn deserialize>(deserializer: D) -> Result { + super::super::serialized_image::SerializedImage::deserialize(deserializer) + .map(super::super::serialized_image::SerializedImage::into_image) + } + } +} + /// Used in [`Image`], this determines what image sampler to use when rendering. The default setting, /// [`ImageSampler::Default`], will read the sampler from the `ImagePlugin` at setup. /// Setting this to [`ImageSampler::Descriptor`] will override the global default descriptor for this [`Image`].