diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-01 13:57:32 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-01 13:57:32 +0200 |
| commit | e579ae120290329fd697b50ea9138ffccb65a805 (patch) | |
| tree | 12a63ee60b00e5004a1806ddf3ebd70c012e3e28 /rust/crates/gpu/src/lib.rs | |
| parent | b048b739bd598f9d9ff97166f29bcb6e37c40607 (diff) | |
| download | opencut-e579ae120290329fd697b50ea9138ffccb65a805.tar.gz | |
feat: migrate GPU renderer from WebGL to wgpu/WASM
Diffstat (limited to 'rust/crates/gpu/src/lib.rs')
| -rw-r--r-- | rust/crates/gpu/src/lib.rs | 40 |
1 files changed, 40 insertions, 0 deletions
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 }, +} |
