diff options
| author | Micha White <botahamec@outlook.com> | 2022-09-17 22:35:56 -0400 |
|---|---|---|
| committer | Micha White <botahamec@outlook.com> | 2022-09-17 22:35:56 -0400 |
| commit | 8f08ff0b62d82bc969aed135b37b864e6b51e0c8 (patch) | |
| tree | 027e60febb4ad81f5d52ebefa74f7917e15b1284 | |
| parent | ccbdb87e3a294c689d156517d37649cb47979804 (diff) | |
Switched to a cow
| -rw-r--r-- | examples/black.rs | 20 | ||||
| -rw-r--r-- | src/renderer.rs | 42 |
2 files changed, 24 insertions, 38 deletions
diff --git a/examples/black.rs b/examples/black.rs index 7c75117..205f7bd 100644 --- a/examples/black.rs +++ b/examples/black.rs @@ -1,25 +1,13 @@ -use std::num::NonZeroU32; - -use alligator_render::{ - renderer::{RenderWindowConfig, Resizable, WindowInfo, WindowMode}, - Renderer, -}; +use alligator_render::{renderer::RenderWindowConfig, Renderer}; use winit::event_loop::EventLoop; fn main() { // configure the render window let config = RenderWindowConfig { - default_width: NonZeroU32::new(640).unwrap(), - default_height: NonZeroU32::new(480).unwrap(), - mode: WindowMode::Windowed(WindowInfo { - default_x: 100, - default_y: 100, - resizable: Some(Resizable::default()), - default_maximized: false, - }), + //vsync: false, + //mode: WindowMode::BorderlessFullscreen, title: "Black Screen.exe".into(), - low_power: true, - vsync: true, + ..Default::default() }; let event_loop = EventLoop::new(); diff --git a/src/renderer.rs b/src/renderer.rs index 1b72e12..c9c51bc 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -1,4 +1,4 @@ -use std::num::NonZeroU32; +use std::{borrow::Cow, num::NonZeroU32}; use pollster::FutureExt; use thiserror::Error; @@ -81,7 +81,7 @@ impl Default for WindowMode { #[derive(Clone, Debug, PartialEq, Eq)] // TODO window icon -pub struct RenderWindowConfig { +pub struct RenderWindowConfig<'a> { /// The width of the window, once initialized pub default_width: NonZeroU32, /// The height of the window, once initialized @@ -89,7 +89,7 @@ pub struct RenderWindowConfig { /// The window may be fullscreen pub mode: WindowMode, /// The title for the window - pub title: Box<str>, + pub title: Cow<'a, str>, /// If true, a low-power device will be selected as the GPU, if possible pub low_power: bool, /// If true, Fifo mode is used to present frames. If false, then Mailbox or @@ -97,11 +97,11 @@ pub struct RenderWindowConfig { pub vsync: bool, } -impl Default for RenderWindowConfig { +impl<'a> Default for RenderWindowConfig<'a> { fn default() -> Self { Self { - default_width: NonZeroU32::new(480).unwrap(), - default_height: NonZeroU32::new(640).unwrap(), + default_width: NonZeroU32::new(640).unwrap(), + default_height: NonZeroU32::new(480).unwrap(), mode: WindowMode::default(), title: "Alligator Game".into(), low_power: true, @@ -254,16 +254,15 @@ impl Renderer { } /// Resize just the renderer. The window will remain unchanged - fn resize_renderer(&mut self, size: PhysicalSize<u32>) -> Option<()> { + fn resize_renderer(&mut self, size: PhysicalSize<u32>) { if size.width == 0 || size.height == 0 { - return None; + log::error!("The window was somehow set to a size of zero"); + return; } self.config.height = size.height; self.config.width = size.width; self.surface.configure(&self.device, &self.config); - - Some(()) } /// Renders a new frame to the window @@ -317,26 +316,25 @@ impl Renderer { Event::WindowEvent { window_id, event } => { if window_id == self.window.id() { match event { - WindowEvent::Resized(size) => { - if self.resize_renderer(size).is_none() { - log::error!("Somehow the window was resized to zero?"); - } - } + WindowEvent::Resized(size) => self.resize_renderer(size), WindowEvent::CloseRequested => *control_flow = ControlFlow::ExitWithCode(0), _ => (), } } } - Event::RedrawRequested(window_id) => { - if window_id == self.window.id() { - if let Err(e) = self.render() { - log::error!("{}", e); + Event::MainEventsCleared => { + match self.render() { + Ok(_) => {} + // reconfigure the surface if it's been lost + Err(wgpu::SurfaceError::Lost) => self.resize_renderer(self.window.inner_size()), + // if we ran out of memory, then we'll die + Err(wgpu::SurfaceError::OutOfMemory) => { + *control_flow = ControlFlow::ExitWithCode(1); } + // otherwise, we'll just log the error + Err(e) => log::error!("{}", e), } } - Event::MainEventsCleared => { - self.window.request_redraw(); - } _ => {} }) } |
