Fix circular dependencies in workspace
This commit is contained in:
		
							parent
							
								
									960e2f8a37
								
							
						
					
					
						commit
						173cfe2acf
					
				
					 11 changed files with 148 additions and 72 deletions
				
			
		
							
								
								
									
										22
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										22
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -1280,6 +1280,27 @@ dependencies = [
 | 
				
			||||||
name = "khors"
 | 
					name = "khors"
 | 
				
			||||||
version = "0.1.0"
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "khors-app"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "anyhow",
 | 
				
			||||||
 | 
					 "downcast-rs",
 | 
				
			||||||
 | 
					 "egui",
 | 
				
			||||||
 | 
					 "flax",
 | 
				
			||||||
 | 
					 "flume",
 | 
				
			||||||
 | 
					 "glam",
 | 
				
			||||||
 | 
					 "khors-core",
 | 
				
			||||||
 | 
					 "khors-graphics",
 | 
				
			||||||
 | 
					 "parking_lot",
 | 
				
			||||||
 | 
					 "serde",
 | 
				
			||||||
 | 
					 "serde-lexpr",
 | 
				
			||||||
 | 
					 "vulkano",
 | 
				
			||||||
 | 
					 "vulkano-shaders",
 | 
				
			||||||
 | 
					 "vulkano-util",
 | 
				
			||||||
 | 
					 "winit",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "khors-config"
 | 
					name = "khors-config"
 | 
				
			||||||
version = "0.1.0"
 | 
					version = "0.1.0"
 | 
				
			||||||
| 
						 | 
					@ -1349,6 +1370,7 @@ version = "0.1.0"
 | 
				
			||||||
dependencies = [
 | 
					dependencies = [
 | 
				
			||||||
 "anyhow",
 | 
					 "anyhow",
 | 
				
			||||||
 "egui-vulkano",
 | 
					 "egui-vulkano",
 | 
				
			||||||
 | 
					 "khors-app",
 | 
				
			||||||
 "khors-config",
 | 
					 "khors-config",
 | 
				
			||||||
 "khors-core",
 | 
					 "khors-core",
 | 
				
			||||||
 "khors-graphics",
 | 
					 "khors-graphics",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,7 @@ edition = "2021"
 | 
				
			||||||
members = [
 | 
					members = [
 | 
				
			||||||
  "khors-core",
 | 
					  "khors-core",
 | 
				
			||||||
  "vendor/egui-vulkano",
 | 
					  "vendor/egui-vulkano",
 | 
				
			||||||
 | 
					  "modules/khors-app",
 | 
				
			||||||
  "modules/khors-graphics",
 | 
					  "modules/khors-graphics",
 | 
				
			||||||
  "modules/khors-window",
 | 
					  "modules/khors-window",
 | 
				
			||||||
  "modules/khors-config",
 | 
					  "modules/khors-config",
 | 
				
			||||||
| 
						 | 
					@ -18,6 +19,9 @@ members = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
default-members = [ "khors-test" ]
 | 
					default-members = [ "khors-test" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[workspace.dependencies]
 | 
				
			||||||
 | 
					flax = { version = "0.6.2", features = ["derive", "serde", "tokio", "tracing"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[bin]]
 | 
					[[bin]]
 | 
				
			||||||
name = "khors-test"
 | 
					name = "khors-test"
 | 
				
			||||||
path = "./khors-test"
 | 
					path = "./khors-test"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,3 @@
 | 
				
			||||||
pub mod app;
 | 
					 | 
				
			||||||
pub mod events;
 | 
					pub mod events;
 | 
				
			||||||
pub mod module;
 | 
					pub mod module;
 | 
				
			||||||
pub mod time;
 | 
					pub mod time;
 | 
				
			||||||
pub mod debug_gui;
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,10 +5,13 @@ use flax::World;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::events::Events;
 | 
					use super::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<()>;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct ModulesStack {
 | 
					pub struct ModulesStack {
 | 
				
			||||||
| 
						 | 
					@ -17,7 +20,9 @@ pub struct ModulesStack {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl ModulesStack {
 | 
					impl ModulesStack {
 | 
				
			||||||
    pub fn new() -> Self {
 | 
					    pub fn new() -> Self {
 | 
				
			||||||
        Self { modules: Vec::new() }
 | 
					        Self {
 | 
				
			||||||
 | 
					            modules: Vec::new(),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn iter(&self) -> std::slice::Iter<Box<dyn Module>> {
 | 
					    pub fn iter(&self) -> std::slice::Iter<Box<dyn Module>> {
 | 
				
			||||||
| 
						 | 
					@ -64,63 +69,3 @@ impl<'a> IntoIterator for &'a mut ModulesStack {
 | 
				
			||||||
        self.iter_mut()
 | 
					        self.iter_mut()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 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()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ edition = "2021"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
khors-core = { path = "../khors-core", version = "0.1.0" }
 | 
					khors-core = { path = "../khors-core", version = "0.1.0" }
 | 
				
			||||||
 | 
					khors-app = { path = "../modules/khors-app", version = "0.1.0" }
 | 
				
			||||||
egui-vulkano = { path = "../vendor/egui-vulkano", version = "0.1.0" }
 | 
					egui-vulkano = { path = "../vendor/egui-vulkano", version = "0.1.0" }
 | 
				
			||||||
khors-graphics = { path = "../modules/khors-graphics", version = "0.1.0" }
 | 
					khors-graphics = { path = "../modules/khors-graphics", version = "0.1.0" }
 | 
				
			||||||
khors-window = { path = "../modules/khors-window", version = "0.1.0" }
 | 
					khors-window = { path = "../modules/khors-window", version = "0.1.0" }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
use anyhow::Result;
 | 
					use anyhow::Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use khors_config::ConfigModule;
 | 
					use khors_config::ConfigModule;
 | 
				
			||||||
use khors_core::app::App;
 | 
					use khors_app::App;
 | 
				
			||||||
use khors_graphics::RenderModule;
 | 
					use khors_graphics::RenderModule;
 | 
				
			||||||
use khors_window::WindowModule;
 | 
					use khors_window::WindowModule;
 | 
				
			||||||
use tokio::runtime::Builder;
 | 
					use tokio::runtime::Builder;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										24
									
								
								modules/khors-app/Cargo.toml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								modules/khors-app/Cargo.toml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					[package]
 | 
				
			||||||
 | 
					name = "khors-app"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					edition = "2021"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					khors-core = { path = "../../khors-core", version = "0.1.0" }
 | 
				
			||||||
 | 
					khors-graphics = { path = "../khors-graphics", version = "0.1.0" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					anyhow = "1.0.80"
 | 
				
			||||||
 | 
					egui = "0.27.1"
 | 
				
			||||||
 | 
					glam = "0.27.0"
 | 
				
			||||||
 | 
					winit = { version = "0.29.15",features = ["rwh_05"] }
 | 
				
			||||||
 | 
					vulkano = { git = "https://github.com/vulkano-rs/vulkano.git", branch = "master" }
 | 
				
			||||||
 | 
					vulkano-shaders = { git = "https://github.com/vulkano-rs/vulkano.git", branch = "master" }
 | 
				
			||||||
 | 
					vulkano-util = { git = "https://github.com/vulkano-rs/vulkano.git", branch = "master" }
 | 
				
			||||||
 | 
					flax = { version = "0.6.2", features = ["derive", "serde", "tokio", "tracing"] }
 | 
				
			||||||
 | 
					flume = "0.11.0"
 | 
				
			||||||
 | 
					parking_lot = "0.12.1"
 | 
				
			||||||
 | 
					downcast-rs = "1.2.0"
 | 
				
			||||||
 | 
					serde = { version = "1.0.197", features = ["derive"] }
 | 
				
			||||||
 | 
					serde-lexpr = "0.1.3"
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,13 @@
 | 
				
			||||||
#![warn(dead_code)]
 | 
					#![warn(dead_code)]
 | 
				
			||||||
 | 
					use khors_core::{
 | 
				
			||||||
use crate::{
 | 
					 | 
				
			||||||
    debug_gui::DebugGuiStack,
 | 
					 | 
				
			||||||
    events::Events,
 | 
					    events::Events,
 | 
				
			||||||
    module::{Module, ModulesStack, RenderModule as ThreadLocalModule, RenderModulesStack},
 | 
					    module::{Module, ModulesStack},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					use khors_graphics::{
 | 
				
			||||||
 | 
					    debug_gui::DebugGuiStack,
 | 
				
			||||||
 | 
					    render_module::{RenderModule as ThreadLocalModule, RenderModulesStack},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use anyhow::Result;
 | 
					use anyhow::Result;
 | 
				
			||||||
use flax::{component, Schedule, World};
 | 
					use flax::{component, Schedule, World};
 | 
				
			||||||
use vulkano::device::DeviceFeatures;
 | 
					use vulkano::device::DeviceFeatures;
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,6 @@
 | 
				
			||||||
 | 
					pub mod debug_gui;
 | 
				
			||||||
 | 
					pub mod render_module;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use flax::{entity_ids, BoxedSystem, Query, QueryBorrow, Schedule, System, World};
 | 
					use flax::{entity_ids, BoxedSystem, Query, QueryBorrow, Schedule, System, World};
 | 
				
			||||||
use glam::{
 | 
					use glam::{
 | 
				
			||||||
    f32::{Mat3, Vec3},
 | 
					    f32::{Mat3, Vec3},
 | 
				
			||||||
| 
						 | 
					@ -45,7 +48,8 @@ use vulkano_util::{
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use egui_vulkano::Gui;
 | 
					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::{
 | 
					use self::{
 | 
				
			||||||
    model::{INDICES, NORMALS, POSITIONS},
 | 
					    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