mirror of
https://github.com/Xevion/rust-sdl2-emscripten.git
synced 2025-12-06 13:16:21 -06:00
2b0a19e02e85b9a9c5c5372323f83bace5544e8e
rust-sdl2-emscripten
This is an experimental repository while testing a Rust + SDL2 project built with Emscripten.
-
hello-rust-sdl2-wasm - A bit of a weird repository, I'm not sure that the creator knows Rust that well, but it compiles. Note that the
asmjs-unknown-emscriptentarget is deprecated, and you should usewasm32-unknown-emscripteninstead. You'll need to change all the files, flags etc. to make it match. -
build.sh - One of the core files in this repository, it builds the project with Emscripten. Note all the flags available for modifying the behavior of the build.
Goals
- Reproducible SDL2 Emscripten Builds
- This ensures that the project can iterate safely and be inspected in a safe environment, free from errors. Helps ensure errors are isolated to the machine or build script.
- SDL2 Extensions
- Image
- Mixer
- TTF
- GFX
- All of these libraries are common and necessary for a lot of projects. Ensuring they work is important.
- Example of External Javascript Interop
- The basic ability to provide some kind of Javascript binding would be important for a decent web-based project or game.
- The ability to use localStorage, fetch, or some browser-only API would be important.
- Windows, MacOS, Linux Builds
- Simple ability to provide multi-platform builds in addition to the WASM build.
Concept
- A decent codebase without extras or warnings. Straightforward build process for Windows, Linux, and WASM.
- Note: Cross-compiling for Windows is a bit of a pain, but it's possible. That said, GitHub Actions can handle Windows builds natively.
- While SDL2 has annoying as fuck lifetimes, Emscripten callback loop imbibes even worse static lifetimes that are damn near impossible to satisfy.
- A simple example of a game loop, input handling, and rendering.
- Pausing functionality, native-only quit.
- FPS counter toggle (TTF example).
- Sprites with Atlas
- Resizable Canvas
- Javascript Interop
- LocalStorage
- Fetch
Resources
- KyleMiles/Rust-SDL-Emscripten-Template/
- Has some special javascript interop code
- gregbuchholz/RuSDLem
- One of the few with a demo available.
- tung/ruggrogue
- A very large game example, great codebase, documentation, online player.
- arskiy/chess
- Image usage, decent code example
- Has more advanced javascript config and examples to look at.
- deckarep/flappy-rust
- Image + Mixer Usage, possibly GFX & TTF
- aelred/tetris
- No idea how well it works overall, but it has a lot more advanced Emscripten bindings.
- Contains multiple sub-projects, including a web server. Uses SDL2 TTF & Mixer.
- See the REST functions for Emscripten.
Description
Languages
Rust
64.2%
HTML
22.8%
Shell
9.1%
SCSS
2.3%
JavaScript
1.6%