From f5acfd0787fecc5b908ed70b35983611ddf6a9e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 16 Oct 2024 11:37:58 +0200 Subject: [PATCH] stashed --- frontend/render_v2/rs/src/main.rs | 54 +++++++++++++------ .../src/app/main/ui/workspace/viewport.cljs | 4 +- frontend/src/app/render_v2.cljs | 14 ++++- frontend/src/app/render_v2/rs.cljs | 25 +++++---- frontend/src/app/render_v2/rs.js | 52 +++++++++--------- 5 files changed, 91 insertions(+), 58 deletions(-) diff --git a/frontend/render_v2/rs/src/main.rs b/frontend/render_v2/rs/src/main.rs index 6d49ffd0f..f5e108332 100644 --- a/frontend/render_v2/rs/src/main.rs +++ b/frontend/render_v2/rs/src/main.rs @@ -109,10 +109,14 @@ fn render_rect(surface: &mut skia::Surface, rect: skia::Rect, color: skia::Color let mut paint = skia::Paint::default(); paint.set_style(skia::PaintStyle::Fill); paint.set_color(color); - paint.set_anti_alias(true); + // paint.set_anti_alias(true); surface.canvas().draw_rect(rect, &paint); } +fn render_rect_ref(surface: &mut skia::Surface, rect: &skia::Rect, paint: &skia::Paint) { + surface.canvas().draw_rect(rect, paint); +} + /// This is called from JS after the WebGL context has been created. #[no_mangle] pub extern "C" fn init(width: i32, height: i32) -> Box { @@ -242,11 +246,11 @@ pub unsafe extern "C" fn draw_shapes( text_paint.set_style(skia_safe::paint::Style::StrokeAndFill); text_paint.set_stroke_width(1.0); - let mut path_paint = skia::Paint::default(); - path_paint.set_color(skia_safe::Color::BLACK); - path_paint.set_anti_alias(true); - path_paint.set_stroke_width(1.0); - path_paint.set_style(PaintStyle::Stroke); + // let mut path_paint = skia::Paint::default(); + // path_paint.set_color(skia_safe::Color::BLACK); + // path_paint.set_anti_alias(true); + // path_paint.set_stroke_width(1.0); + // path_paint.set_style(PaintStyle::Stroke); // let svg_canvas = skia_safe::svg::Canvas::new(skia_safe::Rect::from_size((10000, 10000)), None); @@ -257,28 +261,48 @@ pub unsafe extern "C" fn draw_shapes( for rect in buf.iter() { let r = skia::Rect::new(rect.left, rect.top, rect.right, rect.bottom); + let color = skia::Color::from_argb( (rect.a * 255.0) as u8, rect.r as u8, rect.g as u8, rect.b as u8, ); - render_rect(&mut state.surface, r, color); let mut paint = skia::Paint::default(); paint.set_style(skia::PaintStyle::Fill); paint.set_color(color); - paint.set_anti_alias(true); + + // render_rect_ref(&mut state.surface, &r, &paint); + state.surface.canvas().draw_rect(&r, &paint); + // render_rect(&mut state.surface, r, color); + + // paint.set_anti_alias(true); + // state.surface.canvas().draw_rect(r, &paint); + state.surface.canvas().draw_text_align( + String::from("Lorem ipsum"), + (rect.left, rect.top), + &state.default_font, + &paint, + skia::utils::text_utils::Align::Left, + ); + + // let mut paint = skia::Paint::default(); + // paint.set_style(skia::PaintStyle::Fill); + // paint.set_color(color); + // paint.set_anti_alias(true); + // svg_canvas.draw_rect(r, &paint); // pdf_canvas.draw_rect(r, &paint); - text_paint.set_color(color); - state.surface.canvas().draw_str( - "SKIA TEXT", - (rect.left, rect.top), - &state.default_font, - &text_paint, - ); + // text_paint.set_color(color); + // state.surface.canvas().draw_str( + // "SKIA TEXT", + // (rect.left, rect.top), + // &state.default_font, + // &text_paint, + // ); + // svg_canvas.draw_str("SKIA TEXT", (rect.left, rect.top), &state.default_font, &text_paint); // pdf_canvas.draw_str("SKIA TEXT", (rect.left, rect.top), &state.default_font, &text_paint); diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index b7d594410..a4ee20d09 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -272,9 +272,9 @@ (when (render-v2/is-enabled?) ;; set up canvas and first render (mf/with-effect - [canvas-ref vbox'] + [canvas-ref] (let [canvas (mf/ref-val canvas-ref)] - (when (and (some? canvas) (some? vbox')) + (when (some? canvas) (-> (p/then (render-v2/init) (fn [] (mf/set-ref-val! canvas-init? true) diff --git a/frontend/src/app/render_v2.cljs b/frontend/src/app/render_v2.cljs index 0e1c9e85e..1f5c758c5 100644 --- a/frontend/src/app/render_v2.cljs +++ b/frontend/src/app/render_v2.cljs @@ -35,7 +35,12 @@ ;; Rust (contains? cf/flags :render-v2-rs) - (render-v2-rs/set-canvas canvas vbox zoom base-objects))) + (do + (js/performance.mark "rs-set-canvas-start") + (render-v2-rs/set-canvas canvas vbox zoom base-objects) + (js/performance.mark "rs-set-canvas-end") + (let [duration (.-duration (js/performance.measure "rs-set-canvas" "rs-set-canvas-start" "rs-set-canvas-end"))] + (js/console.log "Rust set-canvas" duration))))) (defn draw-canvas [vbox zoom base-objects] @@ -46,7 +51,12 @@ ;; Rust (contains? cf/flags :render-v2-rs) - (render-v2-rs/draw-canvas vbox zoom base-objects))) + (do + (js/performance.mark "rs-draw-canvas-start") + (render-v2-rs/draw-canvas vbox zoom base-objects) + (js/performance.mark "rs-draw-canvas-end") + (let [duration (.-duration (js/performance.measure "rs-draw-canvas" "rs-draw-canvas-start" "rs-draw-canvas-end"))] + (js/console.log "Rust draw-canvas" duration))))) (defn set-objects [vbox zoom base-objects] (cond diff --git a/frontend/src/app/render_v2/rs.cljs b/frontend/src/app/render_v2/rs.cljs index 9bf1a143b..fd797f1ed 100644 --- a/frontend/src/app/render_v2/rs.cljs +++ b/frontend/src/app/render_v2/rs.cljs @@ -61,7 +61,7 @@ [vbox zoom] (let [alloc-rects (gobj/get ^js internal-module "_alloc_rects") free_rects (gobj/get ^js internal-module "_free_rects") - shape-count 20000 + shape-count 5548 heap (gobj/get ^js internal-module "HEAPF32") ;; Each F32 are 4 bytes ;; Each rect has: @@ -74,28 +74,27 @@ (free_rects shapes-ptr shape-count)) (let - [ptr (alloc-rects shape-count) - padding 16 - width 64 - height 64] + [ptr (alloc-rects shape-count)] (doseq [index (take shape-count (iterate inc 0))] (let [mem (js/Float32Array. (.-buffer heap) (+ ptr (* rect-bytes index)) rect-bytes) - x1 (* index (+ padding width)) - x2 (+ x1 width) - y1 (+ padding height) - y2 (+ y1 height)] + x1 (rand-int 1024) + x2 (+ x1 (rand-int 256)) + y1 (rand-int 1024) + y2 (+ y1 (rand-int 256))] (set! shapes-ptr ptr) (set! shapes-size shape-count) - (.set mem (js/Float32Array. (clj->js [x1 y1 x2 y2 255 0 0 1]))) + (.set mem (js/Float32Array. (clj->js [0 0 64 64 255 0 0 1]))) + ;; (.set mem (js/Float32Array. (clj->js [(* index 72) 0 (+ (* index 72) 64) 64 255 0 0 1]))) + ;; (.set mem (js/Float32Array. (clj->js [x1 y1 x2 y2 (rand-int 255) (rand-int 255) (rand-int 255) 1]))) ))) (draw-canvas vbox zoom nil))) (defn set-canvas [canvas vbox zoom objects] (let [gl (gobj/get ^js internal-module "GL") - context (.getContext canvas "webgl2" {"antialias" true - "depth" true - "stencil" true + context (.getContext canvas "webgl2" {;; "antialias" true + ;; "depth" true + ;; "stencil" false "alpha" true}) ;; Register the context with emscripten handle (.registerContext gl context {"majorVersion" 2}) diff --git a/frontend/src/app/render_v2/rs.js b/frontend/src/app/render_v2/rs.js index a4c27962c..695c5cf6a 100644 --- a/frontend/src/app/render_v2/rs.js +++ b/frontend/src/app/render_v2/rs.js @@ -8850,7 +8850,7 @@ var wasmImports = { /** @export */ invoke_iiii, /** @export */ - invoke_iiiiffii, + invoke_iiiiffiii, /** @export */ invoke_iiiii, /** @export */ @@ -8892,7 +8892,7 @@ var wasmImports = { /** @export */ invoke_viiii, /** @export */ - invoke_viiiiffii, + invoke_viiiiffiii, /** @export */ invoke_viiiii, /** @export */ @@ -9042,28 +9042,6 @@ function invoke_iii(index,a1,a2) { } } -function invoke_viffi(index,a1,a2,a3,a4) { - var sp = stackSave(); - try { - getWasmTableEntry(index)(a1,a2,a3,a4); - } catch(e) { - stackRestore(sp); - if (!(e instanceof EmscriptenEH)) throw e; - _setThrew(1, 0); - } -} - -function invoke_viiiiffii(index,a1,a2,a3,a4,a5,a6,a7,a8) { - var sp = stackSave(); - try { - getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8); - } catch(e) { - stackRestore(sp); - if (!(e instanceof EmscriptenEH)) throw e; - _setThrew(1, 0); - } -} - function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) { var sp = stackSave(); try { @@ -9163,10 +9141,32 @@ function invoke_iif(index,a1,a2) { } } -function invoke_iiiiffii(index,a1,a2,a3,a4,a5,a6,a7) { +function invoke_iiiiffiii(index,a1,a2,a3,a4,a5,a6,a7,a8) { var sp = stackSave(); try { - return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7); + return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8); + } catch(e) { + stackRestore(sp); + if (!(e instanceof EmscriptenEH)) throw e; + _setThrew(1, 0); + } +} + +function invoke_viffi(index,a1,a2,a3,a4) { + var sp = stackSave(); + try { + getWasmTableEntry(index)(a1,a2,a3,a4); + } catch(e) { + stackRestore(sp); + if (!(e instanceof EmscriptenEH)) throw e; + _setThrew(1, 0); + } +} + +function invoke_viiiiffiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9) { + var sp = stackSave(); + try { + getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9); } catch(e) { stackRestore(sp); if (!(e instanceof EmscriptenEH)) throw e;