diff --git a/src/render/mod.rs b/src/render/mod.rs index 3bb49d8a620c1d5a997cffa058d2fb0f9de9afed..c87111e745b35e8cfba43c9edea5382903ed9eb4 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -156,7 +156,7 @@ pub fn update_opacity_layer_cameras( WindowRef::Primary => primary_window.get_single().unwrap(), }; if let Ok(camera_window) = windows.get(window_entity) { - opacity_layers.add_or_update(&camera_entity, camera_window, &mut images); + opacity_layers.add_or_update(&camera_entity, &camera, camera_window, &mut images); } } } diff --git a/src/render/opacity_layer.rs b/src/render/opacity_layer.rs index aa96efa7b6cbd17d2776c83582bdf2fff5386bbb..1a3be5d847f50b7cc54f5091db3780cebc7b9d92 100644 --- a/src/render/opacity_layer.rs +++ b/src/render/opacity_layer.rs @@ -7,6 +7,7 @@ use bevy::{ TextureView, }, texture::BevyDefault, + view::ViewTarget, }, utils::HashMap, window::Window, @@ -22,14 +23,15 @@ impl OpacityLayerManager { pub(crate) fn add_or_update( &mut self, camera_entity: &Entity, + camera: &Camera, window: &Window, images: &mut Assets<Image>, ) { if let Some(opacity_camera) = self.camera_layers.get_mut(camera_entity) { - opacity_camera.update_images(window, images); + opacity_camera.update_images(window, camera, images); } else { self.camera_layers - .insert(*camera_entity, OpacityCamera::new(window, images)); + .insert(*camera_entity, OpacityCamera::new(window, camera, images)); } } } @@ -44,8 +46,12 @@ pub const MAX_OPACITY_LAYERS: u32 = 5; impl OpacityCamera { /// Creates as new opacity layer render target manager - pub(crate) fn new(window: &Window, images: &mut Assets<Image>) -> Self { - let main_texture_format = TextureFormat::bevy_default(); + pub(crate) fn new(window: &Window, camera: &Camera, images: &mut Assets<Image>) -> Self { + let main_texture_format = if camera.hdr { + ViewTarget::TEXTURE_FORMAT_HDR + } else { + TextureFormat::bevy_default() + }; let mut layers = HashMap::default(); for layer in 1..MAX_OPACITY_LAYERS { @@ -82,8 +88,17 @@ impl OpacityCamera { } } - pub(crate) fn update_images(&mut self, window: &Window, images: &mut Assets<Image>) { - let main_texture_format = TextureFormat::bevy_default(); + pub(crate) fn update_images( + &mut self, + window: &Window, + camera: &Camera, + images: &mut Assets<Image>, + ) { + let main_texture_format = if camera.hdr { + ViewTarget::TEXTURE_FORMAT_HDR + } else { + TextureFormat::bevy_default() + }; let new_size = Extent3d { width: window.resolution.physical_width(),