From 9a44bd0967ed092f339e94c792db4c7603f585e6 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Tue, 17 Jun 2025 14:06:46 +0200 Subject: [PATCH] :books: Add schemas and links to render-wasm README --- render-wasm/README.md | 40 ++++++++++++++++-- .../docs/images/architecture_schema.png | Bin 0 -> 26132 bytes render-wasm/docs/images/rust_wasm_schema.png | Bin 0 -> 35803 bytes render-wasm/docs/visual_regression_tests.md | 6 ++- 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 render-wasm/docs/images/architecture_schema.png create mode 100644 render-wasm/docs/images/rust_wasm_schema.png diff --git a/render-wasm/README.md b/render-wasm/README.md index c0df8d0825..e433b27cd1 100644 --- a/render-wasm/README.md +++ b/render-wasm/README.md @@ -1,8 +1,20 @@ -# render-wasm +# Penpot WASM render -Canvas-based WebAssembly render engine for Penpot. +This is the canvas-based WebAssembly render engine for Penpot. -This is a Rust crate that targets [Emscripten](https://emscripten.org/) (`wasm32-unknown-emscripten`). Underneath, it uses Skia via [custom binaries](https://github.com/penpot/skia-binaries/releases/) of the [rust-skia crate](https://github.com/rust-skia/rust-skia). +## Rust & Emscripten + +This project is a Rust crate that targets [Emscripten](https://emscripten.org/) (`wasm32-unknown-emscripten`). + +We use `wasm32-unknown-emscripten` compilation target: +* It compiles Rust code into WASM +* It generates the JavaScript code (“glue”) to load and run the WASM code + +![How Rust, Emscripten, and WASM are connected](docs/images/rust_wasm_schema.png) + +### Skia + +We use Skia, an Open Source 2D graphics library. In particular, the render engine uses Skia via [custom binaries](https://github.com/penpot/skia-binaries/releases/) of the [rust-skia crate](https://github.com/rust-skia/rust-skia). ## How to build @@ -13,13 +25,33 @@ cd penpot/render-wasm ./build ``` +You can also use `./watch` to run the build on every change. + The build script will compile the project and copy the `.js` and `.wasm` files to their correct location within the frontend app. +![Architecture overview](docs/images/architecture_schema.png) + + Edit your local `frontend/resources/public/js/config.js` to add the following flags: - `enable-feature-render-wasm` to enable this render engine. - `enable-render-wasm-dpr` (optional), to enable using the device pixel ratio. -## Docs +## How to test + +We currently have two types of tests: + +- Unit tests + +```sh +cd penpot/render-wasm +./test +``` + +- [Visual Regression Test](./docs/visual_regression_tests.md) + +## Technical documentation - [Serialization](./docs/serialization.md) +- [Tile Rendering](./docs/tile_rendering.md) +- [Texts](./docs/texts.md) diff --git a/render-wasm/docs/images/architecture_schema.png b/render-wasm/docs/images/architecture_schema.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd15e804a4d5c87ea53bc0bf2f5dbb995d2034c GIT binary patch literal 26132 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 U(^5_}hp~^irK+t`bkipE-^d+!z5oCK literal 0 HcmV?d00001 diff --git a/render-wasm/docs/images/rust_wasm_schema.png b/render-wasm/docs/images/rust_wasm_schema.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fc6be539a5cb961dd839e35990d2f84cf929ec GIT binary patch literal 35803 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 F{{n6Ud>sG) literal 0 HcmV?d00001 diff --git a/render-wasm/docs/visual_regression_tests.md b/render-wasm/docs/visual_regression_tests.md index 63dcc98f67..599ea658dd 100644 --- a/render-wasm/docs/visual_regression_tests.md +++ b/render-wasm/docs/visual_regression_tests.md @@ -5,10 +5,12 @@ ## Run the tests -The tests are located in their own Playwright project, `render-wasm`. To run them, go to the `frontend` dir and execute Playwright passing the `--project` flag: +The tests are located in their own Playwright project, `render-wasm`. + +To run them, go to the `frontend` dir and execute Playwright passing the `--project` flag. To run them using the `--ui` flag, run the tests **out of the tmux window**. ```zsh -cd frontend +cd penpot/frontend npx playwright test --ui --project=render-wasm ```