summaryrefslogtreecommitdiff
path: root/engine/src
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src')
-rw-r--r--engine/src/asset.rs35
-rw-r--r--engine/src/rendering/shader.rs5
2 files changed, 19 insertions, 21 deletions
diff --git a/engine/src/asset.rs b/engine/src/asset.rs
index 9d69727..04cb385 100644
--- a/engine/src/asset.rs
+++ b/engine/src/asset.rs
@@ -111,7 +111,7 @@ pub struct Assets
import_work_queue: WorkQueue<ImportWorkUserData>,
import_work_msg_receiver: MpscReceiver<ImportWorkMessage>,
import_work_msg_sender: MpscSender<ImportWorkMessage>,
- events: Events,
+ curr_tick_events: Vec<Event>,
}
impl Assets
@@ -129,7 +129,7 @@ impl Assets
import_work_queue: WorkQueue::new("asset_importing_work_queue"),
import_work_msg_receiver,
import_work_msg_sender,
- events: Events::default(),
+ curr_tick_events: Vec::with_capacity(capacity),
}
}
@@ -436,8 +436,7 @@ impl Assets
} else {
entry.state = AssetState::Ready(index, label.clone());
- self.events
- .curr_tick_events
+ self.curr_tick_events
.push(Event::Stored(id, label.into_label()));
let waiting_dependants = std::mem::take(&mut entry.waiting_dependants);
@@ -448,11 +447,6 @@ impl Assets
Handle::from_id(id)
}
- pub fn events(&self) -> &Events
- {
- &self.events
- }
-
fn recurse_update_dependants(&mut self, initial_dependants: Vec<Id>)
{
let mut all_dependants = initial_dependants;
@@ -496,8 +490,7 @@ impl Assets
*state = AssetState::Ready(index, label.clone());
- self.events
- .curr_tick_events
+ self.curr_tick_events
.push(Event::Stored(dependant_id, label.into_label()));
all_dependants.append(waiting_dependants);
@@ -828,18 +821,17 @@ struct IdValid
label_hash: LabelHash,
}
-#[derive(Debug, Default)]
+#[derive(Debug, Default, Sole)]
pub struct Events
{
- curr_tick_events: Vec<Event>,
- last_tick_events: Vec<Event>,
+ last_tick: Vec<Event>,
}
impl Events
{
- pub fn last_tick_events(&self) -> impl Iterator<Item = &Event>
+ pub fn iter_last_tick(&self) -> impl Iterator<Item = &Event>
{
- self.last_tick_events.iter()
+ self.last_tick.iter()
}
}
@@ -952,6 +944,7 @@ impl crate::ecs::extension::Extension for Extension
fn collect(self, mut collector: crate::ecs::extension::Collector<'_>)
{
let _ = collector.add_sole(self.assets);
+ let _ = collector.add_sole(Events::default());
collector.spawn_declared_entity(&HANDLE_ASSETS_PHASE);
@@ -960,17 +953,19 @@ impl crate::ecs::extension::Extension for Extension
}
}
-fn add_received_assets(mut assets: Single<Assets>)
+fn add_received_assets(mut assets: Single<Assets>, mut events: Single<Events>)
{
let Ok(assets) = assets.get_mut() else {
unreachable!();
};
- let Events { curr_tick_events, last_tick_events } = &mut assets.events;
+ let Ok(events) = events.get_mut() else {
+ unreachable!();
+ };
- std::mem::swap(last_tick_events, curr_tick_events);
+ std::mem::swap(&mut events.last_tick, &mut assets.curr_tick_events);
- curr_tick_events.clear();
+ assets.curr_tick_events.clear();
while let Ok(import_work_msg) = assets.import_work_msg_receiver.try_recv() {
match import_work_msg {
diff --git a/engine/src/rendering/shader.rs b/engine/src/rendering/shader.rs
index 2528471..f56a9ae 100644
--- a/engine/src/rendering/shader.rs
+++ b/engine/src/rendering/shader.rs
@@ -25,6 +25,7 @@ use crate::asset::{
Asset,
Assets,
Event as AssetEvent,
+ Events as AssetEvents,
Handle as AssetHandle,
Id as AssetId,
Submitter as AssetSubmitter,
@@ -1387,6 +1388,7 @@ fn initialize(mut assets: Single<Assets>) -> Result<(), crate::Error>
fn load_modules(
mut context: Single<Context>,
assets: Single<Assets>,
+ asset_events: Single<AssetEvents>,
) -> Result<(), crate::Error>
{
let Ok(context) = context.get_mut() else {
@@ -1394,8 +1396,9 @@ fn load_modules(
};
let assets = assets.get()?;
+ let asset_events = asset_events.get()?;
- for AssetEvent::Stored(asset_id, asset_label) in assets.events().last_tick_events() {
+ for AssetEvent::Stored(asset_id, asset_label) in asset_events.iter_last_tick() {
let asset_handle = AssetHandle::<ModuleSource>::from_id(*asset_id);
if !assets.is_loaded_and_has_type(&asset_handle) {