From 2f80d337ad9644db8897e9a69ce7252f880544f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Fri, 17 Jan 2025 13:40:23 +0100 Subject: [PATCH] :bug: Fix WebGL warning when switching pages --- frontend/src/app/render_wasm/api.cljs | 11 +++++------ render-wasm/src/main.rs | 6 ++++++ render-wasm/src/mem.rs | 6 ++++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index efbcc3376..01c14a0ec 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -460,11 +460,6 @@ :stencil true :alpha true}) -(defn clear-canvas - [] - ;; TODO: perform corresponding cleaning - ) - (defn resize-viewbox [width height] (h/call internal-module "_resize_viewbox" width height)) @@ -488,10 +483,14 @@ ;; Initialize Wasm Render Engine (h/call internal-module "_init" (/ (.-width ^js canvas) dpr) (/ (.-height ^js canvas) dpr)) (h/call internal-module "_set_render_options" flags dpr)) - (set! (.-width canvas) (* dpr (.-clientWidth ^js canvas))) (set! (.-height canvas) (* dpr (.-clientHeight ^js canvas)))) +(defn clear-canvas + [] + ;; TODO: perform corresponding cleaning + (h/call internal-module "_clean_up")) + (defn set-canvas-background [background] (let [rgba (rgba-from-hex background 1)] diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index 90bbc6852..461b22d19 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -40,6 +40,12 @@ pub extern "C" fn init(width: i32, height: i32) { } } +#[no_mangle] +pub extern "C" fn clean_up() { + unsafe { STATE = None } + mem::free_bytes(); +} + #[no_mangle] pub extern "C" fn set_render_options(debug: u32, dpr: f32) { let state = unsafe { STATE.as_mut() }.expect("got an invalid state pointer"); diff --git a/render-wasm/src/mem.rs b/render-wasm/src/mem.rs index ea0df45fc..0fc0eaa83 100644 --- a/render-wasm/src/mem.rs +++ b/render-wasm/src/mem.rs @@ -15,8 +15,10 @@ pub extern "C" fn alloc_bytes(len: usize) -> *mut u8 { } pub fn free_bytes() { - let buffer = unsafe { BUFFERU8.take() }.expect("uninitialized buffer"); - std::mem::drop(buffer); + if unsafe { BUFFERU8.is_some() } { + let buffer = unsafe { BUFFERU8.take() }.expect("uninitialized buffer"); + std::mem::drop(buffer); + } } pub fn buffer_ptr() -> *mut u8 {