diff --git a/crates/bevy_render/src/texture/dds.rs b/crates/bevy_render/src/texture/dds.rs index bfedd4b102745..6f773193ab9a0 100644 --- a/crates/bevy_render/src/texture/dds.rs +++ b/crates/bevy_render/src/texture/dds.rs @@ -88,7 +88,7 @@ pub fn dds_format_to_texture_format( TextureFormat::Bc3RgbaUnorm } } - D3DFormat::A16B16G16R16 => TextureFormat::Rgba16Uint, + D3DFormat::A16B16G16R16 => TextureFormat::Rgba16Unorm, D3DFormat::Q16W16V16U16 => TextureFormat::Rgba16Sint, D3DFormat::R16F => TextureFormat::R16Float, D3DFormat::G16R16F => TextureFormat::Rg16Float, diff --git a/crates/bevy_render/src/texture/image_texture_conversion.rs b/crates/bevy_render/src/texture/image_texture_conversion.rs index 8a6f51852bd62..6a86887df9b71 100644 --- a/crates/bevy_render/src/texture/image_texture_conversion.rs +++ b/crates/bevy_render/src/texture/image_texture_conversion.rs @@ -79,34 +79,20 @@ impl Image { data = cast_slice(&raw_data).to_owned(); } - DynamicImage::ImageRgb16(image) => { - width = image.width(); - height = image.height(); - format = TextureFormat::Rgba16Uint; - - let mut local_data = - Vec::with_capacity(width as usize * height as usize * format.pixel_size()); - - for pixel in image.into_raw().chunks_exact(3) { - // TODO: use the array_chunks method once stabilised - // https://github.com/rust-lang/rust/issues/74985 - let r = pixel[0]; - let g = pixel[1]; - let b = pixel[2]; - let a = u16::max_value(); + DynamicImage::ImageRgb16(i) => { + let i = DynamicImage::ImageRgb16(i).into_rgba16(); + width = i.width(); + height = i.height(); + format = TextureFormat::Rgba16Unorm; - local_data.extend_from_slice(&r.to_ne_bytes()); - local_data.extend_from_slice(&g.to_ne_bytes()); - local_data.extend_from_slice(&b.to_ne_bytes()); - local_data.extend_from_slice(&a.to_ne_bytes()); - } + let raw_data = i.into_raw(); - data = local_data; + data = cast_slice(&raw_data).to_owned(); } DynamicImage::ImageRgba16(i) => { width = i.width(); height = i.height(); - format = TextureFormat::Rgba16Uint; + format = TextureFormat::Rgba16Unorm; let raw_data = i.into_raw();