doodle/wasm
Noah Petherbridge c5c85330de WASM Event Queue
* Refactor the event system in the WASM render engine to serialize the
  async JavaScript events into a channel, so that queued events are read
  off serially in the main loop similar to SDL. This fixes keyboard
  input issues, altho if you type really fast some input keys get lost.
2019-06-26 20:33:24 -07:00
..
index.html Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
main_wasm.go WASM Event Queue 2019-06-26 20:33:24 -07:00
Makefile Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
README.md Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
server.go Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
wasm_exec.js Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00

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.