From 58f9a70e164c416716a9ccd3ae219e5f7108ce09 Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Wed, 4 Mar 2026 09:34:17 -0800 Subject: [PATCH] add webgl support --- Cargo.lock | 10 ++++++++++ wasm-module/Cargo.toml | 2 +- wasm-module/src/lib.rs | 9 +++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ca92a4f..577a2c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2164,6 +2164,7 @@ dependencies = [ "thiserror 2.0.18", "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", + "wgpu-core-deps-wasm", "wgpu-core-deps-windows-linux-android", "wgpu-hal", "wgpu-types", @@ -2187,6 +2188,15 @@ dependencies = [ "wgpu-hal", ] +[[package]] +name = "wgpu-core-deps-wasm" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12a2cf578ce8d7d50d0e63ddc2345c7dcb599f6eb90b888813406ea78b9b7010" +dependencies = [ + "wgpu-hal", +] + [[package]] name = "wgpu-core-deps-windows-linux-android" version = "28.0.0" diff --git a/wasm-module/Cargo.toml b/wasm-module/Cargo.toml index ed805e7..f003ed5 100644 --- a/wasm-module/Cargo.toml +++ b/wasm-module/Cargo.toml @@ -15,7 +15,7 @@ strafesnet_snf.workspace = true wasm-bindgen = "0.2.108" wasm-bindgen-futures = "0.4.58" web-sys = { version = "0.3.85", features = ["HtmlCanvasElement"] } -wgpu = "28.0.0" +wgpu = { version = "28.0.0", features = ["webgl"] } [package.metadata.wasm-pack.profile.release] wasm-opt = ["-Oz", "--enable-bulk-memory","--enable-nontrapping-float-to-int"] diff --git a/wasm-module/src/lib.rs b/wasm-module/src/lib.rs index ae35741..c6eebf9 100644 --- a/wasm-module/src/lib.rs +++ b/wasm-module/src/lib.rs @@ -28,9 +28,14 @@ pub struct Graphics{ pub async fn setup_graphics(canvas:web_sys::HtmlCanvasElement)->Result{ let size=(canvas.width(),canvas.height()); - let instance=setup::step1::create_instance(); + let instance_desc=wgpu::InstanceDescriptor::from_env_or_default(); + let instance=wgpu::util::new_instance_with_webgpu_detection(&instance_desc).await; let surface=setup::step2::create_surface(&instance,ToSurfaceTarget(canvas)).map_err(|e|JsError::new(&e.to_string()))?; - let adapter=setup::step3::pick_adapter(&instance,&surface).await.ok_or_else(||JsError::new("No suitable GPU adapters found on the system!"))?; + let adapter=instance.request_adapter(&wgpu::RequestAdapterOptions{ + power_preference:wgpu::PowerPreference::HighPerformance, + force_fallback_adapter:false, + compatible_surface:Some(&surface), + }).await.map_err(|e|JsError::new(&e.to_string()))?; let (device,queue)=setup::step4::request_device(&adapter).await.map_err(|e|JsError::new(&e.to_string()))?; let config=setup::step5::configure_surface(&adapter,&device,&surface,size).map_err(|e|JsError::new(&e.to_string()))?; Ok(Graphics{