mirror of
https://github.com/bevyengine/bevy
synced 2024-12-23 03:23:20 +00:00
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>
57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
mod error;
|
|
mod font;
|
|
mod font_atlas;
|
|
mod font_atlas_set;
|
|
mod font_loader;
|
|
mod glyph_brush;
|
|
mod pipeline;
|
|
mod text;
|
|
mod text2d;
|
|
|
|
pub use error::*;
|
|
pub use font::*;
|
|
pub use font_atlas::*;
|
|
pub use font_atlas_set::*;
|
|
pub use font_loader::*;
|
|
pub use glyph_brush::*;
|
|
pub use pipeline::*;
|
|
pub use text::*;
|
|
pub use text2d::*;
|
|
|
|
pub mod prelude {
|
|
#[doc(hidden)]
|
|
pub use crate::{
|
|
Font, HorizontalAlign, Text, Text2dBundle, TextAlignment, TextError, TextSection,
|
|
TextStyle, VerticalAlign,
|
|
};
|
|
}
|
|
|
|
use bevy_app::prelude::*;
|
|
use bevy_asset::AddAsset;
|
|
use bevy_ecs::{entity::Entity, schedule::ParallelSystemDescriptorCoercion};
|
|
use bevy_render::{RenderApp, RenderStage};
|
|
use bevy_sprite::SpriteSystem;
|
|
|
|
pub type DefaultTextPipeline = TextPipeline<Entity>;
|
|
|
|
#[derive(Default)]
|
|
pub struct TextPlugin;
|
|
|
|
impl Plugin for TextPlugin {
|
|
fn build(&self, app: &mut App) {
|
|
app.add_asset::<Font>()
|
|
.add_asset::<FontAtlasSet>()
|
|
.register_type::<Text>()
|
|
.register_type::<VerticalAlign>()
|
|
.register_type::<HorizontalAlign>()
|
|
.init_asset_loader::<FontLoader>()
|
|
.insert_resource(DefaultTextPipeline::default())
|
|
.add_system_to_stage(CoreStage::PostUpdate, text2d_system);
|
|
|
|
let render_app = app.sub_app_mut(RenderApp);
|
|
render_app.add_system_to_stage(
|
|
RenderStage::Extract,
|
|
extract_text2d_sprite.after(SpriteSystem::ExtractSprites),
|
|
);
|
|
}
|
|
}
|