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,
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;
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];
<Transform as imgui_inspect::InspectRenderStruct<Transform>>::render_mut(
&mut selected_mut,
"Example Struct - Writable",
"Object info",
&ui,
&InspectArgsStruct::default(),
);
});
self.show_object_info = show_window;
}
}
fn on_mouse_scroll(&mut self, yoffset: f32) {

View File

@ -20,6 +20,7 @@ pub struct Engine {
pub imgui: imgui::Context,
pub imgui_glfw: ImguiGLFW,
pub client: Box<dyn Client>,
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.)
// -------------------------------------------------------------------------------
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];
<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(),
);
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()),
}
}