messing around with imgui

ObjectDef
Milk.H 2023-03-16 09:07:12 +01:00
parent f2bb21e569
commit 452d1cb1ea
No known key found for this signature in database
GPG Key ID: 3D9DAE46AAC37BD8
1 changed files with 105 additions and 44 deletions

View File

@ -8,7 +8,10 @@ const SCR_WIDTH: u32 = 1600;
const SCR_HEIGHT: u32 = 900; const SCR_HEIGHT: u32 = 900;
const TITLE: &str = "GLFWtest"; const TITLE: &str = "GLFWtest";
enum gameState {
Paused,
Playing
}
use imgui_glow_renderer::AutoRenderer; use imgui_glow_renderer::AutoRenderer;
@ -59,6 +62,7 @@ fn main() {
Ok(ret) => ret, Ok(ret) => ret,
Err(s) => panic!("Error with Initializing SDL Context: {}", s) Err(s) => panic!("Error with Initializing SDL Context: {}", s)
}; };
let gl = std::sync::Arc::new(unsafe{glow::Context::from_loader_function(|s| video.gl_get_proc_address(s) as *const _)}); let gl = std::sync::Arc::new(unsafe{glow::Context::from_loader_function(|s| video.gl_get_proc_address(s) as *const _)});
let event_loop = match sdl.event_pump() let event_loop = match sdl.event_pump()
@ -113,70 +117,127 @@ fn main() {
}; };
let mut State = gameState::Playing;
let time = std::time::Instant::now(); let time = std::time::Instant::now();
let mut spinSpeed = 1.0; let mut spinSpeed = 1.0;
let mut current_rad = 1.0; let mut current_rad = 1.0;
let projection: Matrix4<f32> = perspective(Deg(45.0), SCR_WIDTH as f32/ SCR_HEIGHT as f32, 0.1, 100.0); let projection: Matrix4<f32> = perspective(Deg(45.0), SCR_WIDTH as f32/ SCR_HEIGHT as f32, 0.1, 100.0);
println!("entering main loop"); println!("entering main loop");
// NOTE main loop here // NOTE main loop here
'running: loop {
let currentFrame = time.elapsed().as_secs_f32();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
current_rad += spinSpeed/15.0;
unsafe{ 'main: loop {
gl.enable(glow::DEPTH_TEST); match &State {
gl.clear(glow::COLOR_BUFFER_BIT | glow::DEPTH_BUFFER_BIT); gameState::Playing => {
let currentFrame = time.elapsed().as_secs_f32();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
current_rad += spinSpeed/15.0;
ourshader.Use(); unsafe{
let Projection: Matrix4<f32> = perspective(Deg(camera.Zoom), SCR_WIDTH as f32 / SCR_HEIGHT as f32, 0.1, 100.0); gl.enable(glow::DEPTH_TEST);
gl.clear(glow::COLOR_BUFFER_BIT | glow::DEPTH_BUFFER_BIT);
let view = camera.GetViewMatrix(); ourshader.Use();
ourshader.setMat4("projection", &projection); let Projection: Matrix4<f32> = perspective(Deg(camera.Zoom), SCR_WIDTH as f32 / SCR_HEIGHT as f32, 0.1, 100.0);
ourshader.setMat4("view", &view);
let view = camera.GetViewMatrix();
ourshader.setMat4("projection", &projection);
ourshader.setMat4("view", &view);
let mut model: Matrix4<f32> = Matrix4::from_axis_angle(vec3(0.0, -1.0, 0.0).normalize(), let mut model: Matrix4<f32> = Matrix4::from_axis_angle(vec3(0.0, -1.0, 0.0).normalize(),
cgmath::Rad(current_rad)); cgmath::Rad(current_rad));
model = model * Matrix4::from_scale(0.2); model = model * Matrix4::from_scale(0.2);
ourshader.setMat4("model", &model); ourshader.setMat4("model", &model);
}
ourModel.Draw(&ourshader);
platform.prepare_frame(&mut imgui, &window, &events_loop);
let ui = imgui.new_frame();
ui.window("POLY I WILL FUCKING")
.size([500.0, 100.0], imgui::Condition::FirstUseEver)
.build(|| {
ui.text("you serve no purpose in life");
ui.text("Your Purpose in life is to suck my dick");
ui.slider("The Spin Speed", 0.1, 10.0, &mut spinSpeed);
});
drawDebugUI(ui, &ourModel);
let draw_data = imgui.render();
renderer.render(draw_data).unwrap();
window.gl_swap_window();
for event in events_loop.poll_iter() {
platform.handle_event(&mut imgui, &event);
match event {
Event::Quit {..} |
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
break 'main
},
Event::KeyDown {keycode: Some(Keycode::P), ..} => {
State = gameState::Paused;
}
_ => {}
}
}
} }
ourModel.Draw(&ourshader);
platform.prepare_frame(&mut imgui, &window, &events_loop); gameState::Paused => {
let ui = imgui.new_frame();
ui.window("POLY I WILL FUCKING") for event in events_loop.poll_iter() {
.size([500.0, 100.0], imgui::Condition::FirstUseEver) platform.handle_event(&mut imgui, &event);
.build(|| {
ui.text("you serve no purpose in life");
ui.text("Your Purpose in life is to suck my dick");
ui.slider("The Spin Speed", 0.1, 10.0, &mut spinSpeed);
});
let draw_data = imgui.render(); match event {
Event::KeyDown {keycode: Some(Keycode::P), ..} => {
renderer.render(draw_data).unwrap(); State = gameState::Playing;
}
_ => {}
}
window.gl_swap_window(); }
for event in events_loop.poll_iter() {
platform.handle_event(&mut imgui, &event);
match event {
Event::Quit {..} |
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
break 'running
},
_ => {}
} }
} }
} }
} }
fn drawDebugUI(ui: &imgui::Ui, model: &model::Model) {
ui.window("Stats")
.size([300.0,500.0], imgui::Condition::Always)
.build(|| {
ui.text("Model Information");
ui.separator();
ui.text(format!("count meshes: {}", model.meshes.len()));
for i in 0..model.meshes.len()
{
ui.text(format!("Mesh Number: {}",i ));
ui.text(format!("count vertices: {}", model.meshes[i].vertices.len()));
ui.separator();
}
});
}