graphics: common surface code

This commit is contained in:
2026-03-10 07:48:43 -07:00
parent 7c14acb377
commit 44f988ea4a
6 changed files with 77 additions and 32 deletions

View File

@@ -20,8 +20,7 @@ WorkerDescription{
pub fn new(
mut graphics:graphics::GraphicsState,
mut config:wgpu::SurfaceConfiguration,
surface:wgpu::Surface<'_>,
mut surface:strafesnet_graphics::surface::Surface<'_>,
device:wgpu::Device,
queue:wgpu::Queue,
)->crate::compat_worker::INWorker<'_,Instruction>{
@@ -34,33 +33,20 @@ pub fn new(
Instruction::Resize(size,user_settings)=>{
println!("Resizing to {:?}",size);
let t0=std::time::Instant::now();
config.width=size.width.max(1);
config.height=size.height.max(1);
surface.configure(&device,&config);
let size=glam::uvec2(config.width,config.height);
let size=glam::uvec2(size.width,size.height);
surface.configure(&device,size);
let size=surface.size();
let fov=user_settings.calculate_fov(1.0,&size).as_vec2();
graphics.resize(&device,size,fov);
println!("Resize took {:?}",t0.elapsed());
}
Instruction::Render(frame_state)=>{
//this has to go deeper somehow
let frame=match surface.get_current_texture(){
Ok(frame)=>frame,
Err(_)=>{
surface.configure(&device,&config);
surface
.get_current_texture()
.expect("Failed to acquire next surface texture!")
}
};
let view=frame.texture.create_view(&wgpu::TextureViewDescriptor{
format:Some(config.view_formats[0]),
..wgpu::TextureViewDescriptor::default()
});
let frame=surface.new_frame(&device);
let mut encoder=device.create_command_encoder(&wgpu::CommandEncoderDescriptor{label:None});
graphics.encode_commands(&mut encoder,&view,graphics::view_inv(frame_state.pos(),frame_state.angles()));
graphics.encode_commands(&mut encoder,frame.view(),graphics::view_inv(frame_state.pos(),frame_state.angles()));
queue.submit([encoder.finish()]);

View File

@@ -20,12 +20,12 @@ pub async fn setup_and_start(title:&str){
let adapter=setup::step3::pick_adapter(&instance,&surface).await.expect("No suitable GPU adapters found on the system!");
let adapter_info=adapter.get_info();
println!("Using {} ({:?})", adapter_info.name, adapter_info.backend);
println!("Using {} ({:?})",adapter_info.name,adapter_info.backend);
let (device,queue)=setup::step4::request_device(&adapter).await.unwrap();
let size=window.inner_size();
let config=setup::step5::configure_surface(&adapter,&device,&surface,(size.width,size.height)).unwrap();
let surface=setup::step5::configure_surface(&adapter,&device,surface,(size.width,size.height)).unwrap();
//dedicated thread to ping request redraw back and resize the window doesn't seem logical
@@ -35,7 +35,6 @@ pub async fn setup_and_start(title:&str){
device,
queue,
surface,
config,
);
for arg in std::env::args().skip(1){

View File

@@ -241,8 +241,7 @@ pub fn worker<'a>(
window:&'a winit::window::Window,
device:wgpu::Device,
queue:wgpu::Queue,
surface:wgpu::Surface<'a>,
config:wgpu::SurfaceConfiguration,
surface:strafesnet_graphics::surface::Surface<'a>,
)->crate::compat_worker::QNWorker<'a,TimedInstruction<Instruction,SessionTime>>{
// WindowContextSetup::new
#[cfg(feature="user-install")]
@@ -252,13 +251,13 @@ pub fn worker<'a>(
let user_settings=directories.settings();
let screen_size=glam::uvec2(config.width,config.height);
let mut graphics=strafesnet_graphics::graphics::GraphicsState::new(&device,&queue,screen_size,config.view_formats[0]);
let screen_size=surface.size();
let mut graphics=strafesnet_graphics::graphics::GraphicsState::new(&device,&queue,screen_size,surface.view_format());
//WindowContextSetup::into_context
let fov=user_settings.calculate_fov(1.0,&screen_size).as_vec2();
graphics.resize(&device,screen_size,fov);
let graphics_thread=crate::graphics_worker::new(graphics,config,surface,device,queue);
let graphics_thread=crate::graphics_worker::new(graphics,surface,device,queue);
let mut window_context=WindowContext{
manual_mouse_lock:false,
mouse_pos:glam::DVec2::ZERO,