Noah Petherbridge
48fc40ade4
* Add RGBA color blending support in WASM build. * Initial texture caching API for Canvas renderer engine. The WASM build writes the chunk caches as a "data:image/png" base64 URL on the browser's sessionStorage, for access to copy into the Canvas. * Separated the ClickEvent from the MouseEvent (motion) in the WASM event queue system, to allow clicking and dragging. * Added the EscapeKey handler, which will abruptly terminate the WASM application, same as it kills the window in the desktop build. * Optimization fix: I discovered that if the user clicks and holds over a single pixel when drawing a level, repeated Set() operations were firing meaning multiple cache invalidations. Not noticeable on PC but on WebAssembly it crippled the browser. Now if the cursor isn't moving it doesn't do anything. |
||
---|---|---|
.. | ||
index.html | ||
main_wasm.go | ||
Makefile | ||
README.md | ||
server.go | ||
wasm_exec.js |
WebAssembly Port
Build and Test
Change to the wasm/ folder and type make
to build doodle.wasm
To test it with a local Go server, cd to the wasm/ folder and run
go run server.go
and visit http://localhost:8080/
Copy the fonts
and assets
folders from the project root to the
wasm/ directory so they're available over HTTP.
wasm_exec.js
To update the wasm_exec.js to match your version of Go:
# Fedora: install golang-misc
sudo dnf install golang-misc
# Copy the wasm_exec.js
cp $(go env GOROOT)/misc/wasm/wasm_exec.js ./
Font Support
Fonts are implemented as CSS embedded fonts configured in
wasm/index.html
The font family name should match the filename, sans .ttf extension, for example "DejaVuSans-Bold". Doodle's internal logic converts a FontFilename string like "./fonts/DejaVuSans.ttf" into the base name to use as the font family. It also has fallbacks for sans-serif and serif in case of any problems.
Known Bugs and Limitations
- github.com/kirsle/golog
- The detection of an interactive terminal is broken in WASM.
terminal.IsTerminal(int(os.Stdout.Fd()))
- As a workaround, comment it out and hardcode to
false
- Userdir
- For WASM we'll want to use localStorage to store user drawings instead of the userdir.
- Wallpaper support
- WASM can't use os.Open to read the wallpaper image, so will need another method to load the image.
- Texture caching support isn't implemented yet to hold the four corner textures of a wallpaper.
- As a workaround, added a
wallpaper.ready
boolean and relevant functions exit early for WASM so wallpapers don't render at all.