Fix circular dependencies in workspace
This commit is contained in:
parent
960e2f8a37
commit
173cfe2acf
11 changed files with 148 additions and 72 deletions
49
modules/khors-graphics/src/debug_gui.rs
Normal file
49
modules/khors-graphics/src/debug_gui.rs
Normal file
|
@ -0,0 +1,49 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use egui_vulkano::{Gui, GuiConfig};
|
||||
use vulkano_util::renderer::VulkanoWindowRenderer;
|
||||
use winit::{event_loop::EventLoopWindowTarget, window::WindowId};
|
||||
|
||||
#[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,3 +1,6 @@
|
|||
pub mod debug_gui;
|
||||
pub mod render_module;
|
||||
|
||||
use flax::{entity_ids, BoxedSystem, Query, QueryBorrow, Schedule, System, World};
|
||||
use glam::{
|
||||
f32::{Mat3, Vec3},
|
||||
|
@ -45,7 +48,8 @@ use vulkano_util::{
|
|||
};
|
||||
|
||||
use egui_vulkano::Gui;
|
||||
use khors_core::{debug_gui::DebugGuiStack, module::RenderModule as ThreadLocalModule};
|
||||
use crate::debug_gui::DebugGuiStack;
|
||||
use crate::render_module::RenderModule as ThreadLocalModule;
|
||||
|
||||
use self::{
|
||||
model::{INDICES, NORMALS, POSITIONS},
|
||||
|
|
75
modules/khors-graphics/src/render_module.rs
Normal file
75
modules/khors-graphics/src/render_module.rs
Normal file
|
@ -0,0 +1,75 @@
|
|||
use crate::debug_gui::DebugGuiStack;
|
||||
use anyhow::Result;
|
||||
use flax::World;
|
||||
use khors_core::events::Events;
|
||||
use std::time::Duration;
|
||||
|
||||
// THREAD LOCAL STUFF
|
||||
|
||||
pub trait RenderModule {
|
||||
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 {
|
||||
modules: Vec<Box<dyn RenderModule>>,
|
||||
}
|
||||
|
||||
impl RenderModulesStack {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
modules: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn iter(&self) -> std::slice::Iter<Box<dyn RenderModule>> {
|
||||
self.modules.iter()
|
||||
}
|
||||
|
||||
pub fn iter_mut(&mut self) -> std::slice::IterMut<Box<dyn RenderModule>> {
|
||||
self.modules.iter_mut()
|
||||
}
|
||||
|
||||
pub fn push<T: 'static + RenderModule>(&mut self, layer: T) {
|
||||
let layer = Box::new(layer);
|
||||
self.modules.push(layer);
|
||||
}
|
||||
|
||||
pub fn insert<T: 'static + RenderModule>(&mut self, index: usize, layer: T) {
|
||||
let layer = Box::new(layer);
|
||||
self.modules.insert(index, layer);
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for RenderModulesStack {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a RenderModulesStack {
|
||||
type Item = &'a Box<dyn RenderModule>;
|
||||
|
||||
type IntoIter = std::slice::Iter<'a, Box<dyn RenderModule>>;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
self.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a mut RenderModulesStack {
|
||||
type Item = &'a mut Box<dyn RenderModule>;
|
||||
|
||||
type IntoIter = std::slice::IterMut<'a, Box<dyn RenderModule>>;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
self.iter_mut()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue