summaryrefslogtreecommitdiff
path: root/bindgen/rust/examples/gui_test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bindgen/rust/examples/gui_test.rs')
-rw-r--r--bindgen/rust/examples/gui_test.rs418
1 files changed, 283 insertions, 135 deletions
diff --git a/bindgen/rust/examples/gui_test.rs b/bindgen/rust/examples/gui_test.rs
index 891b698..ddd8b86 100644
--- a/bindgen/rust/examples/gui_test.rs
+++ b/bindgen/rust/examples/gui_test.rs
@@ -1,135 +1,283 @@
-#![windows_subsystem = "windows"] // to turn off console.
-
-use celeritas::{Frame_Begin, Frame_End};
-use egui::DragValue;
-use egui_overlay::EguiOverlay;
-use egui_render_three_d::ThreeDBackend;
-use egui_render_wgpu::WgpuBackend;
-
-fn main() {
- // use tracing_subscriber::{fmt, prelude::*, EnvFilter};
- // if RUST_LOG is not set, we will use the following filters
- // tracing_subscriber::registry()
- // .with(fmt::layer())
- // .with(
- // EnvFilter::try_from_default_env()
- // .unwrap_or(EnvFilter::new("debug,wgpu=warn,naga=warn")),
- // )
- // .init();
-
- celeritas::egui_utils::start(HelloWorld { frame: 0});
-}
-
-pub struct HelloWorld {
- pub frame: u64,
-}
-impl EguiOverlay for HelloWorld {
- fn gui_run(
- &mut self,
- egui_context: &egui::Context,
- _default_gfx_backend: &mut ThreeDBackend,
- glfw_backend: &mut egui_window_glfw_passthrough::GlfwBackend,
- ) {
- // unsafe {
- // Frame_Begin();
- // Frame_End();
- // }
-
- // just some controls to show how you can use glfw_backend
- egui::Window::new("controls").show(egui_context, |ui| {
- ui.set_width(300.0);
- self.frame += 1;
- ui.label(format!("current frame number: {}", self.frame));
- // sometimes, you want to see the borders to understand where the overlay is.
- let mut borders = glfw_backend.window.is_decorated();
- if ui.checkbox(&mut borders, "window borders").changed() {
- glfw_backend.window.set_decorated(borders);
- }
-
- ui.label(format!(
- "pixels_per_virtual_unit: {}",
- glfw_backend.physical_pixels_per_virtual_unit
- ));
- ui.label(format!("window scale: {}", glfw_backend.scale));
- ui.label(format!("cursor pos x: {}", glfw_backend.cursor_pos[0]));
- ui.label(format!("cursor pos y: {}", glfw_backend.cursor_pos[1]));
-
- ui.label(format!(
- "passthrough: {}",
- glfw_backend.window.is_mouse_passthrough()
- ));
- // how to change size.
- // WARNING: don't use drag value, because window size changing while dragging ui messes things up.
- let mut size = glfw_backend.window_size_logical;
- let mut changed = false;
- ui.horizontal(|ui| {
- ui.label("width: ");
- ui.add_enabled(false, DragValue::new(&mut size[0]));
- if ui.button("inc").clicked() {
- size[0] += 10.0;
- changed = true;
- }
- if ui.button("dec").clicked() {
- size[0] -= 10.0;
- changed = true;
- }
- });
- ui.horizontal(|ui| {
- ui.label("height: ");
- ui.add_enabled(false, DragValue::new(&mut size[1]));
- if ui.button("inc").clicked() {
- size[1] += 10.0;
- changed = true;
- }
- if ui.button("dec").clicked() {
- size[1] -= 10.0;
- changed = true;
- }
- });
- if changed {
- glfw_backend.set_window_size(size);
- }
- // how to change size.
- // WARNING: don't use drag value, because window size changing while dragging ui messes things up.
- let mut pos = glfw_backend.window_position;
- let mut changed = false;
- ui.horizontal(|ui| {
- ui.label("x: ");
- ui.add_enabled(false, DragValue::new(&mut pos[0]));
- if ui.button("inc").clicked() {
- pos[0] += 10;
- changed = true;
- }
- if ui.button("dec").clicked() {
- pos[0] -= 10;
- changed = true;
- }
- });
- ui.horizontal(|ui| {
- ui.label("y: ");
- ui.add_enabled(false, DragValue::new(&mut pos[1]));
- if ui.button("inc").clicked() {
- pos[1] += 10;
- changed = true;
- }
- if ui.button("dec").clicked() {
- pos[1] -= 10;
- changed = true;
- }
- });
- if changed {
- glfw_backend.window.set_pos(pos[0], pos[1]);
- }
- });
-
- // here you decide if you want to be passthrough or not.
- if egui_context.wants_pointer_input() || egui_context.wants_keyboard_input() {
- // we need input, so we need the window to be NOT passthrough
- glfw_backend.set_passthrough(false);
- } else {
- // we don't care about input, so the window can be passthrough now
- glfw_backend.set_passthrough(true)
- }
- egui_context.request_repaint();
- }
-} \ No newline at end of file
+// // #![windows_subsystem = "windows"] // to turn off console.
+
+// use std::ptr;
+// use std::{ffi::CString, ptr::addr_of_mut};
+
+// use celeritas::*;
+// use egui::DragValue;
+// use egui_overlay::{EguiOverlay, OverlayApp};
+// use egui_render_three_d::ThreeDBackend;
+// use egui_window_glfw_passthrough::glfw::Context;
+// use egui_window_glfw_passthrough::{GlfwBackend, GlfwConfig};
+
+// fn main() {
+// // use tracing_subscriber::{fmt, prelude::*, EnvFilter};
+// // if RUST_LOG is not set, we will use the following filters
+// // tracing_subscriber::registry()
+// // .with(fmt::layer())
+// // .with(
+// // EnvFilter::try_from_default_env()
+// // .unwrap_or(EnvFilter::new("debug,wgpu=warn,naga=warn")),
+// // )
+// // .init();
+
+// unsafe {
+// // let p: *mut GLFWwindow = ptr::null_mut();
+// // Core_Bringup(p);
+
+// // let core = get_global_core();
+// // let glfw_window_ptr = Core_GetGlfwWindowPtr(core);
+
+// let mut glfw_backend = GlfwBackend::new(GlfwConfig {
+// // this closure will be called before creating a window
+// glfw_callback: Box::new(|gtx| {
+// // some defualt hints. it is empty atm, but in future we might add some convenience hints to it.
+// (egui_window_glfw_passthrough::GlfwConfig::default().glfw_callback)(gtx);
+// // scale the window size based on monitor scale. as 800x600 looks too small on a 4k screen, compared to a hd screen in absolute pixel sizes.
+// gtx.window_hint(
+// egui_window_glfw_passthrough::glfw::WindowHint::ScaleToMonitor(true),
+// );
+// }),
+// opengl_window: Some(true), // macos doesn't support opengl.
+// transparent_window: Some(false),
+// window_title: "Celeritas egui".into(),
+// ..Default::default()
+// });
+
+// // always on top
+// // glfw_backend.window.set_floating(true);
+// // disable borders/titlebar
+// // glfw_backend.window.set_decorated(false);
+
+// let latest_size = glfw_backend.window.get_framebuffer_size();
+// let latest_size = [latest_size.0 as _, latest_size.1 as _];
+
+// let default_gfx_backend = {
+// ThreeDBackend::new(
+// egui_render_three_d::ThreeDConfig {
+// ..Default::default()
+// },
+// |s| glfw_backend.get_proc_address(s),
+// latest_size,
+// )
+// };
+
+// let glfw_window_ptr = glfw_backend.window.window_ptr();
+// unsafe {
+// // Cast the window pointer to the expected type
+// let window_ptr = glfw_window_ptr as *mut crate::GLFWwindow;
+// Core_Bringup(window_ptr);
+// };
+
+// // cam pos: 18.871811 10.658584 11.643305 cam frontL -0.644326 -0.209243 -0.735569
+// let camera_pos = Vec3 {
+// x: 18.9,
+// y: 10.6,
+// z: 11.6,
+// };
+// let camera_front = Vec3 {
+// x: -0.6,
+// y: -0.2,
+// z: -0.7,
+// };
+// let camera = Camera_Create(
+// camera_pos,
+// camera_front,
+// Vec3 {
+// x: 0.0,
+// y: 1.0,
+// z: 0.0,
+// },
+// 45.0,
+// );
+// SetCamera(camera);
+
+// let mut cube_geo = Geo_CreateCuboid(f32x3 {
+// x: 2.0,
+// y: 2.0,
+// z: 2.0,
+// });
+// let mut crate_mesh = Mesh_Create(addr_of_mut!(cube_geo), false);
+// let albedo_map = TextureLoadFromFile(
+// CString::new("assets/demo/crate/Wood_Crate_001_basecolor.jpg")
+// .unwrap()
+// .as_ptr() as *const i8,
+// );
+// let roughness_map = TextureLoadFromFile(
+// CString::new("assets/demo/crate/Wood_Crate_001_roughness.jpg")
+// .unwrap()
+// .as_ptr() as *const i8,
+// );
+// let normal_map = TextureLoadFromFile(
+// CString::new("assets/demo/crate/Wood_Crate_001_normal.jpg")
+// .unwrap()
+// .as_ptr() as *const i8,
+// );
+// let ao_map = TextureLoadFromFile(
+// CString::new("assets/demo/crate/Wood_Crate_001_ambientOcclusion.jpg")
+// .unwrap()
+// .as_ptr() as *const i8,
+// );
+// let name: [i8; 64] = [0; 64];
+// let mut crate_mat = Material {
+// name: name,
+// kind: 0,
+// param_albedo: Vec3 {
+// x: 0.0,
+// y: 0.0,
+// z: 0.0,
+// },
+// param_metallic: 0.0,
+// param_roughness: 0.0,
+// param_ao: 0.0,
+// pbr_albedo_map: albedo_map,
+// pbr_normal_map: normal_map,
+// metal_roughness_combined: true,
+// pbr_metallic_map: TextureHandle { raw: 99999 },
+// pbr_roughness_map: roughness_map,
+// pbr_ao_map: ao_map,
+// };
+// let crate_renderent = RenderEnt {
+// mesh: addr_of_mut!(crate_mesh),
+// material: addr_of_mut!(crate_mat),
+// affine: mat4_ident(),
+// casts_shadows: true,
+// };
+// let mut render_ents: [RenderEnt; 1] = [crate_renderent];
+
+// let world_state = HelloWorld {
+// frame: 0,
+// render_entities: render_ents,
+// };
+
+// let overlap_app = OverlayApp {
+// user_data: world_state,
+// egui_context: Default::default(),
+// default_gfx_backend,
+// glfw_backend,
+// };
+
+// overlap_app.enter_event_loop();
+
+// // celeritas::egui_utils::start(HelloWorld { frame: 0});
+// }
+// }
+
+// pub struct HelloWorld {
+// pub frame: u64,
+// pub render_entities: [RenderEnt; 1],
+// }
+// impl EguiOverlay for HelloWorld {
+// fn gui_run(
+// &mut self,
+// egui_context: &egui::Context,
+// _default_gfx_backend: &mut ThreeDBackend,
+// glfw_backend: &mut egui_window_glfw_passthrough::GlfwBackend,
+// ) {
+// unsafe {
+// // Frame_Begin();
+// // Render_RenderEntities(
+// // self.render_entities.as_mut_ptr(),
+// // self.render_entities.len(),
+// // );
+// // Frame_End();
+// }
+
+// // just some controls to show how you can use glfw_backend
+// egui::Window::new("controls").show(egui_context, |ui| {
+// ui.set_width(300.0);
+// self.frame += 1;
+// ui.label(format!("current frame number: {}", self.frame));
+// // sometimes, you want to see the borders to understand where the overlay is.
+// let mut borders = glfw_backend.window.is_decorated();
+// if ui.checkbox(&mut borders, "window borders").changed() {
+// glfw_backend.window.set_decorated(borders);
+// }
+
+// ui.label(format!(
+// "pixels_per_virtual_unit: {}",
+// glfw_backend.physical_pixels_per_virtual_unit
+// ));
+// ui.label(format!("window scale: {}", glfw_backend.scale));
+// ui.label(format!("cursor pos x: {}", glfw_backend.cursor_pos[0]));
+// ui.label(format!("cursor pos y: {}", glfw_backend.cursor_pos[1]));
+
+// ui.label(format!(
+// "passthrough: {}",
+// glfw_backend.window.is_mouse_passthrough()
+// ));
+// // how to change size.
+// // WARNING: don't use drag value, because window size changing while dragging ui messes things up.
+// let mut size = glfw_backend.window_size_logical;
+// let mut changed = false;
+// ui.horizontal(|ui| {
+// ui.label("width: ");
+// ui.add_enabled(false, DragValue::new(&mut size[0]));
+// if ui.button("inc").clicked() {
+// size[0] += 10.0;
+// changed = true;
+// }
+// if ui.button("dec").clicked() {
+// size[0] -= 10.0;
+// changed = true;
+// }
+// });
+// ui.horizontal(|ui| {
+// ui.label("height: ");
+// ui.add_enabled(false, DragValue::new(&mut size[1]));
+// if ui.button("inc").clicked() {
+// size[1] += 10.0;
+// changed = true;
+// }
+// if ui.button("dec").clicked() {
+// size[1] -= 10.0;
+// changed = true;
+// }
+// });
+// if changed {
+// glfw_backend.set_window_size(size);
+// }
+// // how to change size.
+// // WARNING: don't use drag value, because window size changing while dragging ui messes things up.
+// let mut pos = glfw_backend.window_position;
+// let mut changed = false;
+// ui.horizontal(|ui| {
+// ui.label("x: ");
+// ui.add_enabled(false, DragValue::new(&mut pos[0]));
+// if ui.button("inc").clicked() {
+// pos[0] += 10;
+// changed = true;
+// }
+// if ui.button("dec").clicked() {
+// pos[0] -= 10;
+// changed = true;
+// }
+// });
+// ui.horizontal(|ui| {
+// ui.label("y: ");
+// ui.add_enabled(false, DragValue::new(&mut pos[1]));
+// if ui.button("inc").clicked() {
+// pos[1] += 10;
+// changed = true;
+// }
+// if ui.button("dec").clicked() {
+// pos[1] -= 10;
+// changed = true;
+// }
+// });
+// if changed {
+// glfw_backend.window.set_pos(pos[0], pos[1]);
+// }
+// });
+
+// // here you decide if you want to be passthrough or not.
+// if egui_context.wants_pointer_input() || egui_context.wants_keyboard_input() {
+// // we need input, so we need the window to be NOT passthrough
+// glfw_backend.set_passthrough(false);
+// } else {
+// // we don't care about input, so the window can be passthrough now
+// glfw_backend.set_passthrough(true)
+// }
+// egui_context.request_repaint();
+// }
+// }