Skip to content

Commit

Permalink
hide canvas when no render items are in scene
Browse files Browse the repository at this point in the history
  • Loading branch information
seabassjh committed Sep 16, 2023
1 parent 14375fc commit 8e86cb4
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 29 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ members = ["demo"]

[workspace.package]
edition = "2021"
version = "0.3.1"
version = "0.3.2"
license = "MIT OR Apache-2.0"
repository = "https://github.com/vectorgameexperts/bevy-vello"

Expand Down
8 changes: 7 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,13 @@ impl Plugin for BevyVelloPlugin {
DebugVisualizationsPlugin,
));
app.add_systems(Startup, rendertarget::setup_ss_rendertarget)
.add_systems(Update, rendertarget::resize_rendertargets);
.add_systems(
Update,
(
rendertarget::resize_rendertargets,
rendertarget::clear_when_empty,
),
);
}
}

Expand Down
36 changes: 12 additions & 24 deletions src/renderer/extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,6 @@ use bevy::{

use crate::{font::VelloFont, ColorPaletteSwap, Layer, VelloText, VelloVector};

#[derive(Component)]
pub struct RenderReadyTag;

pub fn tag_vectors_for_render(
mut commands: Commands,
vector_assets: ResMut<Assets<VelloVector>>,
vectors: Query<(Entity, &Handle<VelloVector>), Without<RenderReadyTag>>,
) {
for (entity, handle) in vectors.iter() {
if vector_assets.get(handle).is_some() {
commands.entity(entity).insert(RenderReadyTag);
}
}
}

#[derive(Component, Clone)]
pub struct ExtractedRenderVector {
pub vector_handle: Handle<VelloVector>,
Expand All @@ -40,22 +25,25 @@ pub fn vector_instances(
&GlobalTransform,
Option<&ColorPaletteSwap>,
Option<&Node>,
&ComputedVisibility,
)>,
>,
assets: Extract<Res<Assets<VelloVector>>>,
) {
for (vello_vector_handle, layer, transform, color_pallette_swap, ui_node) in
for (vello_vector_handle, layer, transform, color_pallette_swap, ui_node, visibility) in
query_vectors.iter()
{
if let Some(asset_data) = assets.get(vello_vector_handle) {
commands.spawn(ExtractedRenderVector {
vector_handle: vello_vector_handle.clone(),
render_data: asset_data.to_owned(),
transform: *transform,
layer: *layer,
color_pallette_swap: color_pallette_swap.cloned(),
ui_node: ui_node.cloned(),
});
if visibility.is_visible() {
commands.spawn(ExtractedRenderVector {
vector_handle: vello_vector_handle.clone(),
render_data: asset_data.to_owned(),
transform: *transform,
layer: *layer,
color_pallette_swap: color_pallette_swap.cloned(),
ui_node: ui_node.cloned(),
});
}
}
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/renderer/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@ impl Plugin for VelloRenderPlugin {
ExtractComponentPlugin::<extract::SSRenderTarget>::default(),
RenderAssetPlugin::<VelloVector>::default(),
RenderAssetPlugin::<VelloFont>::default(),
))
.add_systems(Update, extract::tag_vectors_for_render);
));
}

fn finish(&self, app: &mut App) {
Expand Down
16 changes: 15 additions & 1 deletion src/rendertarget.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use bevy::{
window::{WindowResized, WindowResolution},
};

use crate::{renderer::SSRenderTarget, SSRT_SHADER_HANDLE};
use crate::{renderer::SSRenderTarget, Layer, SSRT_SHADER_HANDLE};

#[derive(Component)]
struct MainCamera;
Expand Down Expand Up @@ -195,3 +195,17 @@ impl Material2d for VelloCanvasMaterial {
Ok(())
}
}

/// Hide the RenderTarget canvas if there is nothing to render
pub fn clear_when_empty(
mut query_render_target: Query<&mut Visibility, With<SSRenderTarget>>,
render_items: Query<(&mut Layer, &ComputedVisibility)>,
) {
if let Ok(mut visibility) = query_render_target.get_single_mut() {
if render_items.is_empty() {
*visibility = Visibility::Hidden;
} else {
*visibility = Visibility::Inherited;
}
}
}

0 comments on commit 8e86cb4

Please sign in to comment.