From 78aa9e805d68288bc72c5f74dfe2159b7538bf30 Mon Sep 17 00:00:00 2001 From: Nixon <43715558+nixon-voxell@users.noreply.github.com> Date: Mon, 6 Nov 2023 00:10:38 +0800 Subject: [PATCH] Update `with_bevy` demo package (#406) --- Cargo.toml | 2 +- examples/with_bevy/Cargo.toml | 11 ++++++++++- examples/with_bevy/src/main.rs | 23 +++++++++++++++-------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ba4c92124..ed84f934b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = [ "examples/headless", "examples/with_winit", - # "examples/with_bevy", # Disable for now until bevy is using wgpu 0.17 + "examples/with_bevy", "examples/run_wasm", "examples/scenes", ] diff --git a/examples/with_bevy/Cargo.toml b/examples/with_bevy/Cargo.toml index 1257adc9e..91b3e64f5 100644 --- a/examples/with_bevy/Cargo.toml +++ b/examples/with_bevy/Cargo.toml @@ -10,5 +10,14 @@ repository.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bevy = "0.11" +bevy = { version = "0.12", features = [ + "bevy_winit", + "bevy_core_pipeline", + "bevy_pbr", + "bevy_render", + "multi-threaded", + "x11", + "tonemapping_luts", + ], default-features = false } + vello = { path = "../../" } diff --git a/examples/with_bevy/src/main.rs b/examples/with_bevy/src/main.rs index 9ddf875c7..4180c687a 100644 --- a/examples/with_bevy/src/main.rs +++ b/examples/with_bevy/src/main.rs @@ -1,6 +1,7 @@ use bevy::render::{Render, RenderSet}; -use vello::kurbo::{Affine, Point, Rect}; -use vello::peniko::{Color, Fill, Gradient, Stroke}; +use bevy::utils::synccell::SyncCell; +use vello::kurbo::{Affine, Point, Rect, Stroke}; +use vello::peniko::{Color, Fill, Gradient}; use vello::{Renderer, RendererOptions, Scene, SceneBuilder, SceneFragment}; use bevy::{ @@ -17,24 +18,25 @@ use bevy::{ }; #[derive(Resource)] -struct VelloRenderer(Renderer); +struct VelloRenderer(SyncCell); impl FromWorld for VelloRenderer { fn from_world(world: &mut World) -> Self { let device = world.resource::(); let queue = world.resource::(); - VelloRenderer( + VelloRenderer(SyncCell::new( Renderer::new( device.wgpu_device(), - &RendererOptions { + RendererOptions { surface_format: None, timestamp_period: queue.0.get_timestamp_period(), antialiasing_support: vello::AaSupport::area_only(), + use_cpu: false, }, ) .unwrap(), - ) + )) } } @@ -42,13 +44,17 @@ struct VelloPlugin; impl Plugin for VelloPlugin { fn build(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return }; + let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + return; + }; // This should probably use the render graph, but working out the dependencies there is awkward render_app.add_systems(Render, render_scenes.in_set(RenderSet::Render)); } fn finish(&self, app: &mut App) { - let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return }; + let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { + return; + }; render_app.init_resource::(); } } @@ -70,6 +76,7 @@ fn render_scenes( }; renderer .0 + .get() .render_to_texture( device.wgpu_device(), &queue,