Debug layer

This commit is contained in:
Piotr 2020-09-24 17:29:15 +02:00
parent 97a6a2d048
commit 33f06bcd82
2 changed files with 74 additions and 37 deletions

View File

@ -11,6 +11,7 @@ pub struct ExampleClient {
model: ModelComponent, model: ModelComponent,
camera: Camera, camera: Camera,
shader: shader::Shader, shader: shader::Shader,
show_object_info: bool,
} }
impl ExampleClient { impl ExampleClient {
@ -23,6 +24,7 @@ impl ExampleClient {
model: model::Model::new("resources/objects/nanosuit/nanosuit.obj"), model: model::Model::new("resources/objects/nanosuit/nanosuit.obj"),
}; };
ExampleClient { ExampleClient {
show_object_info: true,
model: model, model: model,
camera: Camera { camera: Camera {
position: Point3::new(0.0, 0.0, 3.0), 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) { fn debug_draw(&mut self, ui: &imgui_glfw_rs::imgui::Ui) {
use imgui_glfw_rs::imgui::*; use imgui_glfw_rs::imgui::*;
use imgui_inspect::InspectArgsStruct; use imgui_inspect::InspectArgsStruct;
Window::new(im_str!("Object info")) if let Some(menu_bar) = ui.begin_main_menu_bar() {
.size([250.0, 250.0], Condition::FirstUseEver) if let Some(menu) = ui.begin_menu(im_str!("Basic"), true) {
.build(&ui, || { if MenuItem::new(im_str!("Show Object info"))
let mut selected_mut = vec![&mut self.model.transform]; .selected(self.show_object_info)
<Transform as imgui_inspect::InspectRenderStruct<Transform>>::render_mut( .build(ui)
&mut selected_mut, {
"Example Struct - Writable", self.show_object_info = !self.show_object_info;
&ui, }
&InspectArgsStruct::default(), 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];
<Transform as imgui_inspect::InspectRenderStruct<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) { fn on_mouse_scroll(&mut self, yoffset: f32) {

View File

@ -20,6 +20,7 @@ pub struct Engine {
pub imgui: imgui::Context, pub imgui: imgui::Context,
pub imgui_glfw: ImguiGLFW, pub imgui_glfw: ImguiGLFW,
pub client: Box<dyn Client>, pub client: Box<dyn Client>,
enable_debug_layer: bool,
} }
impl Engine { impl Engine {
@ -60,40 +61,31 @@ impl Engine {
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.) // 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); self.client.debug_draw(&ui);
use imgui::*; use imgui::*;
let fps = 1.0 / delta_time; let fps = 1.0 / delta_time;
let mut info = self.bg_info; let size = [280.0, 110.0];
Window::new(im_str!("Hello world")) let offset = 20.0;
.size([300.0, 110.0], Condition::FirstUseEver) 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, || { .build(&ui, || {
ui.text(im_str!("Hello world!")); ui.text(im_str!("Hello Rust!"));
ui.text(format!("{:.0}", fps)); ui.text(format!("FPS: {:.0}", fps));
ui.text(im_str!("This...is...imgui-rs!"));
ui.separator(); ui.separator();
ui.text(format!("Mouse position: ({:.1},{:.1})", last_x, last_y)); ui.text(format!("Mouse position: ({:4.1},{:4.1})", last_x, last_y));
let selected = vec![&info];
<BgInfo as imgui_inspect::InspectRenderStruct<BgInfo>>::render(
&selected,
"Example Struct - Read Only",
&ui,
&InspectArgsStruct::default(),
);
let mut selected_mut = vec![&mut info];
<BgInfo as imgui_inspect::InspectRenderStruct<BgInfo>>::render_mut(
&mut selected_mut,
"Example Struct - Writable",
&ui,
&InspectArgsStruct::default(),
);
}); });
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.window.swap_buffers();
self.glfw.poll_events(); self.glfw.poll_events();
// events // events
@ -106,6 +98,11 @@ impl Engine {
if self.window.get_key(Key::Escape) == Action::Press { if self.window.get_key(Key::Escape) == Action::Press {
self.window.set_should_close(true) 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); 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), position: Point3::new(0.0, 0.0, 3.0),
..Camera::default() ..Camera::default()
}, },
enable_debug_layer: true,
client: Box::new(ExampleClient::create()), client: Box::new(ExampleClient::create()),
} }
} }