Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge with /r/rust_gamedev/wiki/index #104

Closed
erlend-sh opened this issue Sep 2, 2018 · 2 comments

Comments

@erlend-sh
Copy link
Contributor

commented Sep 2, 2018

The mods over at https://www.reddit.com/r/rust_gamedev/ have agreed to deprecate the sub-reddit's wiki in favour of pointing to AreWeGameYet as the canonical source for Rust game dev resources. We'll need to port over any listed projects that are not yet listed here, e.g. Unrust, Quicksilver and Crayon.

Happy to do the porting but I'd strongly prefer to wait until #12 is done as I expect that'll greatly reduce the amount of HTML I'll need to muddle my way through.

@doppioslash

This comment has been minimized.

Copy link
Owner

commented Sep 3, 2018

Yeah probably best to wait for #12. Working on it.

@erlend-sh

This comment has been minimized.

Copy link
Contributor Author

commented Jan 7, 2019

I believe AWGY has reached feature-parity with the Reddit wiki page now. I've edited it to link here. Below is the latest revision of that page for safe-keeping.

### Welcome to Rust gamedev!

Please abide by the  
[Rust community code of conduct](https://github.com/rust-lang/rust/wiki/Note-development-policy#conduct).

Chat (irc.mozilla.org):  
[#rust-gamedev](http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-gamedev)

Also see [Are we game yet?](http://arewegameyet.com/)

# Top-shelf projects

This list is intended to introduce a newbie quickly to the full spectrum of more-or-less-production-quality Rust gamedev libraries.  If the question is "what should I use to do X", this list should outline the best choices.  There's usually a couple different options for doing what you want to do.

While some of the projects listed are not finished and not perfect, they should all be *practical and easily usable*.

All the projects here should work on Windows, Linux and Mac unless specified otherwise.

Last updated December, 2017

## Engines/frameworks

 * [amethyst](https://github.com/amethyst/amethyst) -- 3D game engine, very cool, under heavy development
 * [crayon](https://github.com/shawnscode/crayon) -- A small, portable and extensible game framework
 * [ggez](https://github.com/ggez/ggez)  -- 2D game framework inspired by LÖVE
 * [piston](https://github.com/PistonDevelopers/piston) -- 2D/3D game framework, many useful components to combine
 * [quicksilver](https://github.com/ryanisaacg/quicksilver) -- 2D game framework designed to work on both desktop and webassembly

## 3D Graphics

Low-level and complete

 * [ash](https://github.com/MaikKlein/ash) -- An idiomatic but unsafe Vulkan binding
 * [dacite](https://gitlab.com/dennis-hamester/dacite) -- A mostly-safe Vulkan library for Rust
 * [gfx-rs](https://gitter.im/gfx-rs/gfx-rs) -- A low-level, cross-platform graphics abstraction library
 * [gl](https://github.com/brendanzab/gl-rs/) -- Unsafe OpenGL binding
 * [glium](https://github.com/glium/glium) -- Safe OpenGL binding, not actually abandoned
 * [luminance](https://github.com/phaazon/luminance-rs) -- Safe OpenGL-based graphics framework
 * [vulkano](https://gitter.im/tomaka/vulkano) -- Safe Vulkan binding, under development

Higher-level

 * [kiss3d](https://github.com/sebcrozet/kiss3d) -- Simple and straightforward 3D graphics
 * [three-rs](https://github.com/three-rs/three) -- Very simple high-level 3D rendering

## Audio

Playing:

 * [alto](https://github.com/jpernst/alto) -- Idiomatic OpenAL binding
 * [ears](https://github.com/jhasse/ears) -- Easy sound API built atop OpenAL
 * [cpal](https://github.com/tomaka/cpal) -- Low-level audio output in pure Rust
 * [rodio](https://github.com/tomaka/rodio) -- Higher level audio subsystem in pure Rust, plays ogg, flac and wav

Decoding:

 * [claxon](https://github.com/ruuda/claxon) -- FLAC decoder
 * [hound](https://github.com/ruuda/hound) -- WAV decoder
 * [lewton](https://github.com/RustAudio/lewton) -- Ogg Vorbis decoder
 * [minimp3](https://github.com/germangb/minimp3-rs) -- Rust bindings for the minimp3 C library


## Windowing and input

Generally you need one of these to produce a window and give your graphics library something to draw on.

 * [gilrs](https://gitlab.com/gilrs-project/gilrs) -- Cross-platform library for joystick/gamepad input
 * [glutin](https://github.com/tomaka/glutin/) -- Pure Rust OpenGL context provider, built upon winit
 * [sdl2](https://github.com/Rust-SDL2/rust-sdl2) -- Bindings to the SDL2 library
 * [winit](https://github.com/tomaka/winit) -- Pure Rust window creation and event handling

## Math

These libraries all provide about the same functionality with about the same speed, the difference is style.  nalgebra starts from abstract math and implements it in code, and so is very nice if you know the math and can be hard to approach if you don't.  euclid starts with basic code doing necessary math things, providing operations without much abstraction.  cgmath is somewhere in between.

 * [cgmath](https://github.com/brendanzab/cgmath)
 * [euclid](https://github.com/servo/euclid)
 * [nalgebra](http://nalgebra.org/)

Then there is:

 * [mint](https://github.com/kvark/mint) -- Interoperability layer for math libraries

## Collision

 * [collision-rs](https://github.com/kvark/collision-rs) -- A collision detection extension to cgmath
 * [ncollide](http://ncollide.org/) -- 2D and 3D collision detection engine using nalgebra

## Physics

 * [nphysics](http://nphysics.org/) -- Physics engine using nalgebra and ncollide
 * [rhusics](https://github.com/Rhuagh/rhusics) -- Physics library for use in Specs, using cgmath and collision-rs

## Image files

 * [image](https://github.com/PistonDevelopers/image.git) -- loader for various image formats

## Mesh files

 * [genmesh](https://github.com/gfx-rs/genmesh) -- Mesh generation helper
 * [obj](https://github.com/kvark/obj/) -- Wavefront obj parser for Rust. It handles both .obj and .mtl formats.
 * [wavefront_obj](https://github.com/PistonDevelopers/wavefront_obj) -- A parser for the wavefront .obj file format

## Entity component system

Obligatory excessively simple benchmark here: https://github.com/lschmierer/ecs_bench

 * [specs](https://github.com/slide-rs/specs) -- Multithreaded and powerful entity component system
 * [calx_ecs](https://github.com/rsaarelm/calx-ecs) -- Single-threaded and simple
 * [froggy](https://github.com/kvark/froggy/)
 * [constellation](https://github.com/TomGillen/constellation)

## Scripting

 * [dyon](https://github.com/pistondevelopers/dyon) -- A rusty dynamically typed scripting language
 * [gluon](https://github.com/gluon-lang/gluon) -- A small, statically-typed, functional programming language designed for application embedding.
 * [hlua](https://github.com/tomaka/hlua) -- High-level wrapper for Lua, as safe as possible while being zero-cost
 * [rlua](https://github.com/chucklefish/rlua) -- High level safe bindings between Rust and Lua

# Useful tools

For things that are less vital but solve particular problems well

 * [aseprite](https://github.com/ggez/aseprite) -- Loader for the [aseprite](https://www.aseprite.org/) sprite editor
 * [ezing](https://github.com/michaelfairley/ezing) -- easing/interpolation functions
 * [lyon](https://github.com/nical/lyon) -- Tesselator to turn 2D shapes into meshes for GPU rendering
 * [noise](https://github.com/brendanzab/noise-rs) -- Noise generation functions
 * [pathfinding](https://rfc1149.net/devel/pathfinding.html) -- Pathfinding library for Rust
 * [rusttype](https://github.com/redox-os/rusttype) -- Truetype renderer
 * [tcod-rs](https://github.com/tomassedovic/tcod-rs) -- binding to libtcod, a.k.a. "The Doryen Library", a smallish library designed for writing roguelikes
 * [tiled](https://github.com/mattyhall/rs-tiled.git) -- Loader for the [Tiled](http://www.mapeditor.org/) tile map editor.

# Actual games

 * [A Snake's Tale](https://m12y.com/a-snakes-tale/) -- a small commercial puzzle game
 * [Dose Response](https://www.reddit.com/r/rust_gamedev/comments/a8js6o/dose_response_roguelike_game_written_in_rust/) -- A small roguelike where you play as a drug addict
 * [Sandspiel](https://sandspiel.club/) -- A falling sand game written in Rust+WebGL

# New things to keep an eye on

 * [tetra](https://github.com/17cupsofcoffee/tetra)
 * [nitric](https://github.com/torkleyy/nitric)


# Tutorials and howto's

## Piston

 * [Piston-Tutorials](https://github.com/PistonDevelopers/Piston-Tutorials)
 * [piston-examples](https://github.com/pistondevelopers/piston-examples)

## gfx-rs

 * https://suhr.github.io/gsgt/
 * https://wiki.alopex.li/LearningGfx -- a little out of date now, targets gfx 0.14, but mostly still valid

# Old stuff that needs to be sorted and culled

AI:

* [ai_behavior](https://github.com/PistonDevelopers/ai_behavior)

Animation:

* [interpolation](https://github.com/pistondevelopers/interpolation)
* [skeletal_animation](https://github.com/pistondevelopers/skeletal_animation)
* [sprite](https://github.com/pistondevelopers/sprite)

Asset pipeline:

* [gltf-rs](https://github.com/gltf-rs/gltf)

Audio & sound:

* [cpal](https://github.com/tomaka/cpal)
* [dsp-chain](https://github.com/RustAudio/dsp-chain)
* [ears](https://github.com/JeremyLetang/ears)
* [openal-rs](https://github.com/bjz/openal-rs)
* [oxcable](https://github.com/thenyeguy/oxcable)
* [pitch_calc](https://github.com/RustAudio/pitch_calc)
* [rust-dsp](https://github.com/PistonDevelopers/rust-dsp)
* [rust-media](https://github.com/pcwalton/rust-media)
* [rust-portaudio](https://github.com/jeremyletang/rust-portaudio)
* [rust-portmidi](https://github.com/musitdev/rust-portmidi)
* [rust-sndfile](https://github.com/jeremyletang/rust-sndfile)
* [time_calc](https://github.com/RustAudio/time_calc)
* [vorbis-rs](https://github.com/tomaka/vorbis-rs)

Engines:

* [amethyst](https://github.com/amethyst/amethyst)
* [ggez](https://github.com/ggez/ggez)
* [kiss3d](https://github.com/sebcrozet/kiss3d)
* [piston](https://github.com/pistondevelopers/piston)
* [tcod-rs](https://github.com/tomassedovic/tcod-rs)

Files & formats:

* [bincode](https://github.com/TyOverby/bincode)
* [image](https://github.com/PistonDevelopers/image)
* [piston_meta](https://github.com/pistondevelopers/meta)
* [rs-tiled](https://github.com/mattyhall/rs-tiled)
* [rust-ffmpeg](https://github.com/mewlips/rust-ffmpeg)
* [rust-media](https://github.com/pcwalton/rust-media)
* [rust-stb-image](https://github.com/acolley/rust-stb-image)
* [wavefront-obj](https://github.com/PistonDevelopers/wavefront-obj/)
* [xml-rs](https://github.com/netvl/xml-rs)
* [zip-rs](https://github.com/mvdnes/zip-rs)

Graphics:

* [balisong](https://github.com/ivanceras/balisong)
* [gfx-rs](https://github.com/gfx-rs/gfx-rs)
* [gfx_graphics](https://github.com/PistonDevelopers/gfx_graphics)
* [glium](https://github.com/tomaka/glium/)
* [glium_graphics](https://github.com/pistondevelopers/glium_graphics)
* [gl-rs](https://github.com/bjz/gl-rs)
* [graphics](https://github.com/PistonDevelopers/graphics)
* [luminance](https://github.com/phaazon/luminance-rs)
* [nrays](https://github.com/sebcrozet/nrays)
* [opengl_graphics](https://github.com/pistondevelopers/opengl_graphics)
* [sprite](https://github.com/pistondevelopers/sprite)

Math & physics:

* [beagle-rs](https://github.com/Popog/beagle-rs)
* [bulletrs](https://github.com/not-fl3/bulletrs)
* [cgmath-rs](https://github.com/bjz/cgmath-rs)
* [nalgebra](https://github.com/sebcrozet/nalgebra)
* [ncollide](https://github.com/sebcrozet/ncollide)
* [nphysics](https://github.com/sebcrozet/nphysics)
* [vecmath](https://github.com/PistonDevelopers/vecmath)

Entity component system:

* [ecs-rs](https://github.com/HeroesGrave/ecs-rs)
* [simple-ecs](https://github.com/johann2/simple-ecs)
* [simplecs](https://github.com/kvark/simplecs)

Network:

* [string-telephone](https://github.com/AngryLawyer/string-telephone)
* [wire](https://github.com/TyOverby/wire)

Window:

* [glutin](https://github.com/tomaka/glutin)
* [glutin_window](https://github.com/PistonDevelopers/glutin_window)
* [glfw-rs](https://github.com/bjz/glfw-rs)
* [glfw_window](https://github.com/PistonDevelopers/glfw_window)
* [rust-sdl2](https://github.com/AngryLawyer/rust-sdl2)
* [rust-sfml](https://github.com/jeremyletang/rust-sfml)
* [sdl2_window](https://github.com/pistondevelopers/sdl2_window)

Other useful libraries:

* [bitmap-rs](https://github.com/cmr/bitmap-rs)
* [cam](https://github.com/PistonDevelopers/cam)
* [color-rs](https://github.com/bjz/color-rs)
* [dyon](https://github.com/pistondevelopers/dyon)
* [drag_controller](https://github.com/PistonDevelopers/drag_controller)
* [fps_counter](https://github.com/PistonDevelopers/fps_counter)
* [freetype-rs](https://github.com/pistondevelopers/freetype-rs)
* [genmesh](https://github.com/gfx-rs/genmesh)
* [noise-rs](https://github.com/bjz/noise-rs)
* [read_color](https://github.com/PistonDevelopers/read_color)
* [reminisce](https://github.com/TomBebbington/reminisce)
* [rust-hl-lua](https://github.com/tomaka/rust-hl-lua)
* [rust-opencl](https://github.com/luqmana/rust-opencl)
* [texture-packer](https://github.com/PistonDevelopers/texture-packer)
* [rust-openvr](https://github.com/rust-openvr/rust-openvr)

Other stuff:

* [Hematite](https://github.com/pistondevelopers/hematite)
* [Playform](https://github.com/bfops/playform)
* [Reforge](https://github.com/tedsta/reforge)
* [Rust logo in 3D](https://github.com/cmr/rust-logo-3d)
* [VisualRust](https://github.com/pistondevelopers/visualrust)
* [ue4-static-rust](https://github.com/shadowmint/ue4-static-plugin/)

@erlend-sh erlend-sh closed this Jan 7, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.