From 6fb6e433fbb3b402ddb36e0bdfd64d7681b90fe1 Mon Sep 17 00:00:00 2001 From: mitchellhansen Date: Sun, 14 Feb 2021 22:33:38 -0800 Subject: [PATCH] renders great. need to 2 step it so I can render in the other systems, and figure out how to get winit events into the system. bleh --- src/main.rs | 5 ++- src/owned_event.rs | 12 ++++++- src/render.rs | 79 +++++++++++++++++++++------------------------- 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4e23352..4de8a2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -143,9 +143,8 @@ fn main() { let mut imgui_platform = ImguiPlatform { platform: platform, }; - let font_size = 10.0 as f32; - imgui_context.context.io_mut().font_global_scale = 10.0 as f32; - + let font_size = 20.0 as f32; + imgui_context.context.io_mut().font_global_scale = 1.0 as f32; imgui_context.context.fonts().add_font(&[FontSource::DefaultFontData { config: Some(imgui::FontConfig { oversample_h: 1, diff --git a/src/owned_event.rs b/src/owned_event.rs index 4fcd018..63c9f8b 100644 --- a/src/owned_event.rs +++ b/src/owned_event.rs @@ -9,10 +9,12 @@ use winit::event::{ AxisId, DeviceEvent, DeviceId, ElementState, Event, KeyboardInput, ModifiersState, MouseButton, MouseScrollDelta, StartCause, Touch, TouchPhase, WindowEvent, }; -use winit::window::{Theme, WindowId}; +use winit::window::{Theme, WindowId, Window}; use crate::camera::{Camera, CameraController}; use crate::owned_event::OwnedWindowEvent::MouseWheel; +use crate::{ImguiPlatform, ImguiContext}; +use std::sync::{Mutex, Arc}; #[derive(Clone)] pub enum OwnedUIEvent { @@ -244,10 +246,14 @@ pub enum OwnedWindowEvent { pub fn event_dispatch( world: &mut SubWorld, #[resource] event_stack: &mut Vec>, + #[resource] imgui_context: &mut Arc>, + #[resource] imgui_platform: &mut Arc>, + #[resource] winit_window: &mut Window, ) { use winit::event::Event::DeviceEvent; for event in event_stack { + match event { OwnedEvent::DeviceEvent { event: winit::event::DeviceEvent::MouseMotion { delta }, @@ -288,5 +294,9 @@ pub fn event_dispatch( } _ => {} } + let mut imgui_context = &mut imgui_context.lock().unwrap().context; + let mut imgui_platform = &mut imgui_platform.lock().unwrap().platform; + + imgui_platform.handle_event(imgui_context.io_mut(), &winit_window, &event.into()); } } diff --git a/src/render.rs b/src/render.rs index ca0f6d4..ea341f0 100644 --- a/src/render.rs +++ b/src/render.rs @@ -246,50 +246,43 @@ pub fn render_test( { - // let mut imgui_context = &mut imgui_context.lock().unwrap().context; - // let mut imgui_platform = &mut imgui_platform.lock().unwrap().platform; - // - // //imgui_state.context.io_mut().update_delta_time(Duration::new(0,160)); - // imgui_platform - // .prepare_frame(imgui_context.io_mut(), &winit_window) - // .expect("Failed to prepare frame"); - // - // // get the frame and build a ui window - // let ui = imgui_context.frame(); - // let window = imgui::Window::new(im_str!("Hello too")); - // window - // .size([400.0, 200.0], Condition::FirstUseEver) - // .position([400.0, 200.0], Condition::FirstUseEver) - // .build(&ui, || { - // ui.text(im_str!("Frametime: {:?}", 10.0)); - // }); - // - // - // //ui.show_demo_window(&mut demo_open); - // imgui_platform.prepare_render(&ui, &winit_window); - // - // let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - // label: None, - // color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor { - // attachment: &frame.output.view, - // resolve_target: None, - // ops: wgpu::Operations { - // load: wgpu::LoadOp::Clear(wgpu::Color { - // r: 0.1, - // g: 0.2, - // b: 0.3, - // a: 1.0, - // }), - // store: true, - // }, - // }], - // depth_stencil_attachment: None, - // }); - // renderer.imgui_renderer - // .render(ui.render(), &renderer.queue, &renderer.device, &mut rpass) - // .expect("Rendering failed"); - // + let mut imgui_context = &mut imgui_context.lock().unwrap().context; + let mut imgui_platform = &mut imgui_platform.lock().unwrap().platform; + + //imgui_state.context.io_mut().update_delta_time(Duration::new(0,160)); + imgui_platform + .prepare_frame(imgui_context.io_mut(), &winit_window) + .expect("Failed to prepare frame"); + + // get the frame and build a ui window + let ui = imgui_context.frame(); + let window = imgui::Window::new(im_str!("Hello too")); + window + .size([400.0, 100.0], Condition::FirstUseEver) + .position([50.0, 50.0], Condition::FirstUseEver) + .build(&ui, || { + ui.text(im_str!("Frametime: {:?}", 10.0)); + }); + + + //ui.show_demo_window(&mut demo_open); + imgui_platform.prepare_render(&ui, &winit_window); + let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: None, + color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor { + attachment: &frame.output.view, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Load, + store: true, + }, + }], + depth_stencil_attachment: None, + }); + renderer.imgui_renderer + .render(ui.render(), &renderer.queue, &renderer.device, &mut rpass) + .expect("Rendering failed"); }