Skip to content

Commit

Permalink
expose display creation to customize instance
Browse files Browse the repository at this point in the history
  • Loading branch information
boralg committed Jul 8, 2024
1 parent 89980ea commit ef467d0
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 8 deletions.
8 changes: 5 additions & 3 deletions sursface/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use winit::dpi::PhysicalSize;
use winit::event::{DeviceEvent, ElementState, KeyEvent, WindowEvent};
use winit::event_loop::ActiveEventLoop;
use winit::keyboard::{KeyCode, PhysicalKey};
use winit::window::WindowId;
use winit::window::{Window, WindowId};

#[cfg(target_arch = "wasm32")]
extern crate console_error_panic_hook;
Expand All @@ -22,6 +22,7 @@ pub struct App<'a, State> {

pub struct AppHandlers<State> {
pub init: fn(&mut Display) -> State,
pub create_display: fn(Window) -> Display<'static>,
pub render: fn(&mut Display, &mut State),
pub event: fn(&mut Display, &mut State, WindowEvent),
pub device_event: fn(&mut Display, &mut State, DeviceEvent),
Expand All @@ -31,6 +32,7 @@ impl<State> Default for AppHandlers<State> {
fn default() -> Self {
AppHandlers {
init: |_display: &mut Display| panic!("init handler not provided"),
create_display: |window: Window| Display::from_window(window),
render: |_display: &mut Display, _state: &mut State| {},
event: |_display: &mut Display, _state: &mut State, _event: WindowEvent| {},
device_event: |_display: &mut Display, _state: &mut State, _event: DeviceEvent| {},
Expand Down Expand Up @@ -113,11 +115,11 @@ impl<'a, State> ApplicationHandler for App<'a, State> {

#[cfg(not(target_arch = "wasm32"))]
{
self.display = Some(Arc::new(Mutex::new(Display::from_window_size(event_loop, self.initial_size))));
self.display = Some(Arc::new(Mutex::new(Display::from_window(Display::create_window_from_size(event_loop, self.initial_size)))));
}
#[cfg(target_arch = "wasm32")]
{
self.display = Some(Arc::new(Mutex::new(Display::from_canvas(event_loop, self.canvas.clone()))));
self.display = Some(Arc::new(Mutex::new(Display::from_window(Display::create_window_from_canvas(event_loop, self.canvas.clone())))));
}

let new_state = (&self.handlers.init)(&mut self.display.clone().unwrap().lock().unwrap());
Expand Down
10 changes: 5 additions & 5 deletions sursface/src/display/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,26 @@ pub struct Display<'a> {
}

impl<'a> Display<'a> {
pub fn from_window_size(event_loop: &ActiveEventLoop, window_size: PhysicalSize<u32>) -> Self {
pub fn create_window_from_size(event_loop: &ActiveEventLoop, window_size: PhysicalSize<u32>) -> Window {
let window = event_loop
.create_window(WindowAttributes::default()
.with_inner_size(window_size))
.expect("Couldn't create window");

Self::from_window(window)
window
}

#[cfg(target_arch = "wasm32")]
pub fn from_canvas(event_loop: &ActiveEventLoop, canvas: wgpu::web_sys::HtmlCanvasElement) -> Self {
pub fn create_window_from_canvas(event_loop: &ActiveEventLoop, canvas: wgpu::web_sys::HtmlCanvasElement) -> Window {
let window = event_loop
.create_window(WindowAttributes::default()
.with_canvas(Some(canvas)))
.expect("Couldn't create window");

Self::from_window(window)
window
}

fn from_window(window: Window) -> Self {
pub fn from_window(window: Window) -> Self {
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
#[cfg(not(target_arch = "wasm32"))]
backends: wgpu::Backends::PRIMARY,
Expand Down

0 comments on commit ef467d0

Please sign in to comment.