Rust is a good language for gamedev, it's low-level, performant, but also guarantees at compile time that you are not making mistakes in the memory management.
No more data races, undefined behaviours, null pointers, and more, while still retaining C++ level performance.
Doesn't that sound good?
It's only natural then, even though Rust is so young, that the open source game engine ecosystem in Rust is quite florid, and that many people interested in cutting edge gamedev tech are developing their experiments in Rust.
The most mature, and most popular libraries are from the Piston project, then there are Amethyst, an actual game engine WIP, and Anima, another one, which have each got their own interesting experimental bits.
A project to develop a modular game engine, basically many small, useful libraries that can be used together.
A few of them:
- Dyon - dynamically typed scripting language
- conrod - Immediate UI
- piston2d-graphics - 2d graphics, supports multiple backends
- editor interfaces
- many library bindings, like freetype
- ai, behaviour trees
- many graphics backends
For more look here.
If you're interested in Data Driven game engines you should keep an eye on this project. It's inspired by the engine that used to be called BitSquid, and is now Autodesk Stingray.
The discussion which happens on the Amethyst gitter and github issues has spawned, amongst other useful libraries, a parallel ECS, specs.
The discussion on implementing a thread safe ECS that ended up becoming specs IMO was really interesting and still worth taking a look at.
You can find more info on the homepage, the github repo and the gitter chat.
An engine focused on also being a community. They plan to have REPL to be able to change anything in the game while it's running.
Still very much a work in progress, it's got a website and a github repo.
Since you are reading ShaderCat, I assume you're interested in Graphics Programming and 3d rendering.
There are a bunch of wrappers around sdl, OpenGL and similar, and various rendering libraries in Rust.
I'd say it's the main rendering library available for Rust. It supports a variety of backends, but it's still very much a work in progress. High-performance, safe, bindless API.
It's got a blog, a repo, and a gitter chat.
A stateless rendering framework, aiming for a simple and elegant API. At the moment it has one opengl backend.
A safe, low-level wrapper for Vulkan,
Probably the best overview for it is this presentation on the Rust forums.
A safe wrapper for OpenGL, glium, that allows you to use OpenGL, without having to use raw OpenGL calls.
Entity Component Systems
There are many ECS made in Rust. Many are experiments, that have since been abandoned.
specs is probably the most active. While it's a stand-alone project, it is used as the ECS by Amethyst. You can keep up with progress by checking its gitter chat.
There are many more WIP ECS around, here is a benchmark project, ecs_bench, and a few more living ECS:
Some of the Ametyst docs are very useful discussion about ECS in general.
3d Formats Loaders
There are other engines, some unfinished and unmaintained, other collections of useful bits and pieces, you can search for them on cargo.
Also there is a list here.
As you can see every projects tend to have its own gitter chats, everything is new and not quite finished, but pretty shiny ;)
Also, the rust gamedev community has got an irc channel #gamedev @ irc.mozilla.org:6697, best place to keep up to date.
Comments? Give me a shout at @shadercat.
To get the latest post updates subscribe to the ShaderCat newsletter.
You can support my writing on ShaderCat's Patreon.