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,
|
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;
|
||||||
|
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"))
|
Window::new(im_str!("Object info"))
|
||||||
.size([250.0, 250.0], Condition::FirstUseEver)
|
.size([250.0, 250.0], Condition::FirstUseEver)
|
||||||
|
.opened(&mut show_window)
|
||||||
.build(&ui, || {
|
.build(&ui, || {
|
||||||
let mut selected_mut = vec![&mut self.model.transform];
|
let mut selected_mut = vec![&mut self.model.transform];
|
||||||
<Transform as imgui_inspect::InspectRenderStruct<Transform>>::render_mut(
|
<Transform as imgui_inspect::InspectRenderStruct<Transform>>::render_mut(
|
||||||
&mut selected_mut,
|
&mut selected_mut,
|
||||||
"Example Struct - Writable",
|
"Object info",
|
||||||
&ui,
|
&ui,
|
||||||
&InspectArgsStruct::default(),
|
&InspectArgsStruct::default(),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
self.show_object_info = show_window;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_mouse_scroll(&mut self, yoffset: f32) {
|
fn on_mouse_scroll(&mut self, yoffset: f32) {
|
||||||
|
|
|
||||||
|
|
@ -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.)
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if self.enable_debug_layer {
|
||||||
let ui = self.imgui_glfw.frame(&mut self.window, &mut self.imgui);
|
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()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue