doodle/wasm
Noah Petherbridge d658359240 Switch github.com/kirsle/golog to git.kirsle.net/go/log
* New logger module supports js/wasm build by skipping the dependency on
  ssh/terminal (which detected interactive consoles, not applicable to
  JS). In WASM the logs go to the browser console and ANSI color codes
  not needed.
2019-12-22 18:34:31 -08:00
..
index.html Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
main_wasm.go Cut lib/render into its own package, change all imports 2019-12-22 18:21:58 -08:00
Makefile Initial WebAssembly Build Target 2019-06-26 18:40:40 -07:00
README.md Switch github.com/kirsle/golog to git.kirsle.net/go/log 2019-12-22 18:34:31 -08:00
server.go Demo Running Level as Title Screen Wallpaper 2019-06-27 22:59:36 -07:00
wasm_exec.js Update wasm_exec.js from latest Go release 2019-12-22 18:15:09 -08: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

  • git.kirsle.net/go/log
    • 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.