Make sure added image assets are checked in camera_system (#10556)

# 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>
This commit is contained in:
Torstein Grindvik 2023-11-15 13:44:21 +01:00 committed by GitHub
parent 7b2213a5f3
commit 782f1863b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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();