diff --git a/Cargo.lock b/Cargo.lock index 81c28648b..b28079e3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -900,7 +900,7 @@ dependencies = [ "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", "serde", - "wgpu", + "wgpu 25.0.0", ] [[package]] @@ -1173,6 +1173,16 @@ dependencies = [ "objc", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "codespan-reporting" version = "0.12.0" @@ -1831,12 +1841,36 @@ dependencies = [ "baseview 0.1.0 (git+https://github.com/RustAudio/baseview.git?rev=9a0b42c09d712777b2edb4c5e0cb6baf21e988f0)", "copypasta 0.10.1", "egui", + "egui-wgpu", "egui_glow", "keyboard-types", "log", "open 5.3.2", + "pollster", "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", "thiserror 2.0.11", + "wgpu 24.0.5", +] + +[[package]] +name = "egui-wgpu" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d8151704bcef6271bec1806c51544d70e79ef20e8616e5eac01facfd9c8c54a" +dependencies = [ + "ahash", + "bytemuck", + "document-features", + "egui", + "epaint", + "log", + "profiling", + "thiserror 1.0.69", + "type-map", + "web-time", + "wgpu 24.0.5", + "winit 0.30.9", ] [[package]] @@ -3436,6 +3470,28 @@ dependencies = [ "smallvec", ] +[[package]] +name = "naga" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" +dependencies = [ + "arrayvec 0.7.6", + "bit-set", + "bitflags 2.9.0", + "cfg_aliases 0.2.1", + "codespan-reporting 0.11.1", + "hexf-parse", + "indexmap", + "log", + "rustc-hash 1.1.0", + "spirv", + "strum", + "termcolor", + "thiserror 2.0.11", + "unicode-xid", +] + [[package]] name = "naga" version = "25.0.1" @@ -3446,7 +3502,7 @@ dependencies = [ "bit-set", "bitflags 2.9.0", "cfg_aliases 0.2.1", - "codespan-reporting", + "codespan-reporting 0.12.0", "half", "hashbrown 0.15.2", "hexf-parse", @@ -5871,6 +5927,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "utf8parse" version = "0.2.2" @@ -6287,6 +6349,32 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "wgpu" +version = "24.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" +dependencies = [ + "arrayvec 0.7.6", + "bitflags 2.9.0", + "cfg_aliases 0.2.1", + "document-features", + "js-sys", + "log", + "naga 24.0.0", + "parking_lot 0.12.3", + "profiling", + "raw-window-handle 0.6.2", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core 24.0.5", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + [[package]] name = "wgpu" version = "25.0.0" @@ -6300,7 +6388,7 @@ dependencies = [ "hashbrown 0.15.2", "js-sys", "log", - "naga", + "naga 25.0.1", "parking_lot 0.12.3", "portable-atomic", "profiling", @@ -6310,9 +6398,34 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", + "wgpu-core 25.0.1", + "wgpu-hal 25.0.1", + "wgpu-types 25.0.0", +] + +[[package]] +name = "wgpu-core" +version = "24.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" +dependencies = [ + "arrayvec 0.7.6", + "bit-vec", + "bitflags 2.9.0", + "cfg_aliases 0.2.1", + "document-features", + "indexmap", + "log", + "naga 24.0.0", + "once_cell", + "parking_lot 0.12.3", + "profiling", + "raw-window-handle 0.6.2", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.11", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", ] [[package]] @@ -6330,7 +6443,7 @@ dependencies = [ "hashbrown 0.15.2", "indexmap", "log", - "naga", + "naga 25.0.1", "once_cell", "parking_lot 0.12.3", "portable-atomic", @@ -6342,8 +6455,8 @@ dependencies = [ "wgpu-core-deps-apple", "wgpu-core-deps-emscripten", "wgpu-core-deps-windows-linux-android", - "wgpu-hal", - "wgpu-types", + "wgpu-hal 25.0.1", + "wgpu-types 25.0.0", ] [[package]] @@ -6352,7 +6465,7 @@ version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" dependencies = [ - "wgpu-hal", + "wgpu-hal 25.0.1", ] [[package]] @@ -6361,7 +6474,7 @@ version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" dependencies = [ - "wgpu-hal", + "wgpu-hal 25.0.1", ] [[package]] @@ -6370,7 +6483,53 @@ version = "25.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" dependencies = [ - "wgpu-hal", + "wgpu-hal 25.0.1", +] + +[[package]] +name = "wgpu-hal" +version = "24.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" +dependencies = [ + "android_system_properties", + "arrayvec 0.7.6", + "ash", + "bit-set", + "bitflags 2.9.0", + "block", + "bytemuck", + "cfg_aliases 0.2.1", + "core-graphics-types 0.1.3", + "glow 0.16.0", + "glutin_wgl_sys 0.6.0", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.6", + "log", + "metal", + "naga 24.0.0", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "once_cell", + "ordered-float 4.6.0", + "parking_lot 0.12.3", + "profiling", + "range-alloc", + "raw-window-handle 0.6.2", + "renderdoc-sys", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.11", + "wasm-bindgen", + "web-sys", + "wgpu-types 24.0.0", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] @@ -6401,7 +6560,7 @@ dependencies = [ "libloading 0.8.6", "log", "metal", - "naga", + "naga 25.0.1", "ndk-sys 0.5.0+25.2.9519653", "objc", "ordered-float 4.6.0", @@ -6415,11 +6574,23 @@ dependencies = [ "thiserror 2.0.11", "wasm-bindgen", "web-sys", - "wgpu-types", + "wgpu-types 25.0.0", "windows 0.58.0", "windows-core 0.58.0", ] +[[package]] +name = "wgpu-types" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" +dependencies = [ + "bitflags 2.9.0", + "js-sys", + "log", + "web-sys", +] + [[package]] name = "wgpu-types" version = "25.0.0" diff --git a/nih_plug_egui/Cargo.toml b/nih_plug_egui/Cargo.toml index 124c3b321..c9703bbea 100644 --- a/nih_plug_egui/Cargo.toml +++ b/nih_plug_egui/Cargo.toml @@ -12,6 +12,8 @@ default = ["opengl", "default_fonts"] # `nih_plug_egui` always uses OpenGL since egui's wgpu backend is still unstable # depending on the platform opengl = ["egui-baseview/opengl"] +wgpu = ["egui-baseview/wgpu"] + default_fonts = ["egui-baseview/default_fonts"] rayon = ["egui-baseview/rayon"] diff --git a/nih_plug_egui/src/lib.rs b/nih_plug_egui/src/lib.rs index f268e670d..acd00405b 100644 --- a/nih_plug_egui/src/lib.rs +++ b/nih_plug_egui/src/lib.rs @@ -14,7 +14,7 @@ use serde::{Deserialize, Serialize}; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; -#[cfg(not(feature = "opengl"))] +#[cfg(all(not(feature = "opengl"), not(feature = "wgpu")))] compile_error!("There's currently no software rendering support for egui"); /// Re-export for convenience. diff --git a/src/wrapper/clap/wrapper.rs b/src/wrapper/clap/wrapper.rs index 1ff8e8a66..765512a31 100644 --- a/src/wrapper/clap/wrapper.rs +++ b/src/wrapper/clap/wrapper.rs @@ -702,19 +702,23 @@ impl Wrapper

{ .lock() .editor(AsyncExecutor { execute_background: Arc::new({ - let wrapper = wrapper.clone(); + let wrapper = Arc::downgrade(&wrapper); move |task| { - let task_posted = wrapper.schedule_background(Task::PluginTask(task)); - nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + if let Some(wrapper) = wrapper.upgrade() { + let task_posted = wrapper.schedule_background(Task::PluginTask(task)); + nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + } } }), execute_gui: Arc::new({ - let wrapper = wrapper.clone(); + let wrapper = Arc::downgrade(&wrapper); move |task| { - let task_posted = wrapper.schedule_gui(Task::PluginTask(task)); - nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + if let Some(wrapper) = wrapper.upgrade() { + let task_posted = wrapper.schedule_gui(Task::PluginTask(task)); + nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + } } }), }) diff --git a/src/wrapper/vst3/inner.rs b/src/wrapper/vst3/inner.rs index add0a1a1f..6d25bd3b4 100644 --- a/src/wrapper/vst3/inner.rs +++ b/src/wrapper/vst3/inner.rs @@ -332,19 +332,23 @@ impl WrapperInner

{ .lock() .editor(AsyncExecutor { execute_background: Arc::new({ - let wrapper = wrapper.clone(); + let wrapper = Arc::downgrade(&wrapper); move |task| { - let task_posted = wrapper.schedule_background(Task::PluginTask(task)); - nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + if let Some(wrapper) = wrapper.upgrade() { + let task_posted = wrapper.schedule_background(Task::PluginTask(task)); + nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + } } }), execute_gui: Arc::new({ - let wrapper = wrapper.clone(); + let wrapper = Arc::downgrade(&wrapper); move |task| { - let task_posted = wrapper.schedule_gui(Task::PluginTask(task)); - nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + if let Some(wrapper) = wrapper.upgrade() { + let task_posted = wrapper.schedule_gui(Task::PluginTask(task)); + nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + } } }), })