mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Added window resize handling
This commit is contained in:
parent
8a37662cf0
commit
a1617e7b5c
@ -94,6 +94,16 @@ impl Renderer {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get references to the internal render target views that get displayed directly by the window.
|
||||||
|
pub fn target_views(&self) -> (&TgtColorView, &TgtDepthView) {
|
||||||
|
(&self.tgt_color_view, &self.tgt_depth_view)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get mutable references to the internal render target views that get displayed directly by the window.
|
||||||
|
pub fn target_views_mut(&mut self) -> (&mut TgtColorView, &mut TgtDepthView) {
|
||||||
|
(&mut self.tgt_color_view, &mut self.tgt_depth_view)
|
||||||
|
}
|
||||||
|
|
||||||
/// Queue the clearing of the color and depth targets ready for a new frame to be rendered.
|
/// Queue the clearing of the color and depth targets ready for a new frame to be rendered.
|
||||||
/// TODO: Make a version of this that doesn't clear the colour target for speed
|
/// TODO: Make a version of this that doesn't clear the colour target for speed
|
||||||
pub fn clear(&mut self, col: Rgba<f32>) {
|
pub fn clear(&mut self, col: Rgba<f32>) {
|
||||||
|
@ -21,7 +21,7 @@ impl Camera {
|
|||||||
Self {
|
Self {
|
||||||
focus: Vec3::unit_z() * 10.0,
|
focus: Vec3::unit_z() * 10.0,
|
||||||
ori: Vec3::zero(),
|
ori: Vec3::zero(),
|
||||||
dist: 100.0,
|
dist: 150.0,
|
||||||
fov: 1.3,
|
fov: 1.3,
|
||||||
aspect: 1.618,
|
aspect: 1.618,
|
||||||
}
|
}
|
||||||
@ -64,4 +64,9 @@ impl Camera {
|
|||||||
pub fn get_focus_pos(&self) -> Vec3<f32> { self.focus }
|
pub fn get_focus_pos(&self) -> Vec3<f32> { self.focus }
|
||||||
/// Set the focus position of the camera.
|
/// Set the focus position of the camera.
|
||||||
pub fn set_focus_pos(&mut self, focus: Vec3<f32>) { self.focus = focus; }
|
pub fn set_focus_pos(&mut self, focus: Vec3<f32>) { self.focus = focus; }
|
||||||
|
|
||||||
|
/// Get the aspect ratio of the camera.
|
||||||
|
pub fn get_aspect_ratio(&self) -> f32 { self.aspect }
|
||||||
|
/// Set the aspect ratio of the camera.
|
||||||
|
pub fn set_aspect_ratio(&mut self, aspect: f32) { self.aspect = aspect; }
|
||||||
}
|
}
|
||||||
|
@ -105,6 +105,12 @@ impl Scene {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a reference to the scene's camera.
|
||||||
|
pub fn camera(&self) -> &Camera { &self.camera }
|
||||||
|
|
||||||
|
/// Get a mutable reference to the scene's camera.
|
||||||
|
pub fn camera_mut(&mut self) -> &mut Camera { &mut self.camera }
|
||||||
|
|
||||||
/// Handle an incoming user input event (i.e: cursor moved, key pressed, window closed, etc.).
|
/// Handle an incoming user input event (i.e: cursor moved, key pressed, window closed, etc.).
|
||||||
pub fn handle_input_event(&mut self, event: Event) -> bool {
|
pub fn handle_input_event(&mut self, event: Event) -> bool {
|
||||||
match event {
|
match event {
|
||||||
|
@ -81,8 +81,8 @@ impl PlayState for SessionState {
|
|||||||
let mut clock = Clock::new();
|
let mut clock = Clock::new();
|
||||||
|
|
||||||
// Load a few chunks TODO: Remove this
|
// Load a few chunks TODO: Remove this
|
||||||
for x in -4..5 {
|
for x in -6..7 {
|
||||||
for y in -4..5 {
|
for y in -6..7 {
|
||||||
for z in -1..2 {
|
for z in -1..2 {
|
||||||
self.client.load_chunk(Vec3::new(x, y, z));
|
self.client.load_chunk(Vec3::new(x, y, z));
|
||||||
}
|
}
|
||||||
@ -95,6 +95,10 @@ impl PlayState for SessionState {
|
|||||||
for event in global_state.window.fetch_events() {
|
for event in global_state.window.fetch_events() {
|
||||||
let _handled = match event {
|
let _handled = match event {
|
||||||
Event::Close => return PlayStateResult::Shutdown,
|
Event::Close => return PlayStateResult::Shutdown,
|
||||||
|
// When the window is resized, change the camera's aspect ratio
|
||||||
|
Event::Resize(dims) => {
|
||||||
|
self.scene.camera_mut().set_aspect_ratio(dims.x as f32 / dims.y as f32);
|
||||||
|
},
|
||||||
// When 'q' is pressed, exit the session
|
// When 'q' is pressed, exit the session
|
||||||
Event::Char('q') => return PlayStateResult::Pop,
|
Event::Char('q') => return PlayStateResult::Pop,
|
||||||
// Toggle cursor grabbing
|
// Toggle cursor grabbing
|
||||||
|
@ -67,11 +67,22 @@ impl Window {
|
|||||||
// Copy data that is needed by the events closure to avoid lifetime errors
|
// Copy data that is needed by the events closure to avoid lifetime errors
|
||||||
// TODO: Remove this if/when the compiler permits it
|
// TODO: Remove this if/when the compiler permits it
|
||||||
let cursor_grabbed = self.cursor_grabbed;
|
let cursor_grabbed = self.cursor_grabbed;
|
||||||
|
let renderer = &mut self.renderer;
|
||||||
|
let window = &mut self.window;
|
||||||
|
|
||||||
let mut events = vec![];
|
let mut events = vec![];
|
||||||
self.events_loop.poll_events(|event| match event {
|
self.events_loop.poll_events(|event| match event {
|
||||||
glutin::Event::WindowEvent { event, .. } => match event {
|
glutin::Event::WindowEvent { event, .. } => match event {
|
||||||
glutin::WindowEvent::CloseRequested => events.push(Event::Close),
|
glutin::WindowEvent::CloseRequested => events.push(Event::Close),
|
||||||
|
glutin::WindowEvent::Resized(glutin::dpi::LogicalSize { width, height }) => {
|
||||||
|
let (mut color_view, mut depth_view) = renderer.target_views_mut();
|
||||||
|
gfx_window_glutin::update_views(
|
||||||
|
&window,
|
||||||
|
&mut color_view,
|
||||||
|
&mut depth_view,
|
||||||
|
);
|
||||||
|
events.push(Event::Resize(Vec2::new(width as u32, height as u32)));
|
||||||
|
},
|
||||||
glutin::WindowEvent::ReceivedCharacter(c) => events.push(Event::Char(c)),
|
glutin::WindowEvent::ReceivedCharacter(c) => events.push(Event::Char(c)),
|
||||||
glutin::WindowEvent::KeyboardInput { input, .. } => match input.virtual_keycode {
|
glutin::WindowEvent::KeyboardInput { input, .. } => match input.virtual_keycode {
|
||||||
Some(glutin::VirtualKeyCode::Escape) => events.push(if input.state == glutin::ElementState::Pressed {
|
Some(glutin::VirtualKeyCode::Escape) => events.push(if input.state == glutin::ElementState::Pressed {
|
||||||
@ -119,6 +130,8 @@ pub enum Key {
|
|||||||
pub enum Event {
|
pub enum Event {
|
||||||
/// The window has been requested to close.
|
/// The window has been requested to close.
|
||||||
Close,
|
Close,
|
||||||
|
/// The window has been resized
|
||||||
|
Resize(Vec2<u32>),
|
||||||
/// A key has been typed that corresponds to a specific character.
|
/// A key has been typed that corresponds to a specific character.
|
||||||
Char(char),
|
Char(char),
|
||||||
/// The cursor has been panned across the screen while grabbed.
|
/// The cursor has been panned across the screen while grabbed.
|
||||||
|
Loading…
Reference in New Issue
Block a user