0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-07 15:39:42 -05:00
This commit is contained in:
Belén Albeza 2024-10-16 11:37:58 +02:00
parent 4939bc06ac
commit f5acfd0787
5 changed files with 91 additions and 58 deletions

View file

@ -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<State> {
@ -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);

View file

@ -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)

View file

@ -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

View file

@ -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})

View file

@ -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;