From 00f0b06afc8b8ed22873d1a4be1232a3b8c3a0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20Kry=C5=84ski?= Date: Sun, 11 Oct 2020 20:54:47 +0200 Subject: [PATCH] defer render systems until render resource context is ready --- crates/bevy_ecs/src/resource/resource_query.rs | 13 +++++++++++++ crates/bevy_render/src/pipeline/render_pipelines.rs | 3 ++- crates/bevy_render/src/render_graph/system.rs | 4 ++++ crates/bevy_ui/src/widget/text.rs | 3 ++- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/crates/bevy_ecs/src/resource/resource_query.rs b/crates/bevy_ecs/src/resource/resource_query.rs index ab33775bce0e6..cf18a1c1344b7 100644 --- a/crates/bevy_ecs/src/resource/resource_query.rs +++ b/crates/bevy_ecs/src/resource/resource_query.rs @@ -209,6 +209,10 @@ impl<'a, T: Resource> FetchResource<'a> for FetchResourceRead { Res::new(resources.get_unsafe_ref::(ResourceIndex::Global)) } + unsafe fn is_some(resources: &'a Resources, _system_id: Option) -> bool { + resources.contains::() + } + fn borrow(resources: &Resources) { resources.borrow::(); } @@ -276,6 +280,10 @@ impl<'a, T: Resource> FetchResource<'a> for FetchResourceWrite { ResMut::new(value, type_state.mutated()) } + unsafe fn is_some(resources: &'a Resources, _system_id: Option) -> bool { + resources.contains::() + } + fn borrow(resources: &Resources) { resources.borrow_mut::(); } @@ -322,6 +330,11 @@ impl<'a, T: Resource + FromResources> FetchResource<'a> for FetchResourceLocalMu } } + unsafe fn is_some(resources: &'a Resources, system_id: Option) -> bool { + let id = system_id.expect("Local resources can only be used by systems"); + resources.get_local::(id).is_some() + } + fn borrow(resources: &Resources) { resources.borrow_mut::(); } diff --git a/crates/bevy_render/src/pipeline/render_pipelines.rs b/crates/bevy_render/src/pipeline/render_pipelines.rs index 875c6d94bc848..aa764dc4d6b9f 100644 --- a/crates/bevy_render/src/pipeline/render_pipelines.rs +++ b/crates/bevy_render/src/pipeline/render_pipelines.rs @@ -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}; @@ -73,6 +73,7 @@ impl Default for RenderPipelines { } pub fn draw_render_pipelines_system( + _render_resource_context: Res>, mut draw_context: DrawContext, mut render_resource_bindings: ResMut, msaa: Res, diff --git a/crates/bevy_render/src/render_graph/system.rs b/crates/bevy_render/src/render_graph/system.rs index 330be0a1f9baa..afda924710ac2 100644 --- a/crates/bevy_render/src/render_graph/system.rs +++ b/crates/bevy_render/src/render_graph/system.rs @@ -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::>().is_none() { + return; + } // run render graph systems let (mut system_schedule, commands) = { let mut render_graph = resources.get_mut::().unwrap(); diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index 6b2f5c1133025..b05092130fba8 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -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}; @@ -90,6 +90,7 @@ pub fn text_system( #[allow(clippy::too_many_arguments)] pub fn draw_text_system( + _render_resource_context: Res>, mut draw_context: DrawContext, fonts: Res>, msaa: Res,