summaryrefslogtreecommitdiff
path: root/rust/crates/gpu/src/lib.rs
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-01 13:57:32 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-01 13:57:32 +0200
commite579ae120290329fd697b50ea9138ffccb65a805 (patch)
tree12a63ee60b00e5004a1806ddf3ebd70c012e3e28 /rust/crates/gpu/src/lib.rs
parentb048b739bd598f9d9ff97166f29bcb6e37c40607 (diff)
downloadopencut-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.rs40
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 },
+}