Skip to content

Commit

Permalink
Make sure added image assets are checked in camera_system (#10556)
Browse files Browse the repository at this point in the history
# Objective

Make sure a camera which has had its render target changed recomputes
its info.

On main, the following is possible:

- System A has an inactive camera with render target set to the default
`Image` (i.e. white 1x1 rgba texture)

Later:

- System B sets the same camera active and sets the `camera.target` to a
newly created `Image`

**Bug**: Since `camera_system` only checks `Modified` and not `Added`
events, the size of the render target is not recomputed, which means the
camera will render with 1x1 size even though the new target is an
entirely different size.

## Solution

- Ensure `camera_system` checks `Added` image assets events

## Changelog

### Fixed

- Cameras which have their render targets changed to a newly created
target with a different size than the previous target will now render
properly

---------

Signed-off-by: Torstein Grindvik <torstein.grindvik@muybridge.com>
Co-authored-by: Torstein Grindvik <torstein.grindvik@muybridge.com>
Co-authored-by: Afonso Lage <lage.afonso@gmail.com>
  • Loading branch information
3 people authored Nov 15, 2023
1 parent 7b2213a commit 782f186
Showing 1 changed file with 3 additions and 6 deletions.
9 changes: 3 additions & 6 deletions crates/bevy_render/src/camera/camera.rs
Original file line number Diff line number Diff line change
Expand Up @@ -582,12 +582,9 @@ pub fn camera_system<T: CameraProjection + Component>(

let changed_image_handles: HashSet<&AssetId<Image>> = image_asset_events
.read()
.filter_map(|event| {
if let AssetEvent::Modified { id } = event {
Some(id)
} else {
None
}
.filter_map(|event| match event {
AssetEvent::Modified { id } | AssetEvent::Added { id } => Some(id),
_ => None,
})
.collect();

Expand Down

0 comments on commit 782f186

Please sign in to comment.