 c2da7800e3
			
		
	
	
		c2da7800e3
		
	
	
	
	
		
			
			# Objective The current 2d rendering is specialized to render sprites, we need a generic way to render 2d items, using meshes and materials like we have for 3d. ## Solution I cloned a good part of `bevy_pbr` into `bevy_sprite/src/mesh2d`, removed lighting and pbr itself, adapted it to 2d rendering, added a `ColorMaterial`, and modified the sprite rendering to break batches around 2d meshes. ~~The PR is a bit crude; I tried to change as little as I could in both the parts copied from 3d and the current sprite rendering to make reviewing easier. In the future, I expect we could make the sprite rendering a normal 2d material, cleanly integrated with the rest.~~ _edit: see <https://github.com/bevyengine/bevy/pull/3460#issuecomment-1003605194>_ ## Remaining work - ~~don't require mesh normals~~ _out of scope_ - ~~add an example~~ _done_ - support 2d meshes & materials in the UI? - bikeshed names (I didn't think hard about naming, please check if it's fine) ## Remaining questions - ~~should we add a depth buffer to 2d now that there are 2d meshes?~~ _let's revisit that when we have an opaque render phase_ - ~~should we add MSAA support to the sprites, or remove it from the 2d meshes?~~ _I added MSAA to sprites since it's really needed for 2d meshes_ - ~~how to customize vertex attributes?~~ _#3120_ Co-authored-by: Carter Anderson <mcanders1@gmail.com>
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use crate::{
 | |
|     texture_atlas::{TextureAtlas, TextureAtlasSprite},
 | |
|     Sprite,
 | |
| };
 | |
| use bevy_asset::Handle;
 | |
| use bevy_ecs::bundle::Bundle;
 | |
| use bevy_render::{
 | |
|     texture::{Image, DEFAULT_IMAGE_HANDLE},
 | |
|     view::Visibility,
 | |
| };
 | |
| use bevy_transform::components::{GlobalTransform, Transform};
 | |
| 
 | |
| #[derive(Bundle, Clone)]
 | |
| pub struct SpriteBundle {
 | |
|     pub sprite: Sprite,
 | |
|     pub transform: Transform,
 | |
|     pub global_transform: GlobalTransform,
 | |
|     pub texture: Handle<Image>,
 | |
|     /// User indication of whether an entity is visible
 | |
|     pub visibility: Visibility,
 | |
| }
 | |
| 
 | |
| impl Default for SpriteBundle {
 | |
|     fn default() -> Self {
 | |
|         Self {
 | |
|             sprite: Default::default(),
 | |
|             transform: Default::default(),
 | |
|             global_transform: Default::default(),
 | |
|             texture: DEFAULT_IMAGE_HANDLE.typed(),
 | |
|             visibility: Default::default(),
 | |
|         }
 | |
|     }
 | |
| }
 | |
| /// A Bundle of components for drawing a single sprite from a sprite sheet (also referred
 | |
| /// to as a `TextureAtlas`)
 | |
| #[derive(Bundle, Clone, Default)]
 | |
| pub struct SpriteSheetBundle {
 | |
|     /// The specific sprite from the texture atlas to be drawn
 | |
|     pub sprite: TextureAtlasSprite,
 | |
|     /// A handle to the texture atlas that holds the sprite images
 | |
|     pub texture_atlas: Handle<TextureAtlas>,
 | |
|     /// Data pertaining to how the sprite is drawn on the screen
 | |
|     pub transform: Transform,
 | |
|     pub global_transform: GlobalTransform,
 | |
|     /// User indication of whether an entity is visible
 | |
|     pub visibility: Visibility,
 | |
| }
 |