From 68fec8a870bab9761c35d2422e9d1aaffc762bef Mon Sep 17 00:00:00 2001 From: Joonas Javanainen Date: Sat, 17 Jun 2017 14:23:47 +0300 Subject: [PATCH] Upgrade to gfx 0.16 --- imgui-examples/Cargo.toml | 6 +- imgui-examples/examples/hello_gfx.rs | 51 +---- imgui-examples/examples/support_gfx/mod.rs | 253 ++++++++++++--------- imgui-gfx-renderer/Cargo.toml | 2 +- imgui-sys/Cargo.toml | 2 +- 5 files changed, 157 insertions(+), 157 deletions(-) diff --git a/imgui-examples/Cargo.toml b/imgui-examples/Cargo.toml index ad210fd..b68457d 100644 --- a/imgui-examples/Cargo.toml +++ b/imgui-examples/Cargo.toml @@ -9,10 +9,10 @@ license = "MIT/Apache-2.0" publish = false [dev-dependencies] -gfx = "0.15" -gfx_window_glutin = "0.15" +gfx = "0.16" +gfx_window_glutin = "0.16" glium = { version = "0.16", default-features = true } -glutin = "0.7" +glutin = "0.8" imgui = { version = "0.0.14-pre", path = "../" } imgui-gfx-renderer = { version = "0.0.14-pre", path = "../imgui-gfx-renderer" } imgui-glium-renderer = { version = "0.0.14-pre", path = "../imgui-glium-renderer" } diff --git a/imgui-examples/examples/hello_gfx.rs b/imgui-examples/examples/hello_gfx.rs index adaccc1..d1886de 100644 --- a/imgui-examples/examples/hello_gfx.rs +++ b/imgui-examples/examples/hello_gfx.rs @@ -1,65 +1,18 @@ extern crate gfx; extern crate gfx_window_glutin; extern crate glutin; - #[macro_use] extern crate imgui; extern crate imgui_gfx_renderer; -extern crate imgui_sys; - -use gfx::Device; use imgui::*; -use imgui_gfx_renderer::Renderer; mod support_gfx; const CLEAR_COLOR: [f32; 4] = [1.0, 1.0, 1.0, 1.0]; -pub type ColorFormat = gfx::format::Rgba8; -pub type DepthFormat = gfx::format::DepthStencil; - -pub fn main() { - let mut support = support_gfx::Support::init(); - let builder = glutin::WindowBuilder::new() - .with_title("Hello World (GFX)".to_string()) - .with_dimensions(1024, 768) - .with_vsync(); - let (window, mut device, mut factory, mut main_color, mut main_depth) = - gfx_window_glutin::init::(builder); - let mut encoder: gfx::Encoder<_, _> = factory.create_command_buffer().into(); - let mut renderer = Renderer::init(&mut support.imgui, &mut factory, main_color.clone()) - .expect("Failed to initialize renderer"); - - 'main: loop { - for event in window.poll_events() { - support.update_event(&event); - match event { - glutin::Event::KeyboardInput(_, _, Some(glutin::VirtualKeyCode::Escape)) | - glutin::Event::Closed => break 'main, - glutin::Event::Resized(_width, _height) => { - gfx_window_glutin::update_views(&window, &mut main_color, &mut main_depth); - renderer.update_render_target(main_color.clone()); - } - _ => (), - } - } - - support.update_mouse(); - - let size_points = window.get_inner_size_points().unwrap(); - let size_pixels = window.get_inner_size_pixels().unwrap(); - let ui = support.imgui.frame(size_points, size_pixels, 1.0 / 16.0); - hello_world(&ui); - - encoder.clear(&mut main_color, CLEAR_COLOR); - - renderer.render(ui, &mut factory, &mut encoder) - .expect("Rendering failed"); - encoder.flush(&mut device); - window.swap_buffers().unwrap(); - device.cleanup(); - } +fn main() { + support_gfx::run("hello_gfx.rs".to_owned(), CLEAR_COLOR, hello_world); } fn hello_world<'a>(ui: &Ui<'a>) { diff --git a/imgui-examples/examples/support_gfx/mod.rs b/imgui-examples/examples/support_gfx/mod.rs index 5dcdaf9..6c93f35 100644 --- a/imgui-examples/examples/support_gfx/mod.rs +++ b/imgui-examples/examples/support_gfx/mod.rs @@ -1,114 +1,161 @@ +use gfx; +use gfx::Device; +use gfx_window_glutin; use glutin; -use glutin::{ElementState, Event, MouseButton, MouseScrollDelta, VirtualKeyCode, TouchPhase}; -use imgui::{ImGui, ImGuiKey}; +use glutin::{ElementState, MouseButton, MouseScrollDelta, VirtualKeyCode, TouchPhase, WindowEvent}; +use imgui::{ImGui, Ui, ImGuiKey}; +use imgui_gfx_renderer::Renderer; +use std::time::Instant; -pub struct Support { - pub imgui: ImGui, - mouse_pos: (i32, i32), - mouse_pressed: (bool, bool, bool), - mouse_wheel: f32, +type ColorFormat = gfx::format::Rgba8; +type DepthFormat = gfx::format::DepthStencil; + +#[derive(Copy, Clone, PartialEq, Debug, Default)] +struct MouseState { + pos: (i32, i32), + pressed: (bool, bool, bool), + wheel: f32 } -impl Support { - pub fn init() -> Support { - let mut imgui = ImGui::init(); +pub fn run(title: String, clear_color: [f32; 4], mut run_ui: F) { + let mut imgui = ImGui::init(); - imgui.set_imgui_key(ImGuiKey::Tab, 0); - imgui.set_imgui_key(ImGuiKey::LeftArrow, 1); - imgui.set_imgui_key(ImGuiKey::RightArrow, 2); - imgui.set_imgui_key(ImGuiKey::UpArrow, 3); - imgui.set_imgui_key(ImGuiKey::DownArrow, 4); - imgui.set_imgui_key(ImGuiKey::PageUp, 5); - imgui.set_imgui_key(ImGuiKey::PageDown, 6); - imgui.set_imgui_key(ImGuiKey::Home, 7); - imgui.set_imgui_key(ImGuiKey::End, 8); - imgui.set_imgui_key(ImGuiKey::Delete, 9); - imgui.set_imgui_key(ImGuiKey::Backspace, 10); - imgui.set_imgui_key(ImGuiKey::Enter, 11); - imgui.set_imgui_key(ImGuiKey::Escape, 12); - imgui.set_imgui_key(ImGuiKey::A, 13); - imgui.set_imgui_key(ImGuiKey::C, 14); - imgui.set_imgui_key(ImGuiKey::V, 15); - imgui.set_imgui_key(ImGuiKey::X, 16); - imgui.set_imgui_key(ImGuiKey::Y, 17); - imgui.set_imgui_key(ImGuiKey::Z, 18); + let events_loop = glutin::EventsLoop::new(); + let builder = glutin::WindowBuilder::new() + .with_title(title) + .with_dimensions(1024, 768) + .with_vsync(); + let (window, mut device, mut factory, mut main_color, mut main_depth) = + gfx_window_glutin::init::(builder, &events_loop); + let mut encoder: gfx::Encoder<_, _> = factory.create_command_buffer().into(); + let mut renderer = Renderer::init(&mut imgui, &mut factory, main_color.clone()) + .expect("Failed to initialize renderer"); - Support { - imgui: imgui, - mouse_pos: (0, 0), - mouse_pressed: (false, false, false), - mouse_wheel: 0.0, - } - } + configure_keys(&mut imgui); - pub fn update_mouse(&mut self) { - let scale = self.imgui.display_framebuffer_scale(); - self.imgui.set_mouse_pos(self.mouse_pos.0 as f32 / scale.0, - self.mouse_pos.1 as f32 / scale.1); - self.imgui.set_mouse_down(&[self.mouse_pressed.0, - self.mouse_pressed.1, - self.mouse_pressed.2, - false, - false]); - self.imgui.set_mouse_wheel(self.mouse_wheel / scale.1); - self.mouse_wheel = 0.0; - } + let mut last_frame = Instant::now(); + let mut mouse_state = MouseState::default(); + let mut quit = false; - pub fn update_event(&mut self, event: &glutin::Event) -> bool { - match *event { - Event::Closed => return false, - Event::KeyboardInput(state, _, code) => { - let pressed = state == ElementState::Pressed; - match code { - Some(VirtualKeyCode::Tab) => self.imgui.set_key(0, pressed), - Some(VirtualKeyCode::Left) => self.imgui.set_key(1, pressed), - Some(VirtualKeyCode::Right) => self.imgui.set_key(2, pressed), - Some(VirtualKeyCode::Up) => self.imgui.set_key(3, pressed), - Some(VirtualKeyCode::Down) => self.imgui.set_key(4, pressed), - Some(VirtualKeyCode::PageUp) => self.imgui.set_key(5, pressed), - Some(VirtualKeyCode::PageDown) => self.imgui.set_key(6, pressed), - Some(VirtualKeyCode::Home) => self.imgui.set_key(7, pressed), - Some(VirtualKeyCode::End) => self.imgui.set_key(8, pressed), - Some(VirtualKeyCode::Delete) => self.imgui.set_key(9, pressed), - Some(VirtualKeyCode::Back) => self.imgui.set_key(10, pressed), - Some(VirtualKeyCode::Return) => self.imgui.set_key(11, pressed), - Some(VirtualKeyCode::Escape) => self.imgui.set_key(12, pressed), - Some(VirtualKeyCode::A) => self.imgui.set_key(13, pressed), - Some(VirtualKeyCode::C) => self.imgui.set_key(14, pressed), - Some(VirtualKeyCode::V) => self.imgui.set_key(15, pressed), - Some(VirtualKeyCode::X) => self.imgui.set_key(16, pressed), - Some(VirtualKeyCode::Y) => self.imgui.set_key(17, pressed), - Some(VirtualKeyCode::Z) => self.imgui.set_key(18, pressed), - Some(VirtualKeyCode::LControl) | - Some(VirtualKeyCode::RControl) => self.imgui.set_key_ctrl(pressed), - Some(VirtualKeyCode::LShift) | - Some(VirtualKeyCode::RShift) => self.imgui.set_key_shift(pressed), - Some(VirtualKeyCode::LAlt) | - Some(VirtualKeyCode::RAlt) => self.imgui.set_key_alt(pressed), - Some(VirtualKeyCode::LWin) | - Some(VirtualKeyCode::RWin) => self.imgui.set_key_super(pressed), - _ => {} + loop { + events_loop.poll_events(|glutin::Event::WindowEvent{event, ..}| { + match event { + WindowEvent::Resized(_, _) => { + gfx_window_glutin::update_views(&window, &mut main_color, &mut main_depth); + renderer.update_render_target(main_color.clone()); } + WindowEvent::Closed => quit = true, + WindowEvent::KeyboardInput(state, _, code, _) => { + let pressed = state == ElementState::Pressed; + match code { + Some(VirtualKeyCode::Tab) => imgui.set_key(0, pressed), + Some(VirtualKeyCode::Left) => imgui.set_key(1, pressed), + Some(VirtualKeyCode::Right) => imgui.set_key(2, pressed), + Some(VirtualKeyCode::Up) => imgui.set_key(3, pressed), + Some(VirtualKeyCode::Down) => imgui.set_key(4, pressed), + Some(VirtualKeyCode::PageUp) => imgui.set_key(5, pressed), + Some(VirtualKeyCode::PageDown) => imgui.set_key(6, pressed), + Some(VirtualKeyCode::Home) => imgui.set_key(7, pressed), + Some(VirtualKeyCode::End) => imgui.set_key(8, pressed), + Some(VirtualKeyCode::Delete) => imgui.set_key(9, pressed), + Some(VirtualKeyCode::Back) => imgui.set_key(10, pressed), + Some(VirtualKeyCode::Return) => imgui.set_key(11, pressed), + Some(VirtualKeyCode::Escape) => quit = true, + Some(VirtualKeyCode::A) => imgui.set_key(13, pressed), + Some(VirtualKeyCode::C) => imgui.set_key(14, pressed), + Some(VirtualKeyCode::V) => imgui.set_key(15, pressed), + Some(VirtualKeyCode::X) => imgui.set_key(16, pressed), + Some(VirtualKeyCode::Y) => imgui.set_key(17, pressed), + Some(VirtualKeyCode::Z) => imgui.set_key(18, pressed), + Some(VirtualKeyCode::LControl) | + Some(VirtualKeyCode::RControl) => imgui.set_key_ctrl(pressed), + Some(VirtualKeyCode::LShift) | + Some(VirtualKeyCode::RShift) => imgui.set_key_shift(pressed), + Some(VirtualKeyCode::LAlt) | + Some(VirtualKeyCode::RAlt) => imgui.set_key_alt(pressed), + Some(VirtualKeyCode::LWin) | + Some(VirtualKeyCode::RWin) => imgui.set_key_super(pressed), + _ => {} + } + } + WindowEvent::MouseMoved(x, y) => mouse_state.pos = (x, y), + WindowEvent::MouseInput(state, MouseButton::Left) => { + mouse_state.pressed.0 = state == ElementState::Pressed + } + WindowEvent::MouseInput(state, MouseButton::Right) => { + mouse_state.pressed.1 = state == ElementState::Pressed + } + WindowEvent::MouseInput(state, MouseButton::Middle) => { + mouse_state.pressed.2 = state == ElementState::Pressed + } + WindowEvent::MouseWheel(MouseScrollDelta::LineDelta(_, y), TouchPhase::Moved) => { + mouse_state.wheel = y + } + WindowEvent::MouseWheel(MouseScrollDelta::PixelDelta(_, y), TouchPhase::Moved) => { + mouse_state.wheel = y + } + WindowEvent::ReceivedCharacter(c) => imgui.add_input_character(c), + _ => () } - Event::MouseMoved(x, y) => self.mouse_pos = (x, y), - Event::MouseInput(state, MouseButton::Left) => { - self.mouse_pressed.0 = state == ElementState::Pressed - } - Event::MouseInput(state, MouseButton::Right) => { - self.mouse_pressed.1 = state == ElementState::Pressed - } - Event::MouseInput(state, MouseButton::Middle) => { - self.mouse_pressed.2 = state == ElementState::Pressed - } - Event::MouseWheel(MouseScrollDelta::LineDelta(_, y), TouchPhase::Moved) => { - self.mouse_wheel = y - } - Event::MouseWheel(MouseScrollDelta::PixelDelta(_, y), TouchPhase::Moved) => { - self.mouse_wheel = y - } - Event::ReceivedCharacter(c) => self.imgui.add_input_character(c), - _ => (), - } - true - } + }); + + let now = Instant::now(); + let delta = now - last_frame; + let delta_s = delta.as_secs() as f32 + delta.subsec_nanos() as f32 / 1_000_000_000.0; + last_frame = now; + + update_mouse(&mut imgui, &mut mouse_state); + + let size_points = window.get_inner_size_points().unwrap(); + let size_pixels = window.get_inner_size_pixels().unwrap(); + + let ui = imgui.frame(size_points, size_pixels, delta_s); + + run_ui(&ui); + + encoder.clear(&mut main_color, clear_color); + + renderer.render(ui, &mut factory, &mut encoder) + .expect("Rendering failed"); + encoder.flush(&mut device); + window.swap_buffers().unwrap(); + device.cleanup(); + + if quit { break } + }; +} + +fn configure_keys(imgui: &mut ImGui) { + imgui.set_imgui_key(ImGuiKey::Tab, 0); + imgui.set_imgui_key(ImGuiKey::LeftArrow, 1); + imgui.set_imgui_key(ImGuiKey::RightArrow, 2); + imgui.set_imgui_key(ImGuiKey::UpArrow, 3); + imgui.set_imgui_key(ImGuiKey::DownArrow, 4); + imgui.set_imgui_key(ImGuiKey::PageUp, 5); + imgui.set_imgui_key(ImGuiKey::PageDown, 6); + imgui.set_imgui_key(ImGuiKey::Home, 7); + imgui.set_imgui_key(ImGuiKey::End, 8); + imgui.set_imgui_key(ImGuiKey::Delete, 9); + imgui.set_imgui_key(ImGuiKey::Backspace, 10); + imgui.set_imgui_key(ImGuiKey::Enter, 11); + imgui.set_imgui_key(ImGuiKey::Escape, 12); + imgui.set_imgui_key(ImGuiKey::A, 13); + imgui.set_imgui_key(ImGuiKey::C, 14); + imgui.set_imgui_key(ImGuiKey::V, 15); + imgui.set_imgui_key(ImGuiKey::X, 16); + imgui.set_imgui_key(ImGuiKey::Y, 17); + imgui.set_imgui_key(ImGuiKey::Z, 18); +} + +fn update_mouse(imgui: &mut ImGui, mouse_state: &mut MouseState) { + let scale = imgui.display_framebuffer_scale(); + imgui.set_mouse_pos(mouse_state.pos.0 as f32 / scale.0, + mouse_state.pos.1 as f32 / scale.1); + imgui.set_mouse_down(&[mouse_state.pressed.0, + mouse_state.pressed.1, + mouse_state.pressed.2, + false, + false]); + imgui.set_mouse_wheel(mouse_state.wheel / scale.1); + mouse_state.wheel = 0.0; } diff --git a/imgui-gfx-renderer/Cargo.toml b/imgui-gfx-renderer/Cargo.toml index 9aaa980..bc83f42 100644 --- a/imgui-gfx-renderer/Cargo.toml +++ b/imgui-gfx-renderer/Cargo.toml @@ -9,6 +9,6 @@ license = "MIT/Apache-2.0" categories = ["gui", "rendering"] [dependencies] -gfx = "0.15" +gfx = "0.16" imgui = { version = "0.0.14-pre", path = "../" } imgui-sys = { version = "0.0.14-pre", path = "../imgui-sys", features = ["gfx"] } diff --git a/imgui-sys/Cargo.toml b/imgui-sys/Cargo.toml index 8561c6b..8cf99c3 100644 --- a/imgui-sys/Cargo.toml +++ b/imgui-sys/Cargo.toml @@ -12,7 +12,7 @@ build = "build.rs" [dependencies] bitflags = "0.8" glium = { version = "0.16", default-features = false, optional = true } -gfx = { version = "0.15", optional = true } +gfx = { version = "0.16", optional = true } [build-dependencies] gcc = "0.3"