Skip to content

Commit

Permalink
refactor: make render system use Local for Vello Renderer (#39)
Browse files Browse the repository at this point in the history
* modifies the render app

---------

Co-authored-by: Sebastian Hamel <[email protected]>
Co-authored-by: Spencer C. Imbleau <[email protected]>
  • Loading branch information
seabassjh and simbleau authored Apr 9, 2024
1 parent 9a878b9 commit 957f728
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 40 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ Subheadings to categorize changes are `added, changed, deprecated, removed, fixe

## Unreleased

## 0.1.2 (2024-04-08)

- Fixes a window hang issue in bevy on native platforms

## 0.1.1 (2024-04-04)

### fixed
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ members = [

[workspace.package]
edition = "2021"
version = "0.1.1"
version = "0.1.2"
license = "MIT OR Apache-2.0"
repository = "https://github.com/loopystudios/bevy_vello"

Expand Down
39 changes: 7 additions & 32 deletions src/render/plugin.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use super::extract::{self, ExtractedPixelScale, SSRenderTarget};
use super::{prepare, systems, BevyVelloRenderer, LottieRenderer};
use super::{prepare, systems, LottieRenderer};
use crate::render::extract::ExtractedRenderText;
use crate::render::SSRT_SHADER_HANDLE;
use crate::{VelloCanvasMaterial, VelloFont};
Expand All @@ -10,7 +10,6 @@ use bevy::render::render_asset::RenderAssetPlugin;
use bevy::render::renderer::RenderDevice;
use bevy::render::{Render, RenderApp, RenderSet};
use bevy::sprite::Material2dPlugin;
use vello::{AaSupport, Renderer, RendererOptions};

pub struct VelloRenderPlugin;

Expand Down Expand Up @@ -47,7 +46,12 @@ impl Plugin for VelloRenderPlugin {
)
.in_set(RenderSet::Prepare),
)
.add_systems(Render, systems::render_scene.in_set(RenderSet::Render));
.add_systems(
Render,
systems::render_scene
.in_set(RenderSet::Render)
.run_if(resource_exists::<RenderDevice>),
);

app.add_plugins((
Material2dPlugin::<VelloCanvasMaterial>::default(),
Expand All @@ -61,33 +65,4 @@ impl Plugin for VelloRenderPlugin {
(systems::resize_rendertargets, systems::clear_when_empty),
);
}

fn finish(&self, app: &mut App) {
let render_app = match app.get_sub_app_mut(RenderApp) {
Ok(render_app) => render_app,
Err(_) => return,
};

let device = render_app
.world
.get_resource::<RenderDevice>()
.expect("bevy_vello: unable to get render device");

render_app.insert_non_send_resource(BevyVelloRenderer(
Renderer::new(
device.wgpu_device(),
RendererOptions {
surface_format: None,
use_cpu: false,
antialiasing_support: AaSupport {
area: true,
msaa8: false,
msaa16: false,
},
num_init_threads: None,
},
)
.unwrap(),
));
}
}
27 changes: 20 additions & 7 deletions src/render/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use bevy::render::renderer::{RenderDevice, RenderQueue};
use bevy::render::view::NoFrustumCulling;
use bevy::sprite::{MaterialMesh2dBundle, Mesh2dHandle};
use bevy::window::{WindowResized, WindowResolution};
use vello::{RenderParams, Scene};
use vello::{AaSupport, RenderParams, Renderer, RendererOptions, Scene};

use super::extract::{ExtractedRenderAsset, ExtractedRenderText, SSRenderTarget};
use super::prepare::PreparedAffine;
Expand Down Expand Up @@ -57,14 +57,27 @@ pub fn render_scene(
gpu_images: Res<RenderAssets<Image>>,
device: Res<RenderDevice>,
queue: Res<RenderQueue>,
vello_renderer: Option<NonSendMut<BevyVelloRenderer>>,
mut vello_renderer: Local<Option<BevyVelloRenderer>>,
mut velottie_renderer: ResMut<LottieRenderer>,
) {
let mut renderer = if let Some(renderer) = vello_renderer {
renderer
} else {
return;
};
let renderer = vello_renderer.get_or_insert_with(|| {
BevyVelloRenderer(
Renderer::new(
device.wgpu_device(),
RendererOptions {
surface_format: None,
use_cpu: false,
antialiasing_support: AaSupport {
area: true,
msaa8: false,
msaa16: false,
},
num_init_threads: None,
},
)
.unwrap(),
)
});

if let Ok(SSRenderTarget(render_target_image)) = ss_render_target.get_single() {
let gpu_image = gpu_images.get(render_target_image).unwrap();
Expand Down

0 comments on commit 957f728

Please sign in to comment.