From e579ae120290329fd697b50ea9138ffccb65a805 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 1 Apr 2026 13:57:32 +0200 Subject: feat: migrate GPU renderer from WebGL to wgpu/WASM --- rust/crates/gpu/src/lib.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 rust/crates/gpu/src/lib.rs (limited to 'rust/crates/gpu/src/lib.rs') diff --git a/rust/crates/gpu/src/lib.rs b/rust/crates/gpu/src/lib.rs new file mode 100644 index 00000000..c53e63ab --- /dev/null +++ b/rust/crates/gpu/src/lib.rs @@ -0,0 +1,40 @@ +mod context; +mod effect_pipeline; +mod mask_feather; +mod sdf_pipeline; +mod shader_registry; + +use thiserror::Error; + +pub use wgpu; +pub use context::GpuContext; +pub use effect_pipeline::{ApplyEffectsOptions, EffectPass, UniformValue}; +pub use mask_feather::ApplyMaskFeatherOptions; + +pub const GPU_TEXTURE_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Bgra8Unorm; + +#[derive(Debug, Error)] +pub enum GpuError { + #[error("No WebGPU adapter is available")] + AdapterUnavailable, + #[error("Failed to request a WebGPU device: {0}")] + RequestDevice(#[from] wgpu::RequestDeviceError), + #[error("Failed to create a WebGPU surface: {0}")] + CreateSurface(#[from] wgpu::CreateSurfaceError), + #[error("The output surface does not support the required texture format")] + UnsupportedSurfaceFormat, + #[error("Unknown effect shader '{shader}'")] + UnknownEffectShader { shader: String }, + #[error("Missing uniform '{uniform}' for shader '{shader}'")] + MissingUniform { shader: String, uniform: String }, + #[error("Uniform '{uniform}' for shader '{shader}' must be a number")] + InvalidNumberUniform { shader: String, uniform: String }, + #[error("Uniform '{uniform}' for shader '{shader}' must be a vector of length {expected_length}")] + InvalidVectorUniform { + shader: String, + uniform: String, + expected_length: usize, + }, + #[error("Shader '{shader}' does not support uniform '{uniform}'")] + UnsupportedUniform { shader: String, uniform: String }, +} -- cgit v1.3.1