Move egui layer to a separate DebugGuiStack structure
This commit is contained in:
parent
3f367e19ac
commit
92c0278ef0
50
src/core/debug_gui.rs
Normal file
50
src/core/debug_gui.rs
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use vulkano_util::renderer::VulkanoWindowRenderer;
|
||||||
|
use winit::{event_loop::EventLoopWindowTarget, window::WindowId};
|
||||||
|
|
||||||
|
use crate::modules::graphics::egui::{Gui, GuiConfig};
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct DebugGuiStack {
|
||||||
|
guis: HashMap<WindowId, Gui>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DebugGuiStack {
|
||||||
|
pub fn add_gui<T>(
|
||||||
|
&mut self,
|
||||||
|
window_id: WindowId,
|
||||||
|
event_loop: &EventLoopWindowTarget<T>,
|
||||||
|
renderer: &VulkanoWindowRenderer,
|
||||||
|
is_overlay: bool,
|
||||||
|
allow_srgb_render_target: bool,
|
||||||
|
) where
|
||||||
|
T: Clone + Send + Sync,
|
||||||
|
{
|
||||||
|
let gui = Gui::new(
|
||||||
|
event_loop,
|
||||||
|
renderer.surface().clone(),
|
||||||
|
renderer.graphics_queue().clone(),
|
||||||
|
renderer.swapchain_format(),
|
||||||
|
GuiConfig {
|
||||||
|
is_overlay,
|
||||||
|
allow_srgb_render_target,
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
self.guis.insert(window_id, gui);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn remove_gui(&mut self, window_id: WindowId) {
|
||||||
|
self.guis.remove(&window_id).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get(&mut self, window_id: WindowId) -> Option<&Gui> {
|
||||||
|
self.guis.get(&window_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_mut(&mut self, window_id: WindowId) -> Option<&mut Gui> {
|
||||||
|
self.guis.get_mut(&window_id)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,2 +1,4 @@
|
||||||
pub mod events;
|
pub mod events;
|
||||||
pub mod module;
|
pub mod module;
|
||||||
|
pub mod time;
|
||||||
|
pub mod debug_gui;
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
use std::{collections::HashMap, time::Duration};
|
use std::time::Duration;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use flax::World;
|
use flax::World;
|
||||||
use winit::window::WindowId;
|
|
||||||
|
|
||||||
use crate::{core::events::Events, modules::graphics::egui::Gui};
|
use crate::core::events::Events;
|
||||||
|
|
||||||
|
use super::debug_gui::DebugGuiStack;
|
||||||
|
|
||||||
pub trait Module {
|
pub trait Module {
|
||||||
fn on_update(&mut self, world: &mut World, events: &mut Events, frame_time: Duration) -> Result<()>;
|
fn on_update(&mut self, world: &mut World, events: &mut Events, frame_time: Duration) -> Result<()>;
|
||||||
|
@ -67,7 +68,7 @@ impl<'a> IntoIterator for &'a mut ModulesStack {
|
||||||
// THREAD LOCAL STUFF
|
// THREAD LOCAL STUFF
|
||||||
|
|
||||||
pub trait RenderModule {
|
pub trait RenderModule {
|
||||||
fn on_update(&mut self, gui: &mut HashMap<WindowId, Gui>, vk_context: &mut vulkano_util::context::VulkanoContext, vk_windows: &mut vulkano_util::window::VulkanoWindows, world: &mut World, events: &mut Events, frame_time: Duration) -> Result<()>;
|
fn on_update(&mut self, gui_stack: &mut DebugGuiStack, vk_context: &mut vulkano_util::context::VulkanoContext, vk_windows: &mut vulkano_util::window::VulkanoWindows, world: &mut World, events: &mut Events, frame_time: Duration) -> Result<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct RenderModulesStack {
|
pub struct RenderModulesStack {
|
||||||
|
|
43
src/core/time.rs
Normal file
43
src/core/time.rs
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
//! Provides time related functionality for Clocks.
|
||||||
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
use flax::component;
|
||||||
|
|
||||||
|
component! {
|
||||||
|
pub clock: Clock,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Measures high precision time
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub struct Clock {
|
||||||
|
start: Instant,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
impl Clock {
|
||||||
|
// Creates and starts a new clock
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Clock {
|
||||||
|
start: Instant::now(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the elapsed time
|
||||||
|
pub fn elapsed(&self) -> Duration {
|
||||||
|
Instant::now() - self.start
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resets the clock and returns the elapsed time
|
||||||
|
pub fn reset(&mut self) -> Duration {
|
||||||
|
let elapsed = self.elapsed();
|
||||||
|
|
||||||
|
self.start = Instant::now();
|
||||||
|
elapsed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Clock {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
use std::{collections::HashMap, sync::Arc};
|
use std::sync::Arc;
|
||||||
|
|
||||||
use flax::{entity_ids, BoxedSystem, Query, QueryBorrow, Schedule, System, World};
|
use flax::{entity_ids, BoxedSystem, Query, QueryBorrow, Schedule, System, World};
|
||||||
use vulkano::{
|
use vulkano::{
|
||||||
|
@ -15,9 +15,8 @@ use vulkano::{
|
||||||
use vulkano_util::{
|
use vulkano_util::{
|
||||||
context::VulkanoContext, renderer::VulkanoWindowRenderer, window::VulkanoWindows,
|
context::VulkanoContext, renderer::VulkanoWindowRenderer, window::VulkanoWindows,
|
||||||
};
|
};
|
||||||
use winit::window::WindowId;
|
|
||||||
|
|
||||||
use crate::core::module::RenderModule as ThreadLocalModule;
|
use crate::core::{debug_gui::DebugGuiStack, module::RenderModule as ThreadLocalModule};
|
||||||
|
|
||||||
use self::{egui::Gui, test_pipeline::test_pipeline};
|
use self::{egui::Gui, test_pipeline::test_pipeline};
|
||||||
|
|
||||||
|
@ -65,7 +64,7 @@ impl RenderModule {
|
||||||
impl ThreadLocalModule for RenderModule {
|
impl ThreadLocalModule for RenderModule {
|
||||||
fn on_update(
|
fn on_update(
|
||||||
&mut self,
|
&mut self,
|
||||||
guis: &mut HashMap<WindowId, Gui>,
|
gui_stack: &mut DebugGuiStack,
|
||||||
vk_context: &mut VulkanoContext,
|
vk_context: &mut VulkanoContext,
|
||||||
vk_windows: &mut vulkano_util::window::VulkanoWindows,
|
vk_windows: &mut vulkano_util::window::VulkanoWindows,
|
||||||
world: &mut World,
|
world: &mut World,
|
||||||
|
@ -77,7 +76,7 @@ impl ThreadLocalModule for RenderModule {
|
||||||
let viewport = &mut self.viewport;
|
let viewport = &mut self.viewport;
|
||||||
|
|
||||||
for (window_id, renderer) in vk_windows.iter_mut() {
|
for (window_id, renderer) in vk_windows.iter_mut() {
|
||||||
let gui = guis.get_mut(window_id).unwrap();
|
let gui = gui_stack.get_mut(*window_id).unwrap();
|
||||||
draw(
|
draw(
|
||||||
self.command_buffer_allocator.clone(),
|
self.command_buffer_allocator.clone(),
|
||||||
viewport,
|
viewport,
|
||||||
|
|
Loading…
Reference in a new issue