 ffecb05a0a
			
		
	
	
		ffecb05a0a
		
	
	
	
	
		
			
			This makes the [New Bevy Renderer](#2535) the default (and only) renderer. The new renderer isn't _quite_ ready for the final release yet, but I want as many people as possible to start testing it so we can identify bugs and address feedback prior to release. The examples are all ported over and operational with a few exceptions: * I removed a good portion of the examples in the `shader` folder. We still have some work to do in order to make these examples possible / ergonomic / worthwhile: #3120 and "high level shader material plugins" are the big ones. This is a temporary measure. * Temporarily removed the multiple_windows example: doing this properly in the new renderer will require the upcoming "render targets" changes. Same goes for the render_to_texture example. * Removed z_sort_debug: entity visibility sort info is no longer available in app logic. we could do this on the "render app" side, but i dont consider it a priority.
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # B0002
 | |
| 
 | |
| To keep [Rust rules on references](https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#the-rules-of-references) (either one mutable reference or any number of immutable references) on a resource, it is not possible to have more than one resource of a kind if one is mutable in the same system. This can happen between [`Res<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.Res.html) and [`ResMut<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.ResMut.html) for the same `T`, or between [`NonSend<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.NonSend.html) and [`NonSendMut<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.NonSendMut.html) for the same `T`.
 | |
| 
 | |
| Erroneous code example:
 | |
| 
 | |
| ```rust,should_panic
 | |
| use bevy::prelude::*;
 | |
| 
 | |
| fn update_materials(
 | |
|     mut material_updater: ResMut<Assets<StandardMaterial>>,
 | |
|     current_materials: Res<Assets<StandardMaterial>>,
 | |
| ) {
 | |
|     // ...
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     App::new()
 | |
|         .add_plugins(DefaultPlugins)
 | |
|         .add_system(update_materials)
 | |
|         .run();
 | |
| }
 | |
| ```
 | |
| 
 | |
| This will panic, as it's not possible to have both a mutable and an immutable resource on `State` at the same time.
 | |
| 
 | |
| As a mutable resource already provide access to the current resource value, you can remove the immutable resource.
 | |
| 
 | |
| ```rust,no_run
 | |
| use bevy::prelude::*;
 | |
| 
 | |
| fn update_materials(
 | |
|     mut material_updater: ResMut<Assets<StandardMaterial>>,
 | |
| ) {
 | |
|     // ...
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     App::new()
 | |
|         .add_plugins(DefaultPlugins)
 | |
|         .add_system(update_materials)
 | |
|         .run();
 | |
| }
 | |
| ```
 |