mirror of
https://github.com/Xevion/rust-sdl2-emscripten.git
synced 2025-12-08 10:08:26 -06:00
55 lines
3.1 KiB
Markdown
55 lines
3.1 KiB
Markdown
# rust-sdl2-emscripten
|
|
|
|
This is an experimental repository while testing a Rust + SDL2 project built with Emscripten.
|
|
|
|
- [hello-rust-sdl2-wasm](https://github.com/awwsmm/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-emscripten` target is deprecated, and you should use `wasm32-unknown-emscripten` instead. You'll need to change all the files, flags etc. to make it match.
|
|
|
|
- [build.sh](./scripts/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
|
|
|
|
- [X] 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
|
|
- [X] 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/](https://github.com/KyleMiles/Rust-SDL-Emscripten-Template/)
|
|
- Has some special javascript interop code
|
|
- [gregbuchholz/RuSDLem](https://github.com/gregbuchholz/RuSDLem)
|
|
- One of the few with a [demo](https://gregbuchholz.github.io/) available.
|
|
- [tung/ruggrogue](https://github.com/tung/ruggrogue/)
|
|
- A very large game example, great codebase, documentation, online player.
|
|
- [arskiy/chess](https://github.com/arskiy/chess/)
|
|
- Image usage, decent code example
|
|
- Has more advanced javascript config and examples to look at.
|
|
- [deckarep/flappy-rust](https://github.com/deckarep/flappy-rust/)
|
|
- Image + Mixer Usage, possibly GFX & TTF
|
|
- [aelred/tetris](https://github.com/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](https://github.com/aelred/tetris/blob/master/tetris/src/rest.rs#L99) for Emscripten. |