rin

an open source toolkit for creative expression with code, based on the rust programming language

Features

Safe and fast OpenGL abstractions

Use OpenGL without ever leaking it's state. rin tracks the OpenGL state internally and only does the minimum changes possible when you set any properties from anywhere. No need for push/pops or guards of any kind just set the properties you want to get a new renderer and draw with it.

PBR Materials

rin comes with physically based rendering materials based on a roughness/metallicness workflow based on the GLTF reference implementation which means that their use is pretty standard making it easy to import assets like 3d models, materials or maps created for other engines like unreal engine or unity.

Rust

rin is based on Rust, a systems language that provides elegant solutions to problems like error handling or memory management. Among other many features, Rust enums or iterators allow to implement certain designs in a much more concise way than in other languages and make certain tasks much easier and readable without compromissing performance.

Memory and thread safety

Rust is a memory and thread safe language which means that you won't ever see again a segmentation fault or have thread data race issues. Multithreaded programming to speed up some tasks is easy and the compiler and Rust data sharing structures automatically take care of maiking sure that there's no wrong multithread or memory accesses.

Powerful event system

Rin provides an event management system based on ideas from reactive programming and rust iterators which allow to transform events into other types, filter them by certain conditions, debug and process the events in an easy safe and readable way.

Easy to use external dependencies

Rust, makes it super easy to use any external dependency. Just add the name of the crate (Rust's libraries) you want to use to the Cargo.toml cnfig file in the root of your project and the next time you compile the crate will be downloaded and compiled with your application

You can find thousands of crates in the official rust repository,
crates.io

Modular

Rin is divided in several modules that can be used independently. If your application for example uses openGL but not video you don't need to use the full rin crate but you can import whatever modules you are going to use.

Some modules also have features that can be enabled from the application cargo config file allowing even more fine grained modularity