move setup into lib

This commit is contained in:
2026-02-18 09:06:57 -08:00
parent a43f4720a1
commit a39f0fe4db
3 changed files with 47 additions and 47 deletions

View File

@@ -1,6 +1,7 @@
pub mod bot;
pub mod graphics;
pub mod head;
pub mod setup;
pub mod surface;
// Create Surface

View File

@@ -13,19 +13,19 @@ fn required_downlevel_capabilities()->wgpu::DownlevelCapabilities{
}
}
mod step1{
pub mod step1{
pub fn create_instance()->wgpu::Instance{
Default::default()
}
}
mod step2{
pub mod step2{
pub fn create_surface<'window>(instance:&wgpu::Instance,target:impl Into<wgpu::SurfaceTarget<'window>>)->Result<wgpu::Surface<'window>,wgpu::CreateSurfaceError>{
instance.create_surface(target)
}
}
mod step3{
pub mod step3{
pub async fn pick_adapter(instance:&wgpu::Instance,surface:&wgpu::Surface<'_>)->Option<wgpu::Adapter>{
let backends=wgpu::Backends::from_env().unwrap_or_default();
//TODO: prefer adapter that implements optional features
@@ -63,7 +63,7 @@ mod step3{
}
}
mod step4{
pub mod step4{
pub async fn request_device(adapter:&wgpu::Adapter)->(wgpu::Device,wgpu::Queue){
let optional_features=super::optional_features();
let required_features=super::required_features();
@@ -90,7 +90,8 @@ mod step4{
)
}
}
mod step5{
pub mod step5{
pub fn configure_surface(
adapter:&wgpu::Adapter,
device:&wgpu::Device,
@@ -104,46 +105,8 @@ mod step5{
let surface_view_format=config.format.add_srgb_suffix();
config.view_formats.push(surface_view_format);
config.present_mode=wgpu::PresentMode::AutoNoVsync;
surface.configure(device, &config);
surface.configure(device,&config);
config
}
}
struct ToSurfaceTarget{
canvas:web_sys::HtmlCanvasElement,
}
impl From<ToSurfaceTarget> for wgpu::SurfaceTarget<'static>{
fn from(ToSurfaceTarget{canvas}:ToSurfaceTarget)->Self{
#[cfg(target_arch = "wasm32")]
let target=wgpu::SurfaceTarget::Canvas(canvas);
#[expect(unused)]
#[cfg(not(target_arch = "wasm32"))]
let target=panic!("{canvas:?}");
#[allow(unused)]
target
}
}
pub async fn setup_and_start(canvas:web_sys::HtmlCanvasElement)->(wgpu::Device,wgpu::Queue,wgpu::Surface<'static>,wgpu::SurfaceConfiguration){
let size=(canvas.width(),canvas.height());
println!("Initializing the surface...");
let instance=step1::create_instance();
let surface=step2::create_surface(&instance,ToSurfaceTarget{canvas}).unwrap();
let adapter=step3::pick_adapter(&instance,&surface).await.expect("No suitable GPU adapters found on the system!");
let (device,queue)=step4::request_device(&adapter).await;
let config=step5::configure_surface(&adapter,&device,&surface,size);
(
device,
queue,
surface,
config,
)
}

View File

@@ -1,9 +1,45 @@
use wasm_bindgen::prelude::wasm_bindgen;
use wasm_bindgen::JsValue;
use strafesnet_roblox_bot_player::{bot,graphics,head};
use strafesnet_roblox_bot_player::{bot,graphics,head,setup};
use strafesnet_common::session::Time as SessionTime;
mod setup;
struct ToSurfaceTarget{
canvas:web_sys::HtmlCanvasElement,
}
impl From<ToSurfaceTarget> for wgpu::SurfaceTarget<'static>{
fn from(ToSurfaceTarget{canvas}:ToSurfaceTarget)->Self{
#[cfg(target_arch = "wasm32")]
let target=wgpu::SurfaceTarget::Canvas(canvas);
#[expect(unused)]
#[cfg(not(target_arch = "wasm32"))]
let target=panic!("{canvas:?}");
#[allow(unused)]
target
}
}
async fn setup_and_start(canvas:web_sys::HtmlCanvasElement)->(wgpu::Device,wgpu::Queue,wgpu::Surface<'static>,wgpu::SurfaceConfiguration){
let size=(canvas.width(),canvas.height());
println!("Initializing the surface...");
let instance=setup::step1::create_instance();
let surface=setup::step2::create_surface(&instance,ToSurfaceTarget{canvas}).unwrap();
let adapter=setup::step3::pick_adapter(&instance,&surface).await.expect("No suitable GPU adapters found on the system!");
let (device,queue)=setup::step4::request_device(&adapter).await;
let config=setup::step5::configure_surface(&adapter,&device,&surface,size);
(
device,
queue,
surface,
config,
)
}
#[wasm_bindgen]
pub struct Setup{
@@ -14,7 +50,7 @@ pub struct Setup{
}
#[wasm_bindgen]
pub async fn setup(canvas:web_sys::HtmlCanvasElement)->Setup{
let (device,queue,surface,config)=setup::setup_and_start(canvas).await;
let (device,queue,surface,config)=setup_and_start(canvas).await;
Setup{device,queue,surface,config}
}
#[wasm_bindgen]