diff --git a/examples/tetris/.gitignore b/examples/tetris/.gitignore new file mode 100644 index 0000000000..6838c98f1d --- /dev/null +++ b/examples/tetris/.gitignore @@ -0,0 +1,3 @@ +tetris +tetris.wasm +main diff --git a/examples/tetris/README.md b/examples/tetris/README.md index bc3c796bad..06fcba5e96 100644 --- a/examples/tetris/README.md +++ b/examples/tetris/README.md @@ -14,4 +14,36 @@ sudo apt install libgl-dev v -b js_browser examples/tetris/tetris.js.v ``` -And then open `index.html` with your favourite web browser. \ No newline at end of file +And then open `index.html` with your favourite web browser. + + +## Compiling to WASM + +1. Install Emscripten from https://emscripten.org/docs/getting_started/downloads.html + +2. Make sure that the environment in your shell is setup correctly, +i.e. that `emcc --version` works. +```sh +. /opt/emsdk/emsdk_env.sh +emcc --version +``` + +3. Compile the game to WASM: +```sh +v -skip-unused -prod -os wasm32_emscripten examples/tetris/` +``` + +4. Copy the generated `tetris` file to `index.js` +This can be done once. Note that this step will be removed soon, when +the option `-os wasm32_emscripten` becomes better integrated: +```sh +cp examples/tetris/tetris examples/tetris/tetris.js +``` + +5. Run/test the game: +```sh +emrun examples/tetris/index.html +``` + +Once you have run the game, you can make changes, +then just recompile (step 3), and refresh the game in your browser. diff --git a/examples/tetris/index.html b/examples/tetris/index.html index b3880194c1..595b8ca6e8 100644 --- a/examples/tetris/index.html +++ b/examples/tetris/index.html @@ -1,4 +1,17 @@ + + + + + + + + V Tetris + - \ No newline at end of file + + + diff --git a/vlib/gg/gg.c.v b/vlib/gg/gg.c.v index d865504e66..73d42b3aed 100644 --- a/vlib/gg/gg.c.v +++ b/vlib/gg/gg.c.v @@ -16,6 +16,8 @@ $if windows { #include "windows.h" } +#flag wasm32_emscripten --embed-file @VEXEROOT/examples/assets/fonts/RobotoMono-Regular.ttf@/assets/fonts/RobotoMono-Regular.ttf + // call Windows API to get screen size fn C.GetSystemMetrics(int) int @@ -58,6 +60,7 @@ pub: create_window bool // window_user_ptr voidptr window_title string + html5_canvas_name string = 'canvas' borderless_window bool always_on_top bool bg_color gx.Color @@ -465,7 +468,7 @@ pub fn new_context(cfg Config) &Context { fail_userdata_cb: gg_fail_fn cleanup_userdata_cb: gg_cleanup_fn window_title: &char(cfg.window_title.str) - html5_canvas_name: &char(cfg.window_title.str) + html5_canvas_name: &char(cfg.html5_canvas_name.str) width: cfg.width height: cfg.height sample_count: cfg.sample_count