From cfcd1bf2439d24f4a8859367924d89fac029ca82 Mon Sep 17 00:00:00 2001 From: Piotr Date: Sun, 27 Sep 2020 20:35:46 +0200 Subject: [PATCH] Create no_imgui version of engine, make build 2.63 times faster --- Cargo.lock | 247 +---------------------------------------- Cargo.toml | 13 ++- src/example_client.rs | 117 ++++++++++--------- src/gaia/bg_info.rs | 22 ---- src/gaia/camera.rs | 16 ++- src/gaia/client.rs | 4 + src/gaia/components.rs | 10 +- src/gaia/engine.rs | 31 ++++-- src/gaia/light.rs | 25 +++-- src/gaia/mod.rs | 2 +- src/main.rs | 6 +- 11 files changed, 141 insertions(+), 352 deletions(-) delete mode 100644 src/gaia/bg_info.rs diff --git a/Cargo.lock b/Cargo.lock index 7296e7f..e6d6cff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,29 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "addr2line" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" - -[[package]] -name = "aho-corasick" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86" -dependencies = [ - "memchr", -] - [[package]] name = "approx" version = "0.3.2" @@ -45,20 +21,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -[[package]] -name = "backtrace" -version = "0.3.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "bitflags" version = "1.2.1" @@ -85,7 +47,7 @@ checksum = "283944cdecc44bf0b8dd010ec9af888d3b4f142844fdbe026c20ef68148d6fe7" dependencies = [ "approx", "num-traits", - "rand 0.6.5", + "rand", ] [[package]] @@ -147,7 +109,7 @@ version = "0.1.0" dependencies = [ "cgmath", "gl", - "human-panic", + "glfw", "image2", "imgui-glfw-rs", "imgui-inspect", @@ -170,23 +132,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -[[package]] -name = "getrandom" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" - [[package]] name = "gl" version = "0.14.0" @@ -242,21 +187,6 @@ dependencies = [ "cmake", ] -[[package]] -name = "human-panic" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f357a500abcbd7c5f967c1d45c8838585b36743823b9d43488f24850534e36" -dependencies = [ - "backtrace", - "os_type", - "serde", - "serde_derive", - "termcolor", - "toml", - "uuid", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -396,21 +326,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memchr" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" - -[[package]] -name = "miniz_oxide" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f" -dependencies = [ - "adler", -] - [[package]] name = "num" version = "0.3.0" @@ -496,21 +411,6 @@ dependencies = [ "malloc_buf", ] -[[package]] -name = "object" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" - -[[package]] -name = "os_type" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edc011af0ae98b7f88cf7e4a83b70a54a75d2b8cb013d6efd02e5956207e9eb" -dependencies = [ - "regex", -] - [[package]] name = "parking_lot" version = "0.10.2" @@ -535,12 +435,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "ppv-lite86" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" - [[package]] name = "proc-macro2" version = "1.0.19" @@ -567,9 +461,9 @@ checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ "autocfg 0.1.7", "libc", - "rand_chacha 0.1.1", + "rand_chacha", "rand_core 0.4.2", - "rand_hc 0.1.0", + "rand_hc", "rand_isaac", "rand_jitter", "rand_os", @@ -578,19 +472,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", -] - [[package]] name = "rand_chacha" version = "0.1.1" @@ -601,16 +482,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_core" version = "0.3.1" @@ -626,15 +497,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom", -] - [[package]] name = "rand_hc" version = "0.1.0" @@ -644,15 +506,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_isaac" version = "0.1.1" @@ -730,30 +583,6 @@ version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" -[[package]] -name = "regex" -version = "1.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", - "thread_local", -] - -[[package]] -name = "regex-syntax" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" - -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" - [[package]] name = "scopeguard" version = "1.1.0" @@ -775,23 +604,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[package]] -name = "serde" -version = "1.0.116" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5" - -[[package]] -name = "serde_derive" -version = "1.0.116" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "simple-logging" version = "2.0.2" @@ -826,15 +638,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "termcolor" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -dependencies = [ - "winapi-util", -] - [[package]] name = "thread-id" version = "3.3.0" @@ -846,51 +649,18 @@ dependencies = [ "winapi", ] -[[package]] -name = "thread_local" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -dependencies = [ - "lazy_static", -] - [[package]] name = "tobj" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6172100cd5b17cdd085c94f261e31101ca31886c86a2337a6687dac6d2fb3cf1" -[[package]] -name = "toml" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" -dependencies = [ - "serde", -] - [[package]] name = "unicode-xid" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" -[[package]] -name = "uuid" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" -dependencies = [ - "rand 0.7.3", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "winapi" version = "0.3.9" @@ -907,15 +677,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 97e7e23..30f70f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,16 +11,21 @@ lto = true [dependencies] gl = "0.14.0" -imgui-glfw-rs = { git = "https://github.com/Leinnan/imgui-glfw-rs" } +imgui-glfw-rs = { git = "https://github.com/Leinnan/imgui-glfw-rs", optional = true } +glfw = {version="0.40.0", optional = true} cgmath = "0.17.0" -imgui-inspect = "0.5.0" -imgui-inspect-derive = "0.5.0" +imgui-inspect = {version="0.5.0", optional = true} +imgui-inspect-derive = {version="0.5.0", optional= true} tobj = "2.0.2" -human-panic = "1.0.3" inline_tweak = "1.0.8" log = "0.4.11" simple-logging = "2.0.2" image2 = { git = "https://github.com/Leinnan/image2-rs", branch="legacy", default-features = false, features=["io"] } +[features] +default = ["no_imgui"] +imgui_inspect = ["imgui-inspect-derive", "imgui-inspect", "imgui-glfw-rs"] +no_imgui = ["glfw"] + [profile.dev.package."*"] opt-level = 2 \ No newline at end of file diff --git a/src/example_client.rs b/src/example_client.rs index 2fe407b..d2f0d73 100644 --- a/src/example_client.rs +++ b/src/example_client.rs @@ -9,6 +9,9 @@ use crate::gaia::sky::Sky; use crate::gaia::*; use cgmath::prelude::*; use cgmath::{perspective, vec3, Deg, Matrix4, Point3, Vector3}; +#[cfg(feature = "no_imgui")] +use glfw; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::glfw; pub struct ExampleClient { @@ -68,7 +71,7 @@ impl Client for ExampleClient { let gaz_tank = ModelComponent { transform: Transform { position: vec3(8.3, 0.0, 3.0), - rotation: vec3(0.0,120.0,0.0), + rotation: vec3(0.0, 120.0, 0.0), scale: 0.025, ..Transform::default() }, @@ -102,7 +105,7 @@ impl Client for ExampleClient { transform: Transform::default(), model: cache.get_model("resources/objects/ruins/ruins.obj"), }; - self.models = vec![tree, tree2, tree3, ground, robot, ruins,gaz_tank, grass]; + self.models = vec![tree, tree2, tree3, ground, robot, ruins, gaz_tank, grass]; } unsafe fn draw(&mut self) { @@ -126,7 +129,7 @@ impl Client for ExampleClient { fn update(&mut self, _engine: &mut Engine) {} fn process_input(&mut self, window: &glfw::Window, delta: f32) { - use imgui_glfw_rs::glfw::{Action, Key}; + use glfw::{Action, Key}; if window.get_key(Key::W) == Action::Press { self.camera.process_keyboard(CameraMovement::FORWARD, delta); } @@ -147,9 +150,9 @@ impl Client for ExampleClient { } } + #[cfg(feature = "imgui_inspect")] fn debug_draw(&mut self, ui: &imgui_glfw_rs::imgui::Ui) { use imgui_glfw_rs::imgui::*; - use imgui_inspect::InspectArgsStruct; if let Some(menu_bar) = ui.begin_main_menu_bar() { if let Some(menu) = ui.begin_menu(im_str!("Basic"), true) { if MenuItem::new(im_str!("Show Object info")) @@ -174,57 +177,61 @@ impl Client for ExampleClient { } menu_bar.end(ui); } - if self.show_camera_info { - Window::new(im_str!("CameraInfo")) - .size([260.0, 430.0], Condition::Always) - .position([20.0, 40.0], Condition::Always) - .title_bar(false) - .scroll_bar(false) - .no_inputs() - .bg_alpha(0.8) - .collapsible(false) - .build(&ui, || { - ui.text(im_str!("Camera info")); - ui.separator(); - >::render( - &[&self.camera], - &"CameraInfo", - ui, - &imgui_inspect::InspectArgsDefault { - header: Some(false), - ..imgui_inspect::InspectArgsDefault::default() - }, - ); - }); - } - if self.show_object_info { - let mut id = self.object_info_id; - let max: i32 = self.models.len() as i32 - 1; - let mut show_window = self.show_object_info; - Window::new(im_str!("Object info")) - .size([250.0, 250.0], Condition::FirstUseEver) - .opened(&mut show_window) - .build(&ui, || { - ui.drag_int(im_str!("id"), &mut id).min(0).max(max).build(); + { + use imgui_inspect::InspectArgsStruct; - let mut selected_mut = vec![&mut self.models[id as usize].transform]; - >::render_mut( - &mut selected_mut, - "Object info", - &ui, - &InspectArgsStruct::default(), - ); - }); - self.object_info_id = id; - self.show_object_info = show_window; - } - if self.show_light_info { - let mut id = self.light_info_id; - let max: i32 = self.lighting_system.point_lights.len() as i32 - 1; - let mut show_window = self.show_light_info; + if self.show_camera_info { + Window::new(im_str!("CameraInfo")) + .size([260.0, 430.0], Condition::Always) + .position([20.0, 40.0], Condition::Always) + .title_bar(false) + .scroll_bar(false) + .no_inputs() + .bg_alpha(0.8) + .collapsible(false) + .build(&ui, || { + ui.text(im_str!("Camera info")); + ui.separator(); + >::render( + &[&self.camera], + &"CameraInfo", + ui, + &imgui_inspect::InspectArgsDefault { + header: Some(false), + ..imgui_inspect::InspectArgsDefault::default() + }, + ); + }); + } + if self.show_object_info { + let mut id = self.object_info_id; + let max: i32 = self.models.len() as i32 - 1; + let mut show_window = self.show_object_info; - Window::new(im_str!("Lights info")) + Window::new(im_str!("Object info")) + .size([250.0, 250.0], Condition::FirstUseEver) + .opened(&mut show_window) + .build(&ui, || { + ui.drag_int(im_str!("id"), &mut id).min(0).max(max).build(); + + let mut selected_mut = vec![&mut self.models[id as usize].transform]; + >::render_mut( + &mut selected_mut, + "Object info", + &ui, + &InspectArgsStruct::default(), + ); + }); + self.object_info_id = id; + self.show_object_info = show_window; + } + if self.show_light_info { + let mut id = self.light_info_id; + let max: i32 = self.lighting_system.point_lights.len() as i32 - 1; + let mut show_window = self.show_light_info; + + Window::new(im_str!("Lights info")) .size([250.0, 250.0], Condition::FirstUseEver) .opened(&mut show_window) .build(&ui, || { @@ -255,8 +262,10 @@ impl Client for ExampleClient { ); } }); - self.light_info_id = id; - self.show_light_info = show_window; + + self.light_info_id = id; + self.show_light_info = show_window; + } } } diff --git a/src/gaia/bg_info.rs b/src/gaia/bg_info.rs deleted file mode 100644 index 663bff1..0000000 --- a/src/gaia/bg_info.rs +++ /dev/null @@ -1,22 +0,0 @@ -use imgui_glfw_rs::imgui; -use imgui_inspect_derive::Inspect; - -#[derive(Inspect, Clone, Copy)] -pub struct BgInfo { - #[inspect_slider(min_value = 0.0, max_value = 1.0)] - pub r: f32, - #[inspect_slider(min_value = 0.0, max_value = 1.0)] - pub g: f32, - #[inspect_slider(min_value = 0.0, max_value = 1.0)] - pub b: f32, -} - -impl Default for BgInfo { - fn default() -> Self { - BgInfo { - r: 0.1, - g: 0.2, - b: 0.4, - } - } -} diff --git a/src/gaia/camera.rs b/src/gaia/camera.rs index 4264200..a1ff1f6 100644 --- a/src/gaia/camera.rs +++ b/src/gaia/camera.rs @@ -1,10 +1,13 @@ #![allow(dead_code)] +#[cfg(feature = "imgui_inspect")] use crate::gaia::imgui_helper::*; use cgmath; use cgmath::prelude::*; use cgmath::vec3; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::imgui; +#[cfg(feature = "imgui_inspect")] use imgui_inspect_derive::Inspect; type Point3 = cgmath::Point3; @@ -28,18 +31,19 @@ const SPEED: f32 = 4.5; const SENSITIVTY: f32 = 0.1; const ZOOM: f32 = 45.0; -#[derive(Inspect, Debug, Clone, Copy)] +#[derive(Clone, Copy, Debug)] +#[cfg_attr(feature = "imgui_inspect", derive(Inspect))] pub struct Camera { // Camera Attributes - #[inspect(proxy_type = "CgmathPoint3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathPoint3f32"))] pub position: Point3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub front: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub up: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub right: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub worldup: Vector3, // Euler Angles pub yaw: f32, diff --git a/src/gaia/client.rs b/src/gaia/client.rs index 9b957b9..994c859 100644 --- a/src/gaia/client.rs +++ b/src/gaia/client.rs @@ -1,5 +1,8 @@ use crate::gaia::assets_cache::AssetsCache; use crate::gaia::engine::Engine; +#[cfg(feature = "no_imgui")] +use glfw; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::glfw; pub trait Client { @@ -10,5 +13,6 @@ pub trait Client { fn on_mouse_move(&mut self, x: f32, y: f32); // fn draw(&mut self, engine: &mut Engine) where T: Client; unsafe fn draw(&mut self); + #[cfg(feature = "imgui_inspect")] fn debug_draw(&mut self, ui: &imgui_glfw_rs::imgui::Ui); } diff --git a/src/gaia/components.rs b/src/gaia/components.rs index f497ff2..9885722 100644 --- a/src/gaia/components.rs +++ b/src/gaia/components.rs @@ -1,15 +1,19 @@ +#[cfg(feature = "imgui_inspect")] use crate::gaia::imgui_helper::*; use crate::gaia::model::Model; use crate::gaia::shader::Shader; use cgmath::{vec3, Matrix4, Rad, Vector3}; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::imgui; +#[cfg(feature = "imgui_inspect")] use imgui_inspect_derive::Inspect; -#[derive(Inspect, Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug)] +#[cfg_attr(feature = "imgui_inspect", derive(Inspect))] pub struct Transform { - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub position: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub rotation: Vector3, pub scale: f32, } diff --git a/src/gaia/engine.rs b/src/gaia/engine.rs index 46a433e..717a5e8 100644 --- a/src/gaia/engine.rs +++ b/src/gaia/engine.rs @@ -1,25 +1,32 @@ use crate::example_client::ExampleClient; use crate::gaia::assets_cache::AssetsCache; -use crate::gaia::bg_info::BgInfo; use crate::gaia::camera::*; use crate::gaia::client::Client; use crate::gaia::consts; use crate::gaia::framebuffer::FramebufferSystem; use cgmath::Point3; +#[cfg(feature = "no_imgui")] +use glfw; +use glfw::{Action, Context, Key}; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::glfw; -use imgui_glfw_rs::glfw::{Action, Context, Key}; +#[cfg(feature = "imgui_inspect")] +use imgui_glfw_rs::glfw; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::imgui; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::ImguiGLFW; use log::{info, trace, warn}; pub struct Engine { pub camera: Camera, - pub bg_info: BgInfo, - pub window: imgui_glfw_rs::glfw::Window, + pub window: glfw::Window, pub window_size: (f32, f32), - pub events: std::sync::mpsc::Receiver<(f64, imgui_glfw_rs::glfw::WindowEvent)>, - pub glfw: imgui_glfw_rs::glfw::Glfw, + pub events: std::sync::mpsc::Receiver<(f64, glfw::WindowEvent)>, + pub glfw: glfw::Glfw, + #[cfg(feature = "imgui_inspect")] pub imgui: imgui::Context, + #[cfg(feature = "imgui_inspect")] pub imgui_glfw: ImguiGLFW, pub client: Box, enable_debug_layer: bool, @@ -48,8 +55,11 @@ impl Engine { // input // ----- + #[cfg(feature = "imgui_inspect")] let skip_input = self.imgui.io().want_capture_mouse || self.imgui.io().want_capture_keyboard; + #[cfg(feature = "no_imgui")] + let skip_input = false; if !skip_input { self.process_input(delta_time); } @@ -65,6 +75,7 @@ impl Engine { // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.) // ------------------------------------------------------------------------------- + #[cfg(feature = "imgui_inspect")] if self.enable_debug_layer { let ui = self.imgui_glfw.frame(&mut self.window, &mut self.imgui); self.client.debug_draw(&ui); @@ -150,7 +161,9 @@ impl Engine { skip_input: bool, ) { for (_, event) in glfw::flush_messages(&self.events) { + #[cfg(feature = "imgui_inspect")] self.imgui_glfw.handle_event(&mut self.imgui, &event); + match event { glfw::WindowEvent::FramebufferSize(width, height) => { // make sure the viewport matches the new window dimensions; note that width and @@ -225,7 +238,9 @@ impl Default for Engine { // --------------------------------------- gl::load_with(|symbol| window.get_proc_address(symbol) as *const _); + #[cfg(feature = "imgui_inspect")] let mut imgui = imgui::Context::create(); + #[cfg(feature = "imgui_inspect")] { use imgui_glfw_rs::imgui::FontSource; use imgui_glfw_rs::imgui::StyleColor; @@ -290,6 +305,7 @@ impl Default for Engine { config: None, }]); } + #[cfg(feature = "imgui_inspect")] let imgui_glfw = ImguiGLFW::new(&mut imgui, &mut window); // configure global opengl state // ----------------------------- @@ -301,12 +317,13 @@ impl Default for Engine { let fb = unsafe { FramebufferSystem::generate(scr_width, scr_height) }; Engine { - bg_info: BgInfo::default(), window: window, window_size: (consts::SCR_WIDTH as f32, consts::SCR_HEIGHT as f32), events: events, glfw: glfw, + #[cfg(feature = "imgui_inspect")] imgui: imgui, + #[cfg(feature = "imgui_inspect")] imgui_glfw: imgui_glfw, framebuffer: fb, camera: Camera { diff --git a/src/gaia/light.rs b/src/gaia/light.rs index 0ee1b18..19a5158 100644 --- a/src/gaia/light.rs +++ b/src/gaia/light.rs @@ -1,18 +1,22 @@ +#[cfg(feature = "imgui_inspect")] use crate::gaia::imgui_helper::*; use crate::gaia::shader::Shader; use cgmath::{perspective, vec3, Deg, Matrix4, Point3, Vector3}; +#[cfg(feature = "imgui_inspect")] use imgui_glfw_rs::imgui; +#[cfg(feature = "imgui_inspect")] use imgui_inspect_derive::Inspect; -#[derive(Inspect, Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug)] +#[cfg_attr(feature = "imgui_inspect", derive(Inspect))] pub struct PointLight { - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub pos: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub ambient: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub diffuse: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub specular: Vector3, pub constant: f32, pub linear: f32, @@ -79,15 +83,16 @@ impl Default for PointLight { } } -#[derive(Inspect, Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug)] +#[cfg_attr(feature = "imgui_inspect", derive(Inspect))] pub struct DirectionalLight { - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub direction: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub ambient: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub diffuse: Vector3, - #[inspect(proxy_type = "CgmathVec3f32")] + #[cfg_attr(feature = "imgui_inspect", inspect(proxy_type = "CgmathVec3f32"))] pub specular: Vector3, } diff --git a/src/gaia/mod.rs b/src/gaia/mod.rs index bf281be..64bafa0 100644 --- a/src/gaia/mod.rs +++ b/src/gaia/mod.rs @@ -1,13 +1,13 @@ pub mod macros; pub mod assets_cache; -pub mod bg_info; pub mod camera; pub mod client; pub mod components; pub mod consts; pub mod engine; pub mod framebuffer; +#[cfg(feature = "imgui_inspect")] pub mod imgui_helper; pub mod light; pub mod mesh; diff --git a/src/main.rs b/src/main.rs index a8b4560..9faf00d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] extern crate gl; + +#[cfg(feature = "imgui_inspect")] extern crate imgui_glfw_rs; extern crate log; extern crate simple_logging; @@ -10,12 +12,12 @@ mod gaia; mod example_client; use crate::gaia::engine::Engine; -use human_panic::setup_panic; +// use human_panic::setup_panic; use log::LevelFilter; use log::{info, trace, warn}; pub fn main() { - setup_panic!(); + // setup_panic!(); simple_logging::log_to_file("log.log", LevelFilter::Info); info!("Starting engine!"); let mut engine = Engine::default();