bevy/crates
Carter Anderson abcb0661e3 Camera Output Modes, MSAA Writeback, and BlitPipeline (#7671)
# Objective

Alternative to #7490. I wrote all of the code in this PR, but I have added @robtfm as co-author on commits that build on ideas from #7490. I would not have been able to solve these problems on my own without much more time investment and I'm largely just rephrasing the ideas from that PR.

Fixes #7435
Fixes #7361
Fixes #5721

## Solution

This implements the solution I [outlined here](https://github.com/bevyengine/bevy/pull/7490#issuecomment-1426580633).


 * Adds "msaa writeback" as an explicit "msaa camera feature" and default to msaa_writeback: true for each camera. If this is true, a camera has MSAA enabled, and it isn't the first camera for the target, add a writeback before the main pass for that camera.
 * Adds a CameraOutputMode, which can be used to configure if (and how) the results of a camera's rendering will be written to the final RenderTarget output texture (via the upscaling node). The `blend_state` and `color_attachment_load_op` are now configurable, giving much more control over how a camera will write to the output texture.
 * Made cameras with the same target share the same main_texture tracker by using `Arc<AtomicUsize>`, which ensures continuity across cameras. This was previously broken / could produce weird results in some cases. `ViewTarget::main_texture()` is now correct in every context.
 * Added a new generic / specializable BlitPipeline, which the new MsaaWritebackNode uses internally. The UpscalingPipelineNode now uses BlitPipeline instead of its own pipeline. We might ultimately need to fork this back out if we choose to add more configurability to the upscaling, but for now this will save on binary size by not embedding the same shader twice.
 * Moved the "camera sorting" logic from the camera driver node to its own system. The results are now stored in the `SortedCameras` resource, which can be used anywhere in the renderer. MSAA writeback makes use of this.

---

## Changelog

- Added `Camera::msaa_writeback` which can enable and disable msaa writeback.
- Added specializable `BlitPipeline` and ported the upscaling node to use this.
- Added SortedCameras, exposing information that was previously internal to the camera driver node.
- Made cameras with the same target share the same main_texture tracker, which ensures continuity across cameras.
2023-03-01 20:35:13 +00:00
..
bevy_animation Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_app Clean up formatting in the example for App::add_startup_systems (#7822) 2023-02-25 23:53:10 +00:00
bevy_asset fix whitespaces in comment (#7853) 2023-03-01 10:20:56 +00:00
bevy_audio Remove redundant symphonia-mp3 feature (#7852) 2023-03-01 03:22:46 +00:00
bevy_core Fix some typos (#7763) 2023-02-20 22:56:57 +00:00
bevy_core_pipeline Camera Output Modes, MSAA Writeback, and BlitPipeline (#7671) 2023-03-01 20:35:13 +00:00
bevy_derive update winit to 0.28 (#7480) 2023-02-03 16:41:39 +00:00
bevy_diagnostic Update sysinfo and improve its use a bit (#7826) 2023-02-27 01:05:58 +00:00
bevy_dylib Rename dynamic feature (#7340) 2023-01-23 14:28:00 +00:00
bevy_dynamic_plugin Adapt path type of dynamically_load_plugin (#6734) 2022-12-05 23:39:43 +00:00
bevy_ecs Improve the panic message for schedule build errors (#7860) 2023-03-01 20:18:15 +00:00
bevy_ecs_compile_fail_tests EntityMut: rename remove_intersection to remove and remove to take (#7810) 2023-02-26 00:09:19 +00:00
bevy_encase_derive add helper for macro to get either bevy::x or bevy_x depending on how it was imported (#7164) 2023-01-11 21:12:02 +00:00
bevy_gilrs Make StartupSet a base set (#7574) 2023-02-19 03:10:06 +00:00
bevy_gltf Add extras field to GltfNode (#6973) 2023-02-13 17:56:36 +00:00
bevy_hierarchy EntityMut: rename remove_intersection to remove and remove to take (#7810) 2023-02-26 00:09:19 +00:00
bevy_input add common run conditions to bevy_input (#7806) 2023-02-25 22:08:13 +00:00
bevy_internal Remove redundant symphonia-mp3 feature (#7852) 2023-03-01 03:22:46 +00:00
bevy_log Fix suppression of all console logs when trace_tracy is enabled (#6955) 2022-12-20 23:45:43 +00:00
bevy_macro_utils Update toml_edit to 0.19 (#7834) 2023-02-27 23:59:06 +00:00
bevy_math Add Beziers to bevy_math (#7653) 2023-02-20 18:34:52 +00:00
bevy_mikktspace Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_pbr Support system.in_schedule() and system.on_startup() (#7790) 2023-02-24 18:33:55 +00:00
bevy_ptr Fix minor typos in code and docs (#7378) 2023-01-27 12:12:53 +00:00
bevy_reflect impl Reflect for std::collections::HashMap instead of only bevy::utils::HashMap (#7739) (#7782) 2023-02-27 21:37:36 +00:00
bevy_reflect_compile_fail_tests Enable deriving Reflect on structs with generic types (#7364) 2023-01-28 00:12:06 +00:00
bevy_render Camera Output Modes, MSAA Writeback, and BlitPipeline (#7671) 2023-03-01 20:35:13 +00:00
bevy_scene Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_sprite Support system.in_schedule() and system.on_startup() (#7790) 2023-02-24 18:33:55 +00:00
bevy_tasks fix whitespaces in comment (#7853) 2023-03-01 10:20:56 +00:00
bevy_text fix whitespaces in comment (#7853) 2023-03-01 10:20:56 +00:00
bevy_time fix Time::pause docs (missing "not") (#7807) 2023-02-24 12:55:43 +00:00
bevy_transform Avoid using SystemTypeSet for transform systems ambiguity (#7808) 2023-02-24 16:59:19 +00:00
bevy_ui Document how padding and margin behave with percentage values (#7785) 2023-02-25 16:38:03 +00:00
bevy_utils Fix some typos (#7763) 2023-02-20 22:56:57 +00:00
bevy_window Remove mention of Windows 11 from Window::transparent's docs (#7832) 2023-02-27 21:10:52 +00:00
bevy_winit create window as soon as possible (#7668) 2023-02-14 15:08:04 +00:00