mirror of https://github.com/Leinnan/doppler.git
Debug layer
This commit is contained in:
parent
97a6a2d048
commit
33f06bcd82
|
|
@ -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];
|
||||
<Transform as imgui_inspect::InspectRenderStruct<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];
|
||||
<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) {
|
||||
|
|
|
|||
|
|
@ -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.)
|
||||
// -------------------------------------------------------------------------------
|
||||
|
||||
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];
|
||||
<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()),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue