move run stuff into run module

This commit is contained in:
Quaternions 2023-10-23 17:27:18 -07:00
parent b445277346
commit c4ad4fbdf9
2 changed files with 47 additions and 48 deletions

View File

@ -1,4 +1,5 @@
use crate::instruction::TimedInstruction; use crate::instruction::TimedInstruction;
use crate::run::RunInstruction;
fn optional_features() -> wgpu::Features { fn optional_features() -> wgpu::Features {
wgpu::Features::empty() wgpu::Features::empty()
@ -207,53 +208,6 @@ pub fn setup(title:&str)->GraphicsContextSetup{
} }
} }
enum RunInstruction{
Resize(winit::dpi::PhysicalSize<u32>),
WindowEvent(winit::event::WindowEvent),
DeviceEvent(winit::event::DeviceEvent),
Render,
}
impl GraphicsContext{
fn into_worker(self,mut run:crate::run::RunState)->crate::worker::QNWorker<TimedInstruction<RunInstruction>>{
crate::worker::QNWorker::new(move |ins:TimedInstruction<RunInstruction>|{
match ins.instruction{
RunInstruction::WindowEvent(window_event)=>{
run.window_event(window_event);
},
RunInstruction::DeviceEvent(device_event)=>{
run.device_event(device_event);
},
RunInstruction::Resize(size)=>{
self.config.width=size.width.max(1);
self.config.height=size.height.max(1);
run.graphics.resize(&self.device,&self.config);
self.surface.configure(&self.device,&self.config);
}
RunInstruction::Render=>{
let frame=match self.surface.get_current_texture(){
Ok(frame)=>frame,
Err(_)=>{
self.surface.configure(&self.device,&self.config);
self.surface
.get_current_texture()
.expect("Failed to acquire next surface texture!")
}
};
let view=frame.texture.create_view(&wgpu::TextureViewDescriptor{
format:Some(self.config.view_formats[0]),
..wgpu::TextureViewDescriptor::default()
});
run.graphics.render(&view,&self.device,&self.queue);
frame.present();
}
}
})
}
}
struct GraphicsContextSetup{ struct GraphicsContextSetup{
window:winit::window::Window, window:winit::window::Window,
event_loop:winit::event_loop::EventLoop<()>, event_loop:winit::event_loop::EventLoop<()>,
@ -276,7 +230,7 @@ impl GraphicsContextSetup{
//dedicated thread to pigh request redraw back and resize the window doesn't seem logical //dedicated thread to pigh request redraw back and resize the window doesn't seem logical
//physics and graphics render thread //physics and graphics render thread
let run_thread=graphics_context.into_worker(run); let run_thread=run.into_worker(graphics_context);
println!("Entering render loop..."); println!("Entering render loop...");
let root_time=std::time::Instant::now(); let root_time=std::time::Instant::now();

View File

@ -2,6 +2,13 @@ use crate::physics::PhysicsInstruction;
use crate::render_thread::InputInstruction; use crate::render_thread::InputInstruction;
use crate::instruction::{TimedInstruction, InstructionConsumer}; use crate::instruction::{TimedInstruction, InstructionConsumer};
pub enum RunInstruction{
Resize(winit::dpi::PhysicalSize<u32>),
WindowEvent(winit::event::WindowEvent),
DeviceEvent(winit::event::DeviceEvent),
Render,
}
pub struct RunState{ pub struct RunState{
manual_mouse_lock:bool, manual_mouse_lock:bool,
mouse:std::sync::Arc<std::sync::Mutex<physics::MouseState>>, mouse:std::sync::Arc<std::sync::Mutex<physics::MouseState>>,
@ -184,4 +191,42 @@ impl RunState {
_=>(), _=>(),
} }
} }
pub fn into_worker(self,mut graphics_context:crate::graphics_context::GraphicsContext)->crate::worker::QNWorker<TimedInstruction<RunInstruction>>{
crate::worker::QNWorker::new(move |ins:TimedInstruction<RunInstruction>|{
match ins.instruction{
RunInstruction::WindowEvent(window_event)=>{
self.window_event(window_event);
},
RunInstruction::DeviceEvent(device_event)=>{
self.device_event(device_event);
},
RunInstruction::Resize(size)=>{
graphics_context.config.width=size.width.max(1);
graphics_context.config.height=size.height.max(1);
self.graphics.resize(&graphics_context.device,&graphics_context.config);
graphics_context.surface.configure(&graphics_context.device,&graphics_context.config);
}
RunInstruction::Render=>{
let frame=match graphics_context.surface.get_current_texture(){
Ok(frame)=>frame,
Err(_)=>{
graphics_context.surface.configure(&graphics_context.device,&graphics_context.config);
graphics_context.surface
.get_current_texture()
.expect("Failed to acquire next surface texture!")
}
};
let view=frame.texture.create_view(&wgpu::TextureViewDescriptor{
format:Some(graphics_context.config.view_formats[0]),
..wgpu::TextureViewDescriptor::default()
});
self.graphics.render(&view,&graphics_context.device,&graphics_context.queue);
frame.present();
}
}
})
}
} }