Its high performance and low-level capabilities make Rust an ideal choice in this field. Searching for graphics reveals bindings for OpenGL (gl, glfw-sys), Core Graphics, gfx, gdk, gtk (http://gtk-rs.org), or the minimal Gtk+ library mg, and others. conrod is a 2D GUI library and relm is an asynchronous, GTK+-based GUI library, inspired by Elm. gtk is the most advanced library, but at the time of writing a complete cross-platform GUI toolkit is not yet available.
Have a look at the http://arewegameyet.com website to see what the current status is on the Rust game front. There is a modular game engine called piston (https://github.com/PistonDevelopers/piston), chipmunk 2D, and bindings for SDL2 and Allegro5. kiss3d (see http://kiss3d.org) is a crate for a simple 3D game engine. A number of physics (such as ncollide) and math (such as nalgebra and cgmath) crates exist that can be of use here.
Here are the steps for a simple app that uses piston to draw a blue circle:
- Create a new project with cargo new piston101 -bin.
- Add piston_window = "0.61.0" to the [dependencies] section of Cargo.toml.
- Replace the code in src\main.rs with this:
extern crate piston_window; use piston_window::*; fn main() { let mut window: PistonWindow = WindowSettings::new("Hello Piston!", [640, 480]) .exit_on_esc(true).build().unwrap(); while let Some(event) = window.next() { window.draw_2d(&event, |context, graphics| { clear([1.0; 4], graphics); ellipse([0.0, 0.0, 1.0, 0.5], [0.0, 0.0, 100.0, 100.0], context.transform, graphics); }); } }
- Do a cargo run in the piston101 project folder. This will download tens of crates on which piston_window depends, compile them, compile the piston101 app, and then the following window is shown:
