From 33f06bcd82157862971ee1f5b38c2507b0e86aa2 Mon Sep 17 00:00:00 2001 From: Piotr Date: Thu, 24 Sep 2020 17:29:15 +0200 Subject: [PATCH] Debug layer --- src/example_client.rs | 61 +++++++++++++++++++++++++++++++++++-------- src/gaia/engine.rs | 50 +++++++++++++++++------------------ 2 files changed, 74 insertions(+), 37 deletions(-) diff --git a/src/example_client.rs b/src/example_client.rs index 709f455..2302560 100644 --- a/src/example_client.rs +++ b/src/example_client.rs @@ -11,6 +11,7 @@ pub struct ExampleClient { model: ModelComponent, camera: Camera, shader: shader::Shader, + show_object_info: bool, } impl ExampleClient { @@ -23,6 +24,7 @@ impl ExampleClient { model: model::Model::new("resources/objects/nanosuit/nanosuit.obj"), }; ExampleClient { + show_object_info: true, model: model, camera: Camera { position: Point3::new(0.0, 0.0, 3.0), @@ -77,17 +79,54 @@ impl Client for ExampleClient { fn debug_draw(&mut self, ui: &imgui_glfw_rs::imgui::Ui) { use imgui_glfw_rs::imgui::*; use imgui_inspect::InspectArgsStruct; - Window::new(im_str!("Object info")) - .size([250.0, 250.0], Condition::FirstUseEver) - .build(&ui, || { - let mut selected_mut = vec![&mut self.model.transform]; - >::render_mut( - &mut selected_mut, - "Example Struct - Writable", - &ui, - &InspectArgsStruct::default(), - ); - }); + 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")) + .selected(self.show_object_info) + .build(ui) + { + self.show_object_info = !self.show_object_info; + } + menu.end(ui); + } + if let Some(menu) = ui.begin_menu(im_str!("Edit"), true) { + MenuItem::new(im_str!("Undo")) + .shortcut(im_str!("CTRL+Z")) + .build(ui); + MenuItem::new(im_str!("Redo")) + .shortcut(im_str!("CTRL+Y")) + .enabled(false) + .build(ui); + ui.separator(); + MenuItem::new(im_str!("Cut")) + .shortcut(im_str!("CTRL+X")) + .build(ui); + MenuItem::new(im_str!("Copy")) + .shortcut(im_str!("CTRL+C")) + .build(ui); + MenuItem::new(im_str!("Paste")) + .shortcut(im_str!("CTRL+V")) + .build(ui); + menu.end(ui); + } + menu_bar.end(ui); + } + if self.show_object_info { + 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, || { + let mut selected_mut = vec![&mut self.model.transform]; + >::render_mut( + &mut selected_mut, + "Object info", + &ui, + &InspectArgsStruct::default(), + ); + }); + self.show_object_info = show_window; + } } fn on_mouse_scroll(&mut self, yoffset: f32) { diff --git a/src/gaia/engine.rs b/src/gaia/engine.rs index 59a160e..9377e29 100644 --- a/src/gaia/engine.rs +++ b/src/gaia/engine.rs @@ -20,6 +20,7 @@ pub struct Engine { pub imgui: imgui::Context, pub imgui_glfw: ImguiGLFW, pub client: Box, + enable_debug_layer: bool, } impl Engine { @@ -60,40 +61,31 @@ impl Engine { // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.) // ------------------------------------------------------------------------------- - let ui = self.imgui_glfw.frame(&mut self.window, &mut self.imgui); - - { + if self.enable_debug_layer { + let ui = self.imgui_glfw.frame(&mut self.window, &mut self.imgui); self.client.debug_draw(&ui); use imgui::*; let fps = 1.0 / delta_time; - let mut info = self.bg_info; - Window::new(im_str!("Hello world")) - .size([300.0, 110.0], Condition::FirstUseEver) + let size = [280.0, 110.0]; + let offset = 20.0; + Window::new(im_str!("EngineInfo")) + .size(size, Condition::Always) + .position( + [self.window_size.0 - size[0] - offset, self.window_size.1 - size[1] - offset], + Condition::Always, + ) + .no_decoration() + .no_inputs() + .save_settings(false) .build(&ui, || { - ui.text(im_str!("Hello world!")); - ui.text(format!("{:.0}", fps)); - ui.text(im_str!("This...is...imgui-rs!")); + ui.text(im_str!("Hello Rust!")); + ui.text(format!("FPS: {:.0}", fps)); ui.separator(); - ui.text(format!("Mouse position: ({:.1},{:.1})", last_x, last_y)); - let selected = vec![&info]; - >::render( - &selected, - "Example Struct - Read Only", - &ui, - &InspectArgsStruct::default(), - ); - let mut selected_mut = vec![&mut info]; - >::render_mut( - &mut selected_mut, - "Example Struct - Writable", - &ui, - &InspectArgsStruct::default(), - ); + ui.text(format!("Mouse position: ({:4.1},{:4.1})", last_x, last_y)); }); - self.bg_info = info; + self.imgui_glfw.draw(ui, &mut self.window); } - self.imgui_glfw.draw(ui, &mut self.window); self.window.swap_buffers(); self.glfw.poll_events(); // events @@ -106,6 +98,11 @@ impl Engine { if self.window.get_key(Key::Escape) == Action::Press { self.window.set_should_close(true) } + if self.window.get_key(Key::P) == Action::Press + && self.window.get_key(Key::LeftShift) == Action::Press + { + self.enable_debug_layer = !self.enable_debug_layer; + } self.client.process_input(&self.window, delta_time); } @@ -275,6 +272,7 @@ impl Default for Engine { position: Point3::new(0.0, 0.0, 3.0), ..Camera::default() }, + enable_debug_layer: true, client: Box::new(ExampleClient::create()), } }