Skip to content

Commit

Permalink
Update with_bevy demo package (#406)
Browse files Browse the repository at this point in the history
  • Loading branch information
nixon-voxell authored Nov 5, 2023
1 parent a91a4db commit 78aa9e8
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
]
Expand Down
11 changes: 10 additions & 1 deletion examples/with_bevy/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "../../" }
23 changes: 15 additions & 8 deletions examples/with_bevy/src/main.rs
Original file line number Diff line number Diff line change
@@ -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::{
Expand All @@ -17,38 +18,43 @@ use bevy::{
};

#[derive(Resource)]
struct VelloRenderer(Renderer);
struct VelloRenderer(SyncCell<Renderer>);

impl FromWorld for VelloRenderer {
fn from_world(world: &mut World) -> Self {
let device = world.resource::<RenderDevice>();
let queue = world.resource::<RenderQueue>();

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(),
)
))
}
}

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::<VelloRenderer>();
}
}
Expand All @@ -70,6 +76,7 @@ fn render_scenes(
};
renderer
.0
.get()
.render_to_texture(
device.wgpu_device(),
&queue,
Expand Down

0 comments on commit 78aa9e8

Please sign in to comment.