canvas_basic/
canvas_basic.rs

1// Demonstrates use of the canvas API by drawing the gallery from gallery_3d onto a canvas and drawing the canvas to the screen
2
3use bevy::{color::palettes::css::*, prelude::*};
4use bevy_vector_shapes::prelude::*;
5
6mod gallery_3d;
7use gallery_3d::gallery;
8
9fn main() {
10    App::new()
11        .add_plugins(DefaultPlugins)
12        .add_plugins(ShapePlugin::default())
13        .insert_resource(ClearColor(DIM_GRAY.into()))
14        .add_systems(Startup, setup)
15        .add_systems(Update, draw_shapes)
16        .run();
17}
18
19fn setup(mut commands: Commands, mut images: ResMut<Assets<Image>>) {
20    let config = CanvasConfig::new(1024, 1024);
21    commands.spawn_canvas(images.as_mut(), config);
22
23    commands.spawn((
24        Camera3d::default(),
25        Transform::from_xyz(0., 0., 16.).looking_at(Vec3::ZERO, Vec3::Y),
26        Msaa::Off,
27    ));
28}
29
30fn draw_shapes(time: Res<Time>, mut painter: ShapePainter, canvas: Single<(Entity, &Canvas)>) {
31    let (canvas_e, canvas) = canvas.into_inner();
32    painter.image(canvas.image.clone(), Vec2::splat(20.));
33
34    painter.set_canvas(canvas_e);
35    painter.set_scale(Vec3::ONE * 48.0);
36
37    gallery(painter, time.elapsed_secs(), 0..15);
38}