Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

defer render systems until render resource context is ready #662

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions crates/bevy_ecs/src/resource/resource_query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,10 @@ impl<'a, T: Resource> FetchResource<'a> for FetchResourceRead<T> {
Res::new(resources.get_unsafe_ref::<T>(ResourceIndex::Global))
}

unsafe fn is_some(resources: &'a Resources, _system_id: Option<SystemId>) -> bool {
resources.contains::<T>()
}

fn borrow(resources: &Resources) {
resources.borrow::<T>();
}
Expand Down Expand Up @@ -276,6 +280,10 @@ impl<'a, T: Resource> FetchResource<'a> for FetchResourceWrite<T> {
ResMut::new(value, type_state.mutated())
}

unsafe fn is_some(resources: &'a Resources, _system_id: Option<SystemId>) -> bool {
resources.contains::<T>()
}

fn borrow(resources: &Resources) {
resources.borrow_mut::<T>();
}
Expand Down Expand Up @@ -322,6 +330,11 @@ impl<'a, T: Resource + FromResources> FetchResource<'a> for FetchResourceLocalMu
}
}

unsafe fn is_some(resources: &'a Resources, system_id: Option<SystemId>) -> bool {
let id = system_id.expect("Local<T> resources can only be used by systems");
resources.get_local::<T>(id).is_some()
}

fn borrow(resources: &Resources) {
resources.borrow_mut::<T>();
}
Expand Down
3 changes: 2 additions & 1 deletion crates/bevy_render/src/pipeline/render_pipelines.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::{
draw::{Draw, DrawContext},
mesh::{Indices, Mesh},
prelude::Msaa,
renderer::RenderResourceBindings,
renderer::{RenderResourceBindings, RenderResourceContext},
};
use bevy_asset::{Assets, Handle};
use bevy_ecs::{Query, Res, ResMut};
Expand Down Expand Up @@ -73,6 +73,7 @@ impl Default for RenderPipelines {
}

pub fn draw_render_pipelines_system(
_render_resource_context: Res<Box<dyn RenderResourceContext>>,
mut draw_context: DrawContext,
mut render_resource_bindings: ResMut<RenderResourceBindings>,
msaa: Res<Msaa>,
Expand Down
4 changes: 4 additions & 0 deletions crates/bevy_render/src/render_graph/system.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
use super::RenderGraph;
use crate::renderer::RenderResourceContext;
use bevy_ecs::{Resources, World};

pub fn render_graph_schedule_executor_system(world: &mut World, resources: &mut Resources) {
if resources.get::<Box<dyn RenderResourceContext>>().is_none() {
return;
}
// run render graph systems
let (mut system_schedule, commands) = {
let mut render_graph = resources.get_mut::<RenderGraph>().unwrap();
Expand Down
3 changes: 2 additions & 1 deletion crates/bevy_ui/src/widget/text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use bevy_render::{
draw::{Draw, DrawContext, Drawable},
mesh::Mesh,
prelude::Msaa,
renderer::{AssetRenderResourceBindings, RenderResourceBindings},
renderer::{AssetRenderResourceBindings, RenderResourceBindings, RenderResourceContext},
texture::Texture,
};
use bevy_sprite::{TextureAtlas, QUAD_HANDLE};
Expand Down Expand Up @@ -90,6 +90,7 @@ pub fn text_system(

#[allow(clippy::too_many_arguments)]
pub fn draw_text_system(
_render_resource_context: Res<Box<dyn RenderResourceContext>>,
mut draw_context: DrawContext,
fonts: Res<Assets<Font>>,
msaa: Res<Msaa>,
Expand Down