After writing an OpenGL renderer in C++ to learn about graphics rendering and extend my knowledge of C++, I got interested in the Rust programming language and lower level graphics APIs.
As part of my master's thesis, where I took a look into the ecosystem of Rust related to game development as a whole, I specialised in implementing a basic renderer as a practical exercise.
Low level graphics library (gfx-rs) and a later partial rewrite directly using Vulkan 1.1 (with Validation Layers, Swapchains and Imageless Framebuffers)
Command Pools / Command Buffers
Render Passes and sub-pass dependencies
Graphics Pipelines
Semaphores and Fences
Preparing multiple frames in flight
Advanced techniques in Rust
Careful usage of unsafe keyword for low level interactions that require it
Controlling lifetimes with careful handling of ownership, Drop traits and ManuallyDrop to ensure the Vulkan instance is deinitialised according to spec
Cross-compilation between Windows and Linux
The source code is available on GitHub: https://github.com/saschabrunner/Rust-Game-Engine
The initial version used gfx-rs, a low-level rendering library in Rust which heavily oriented itself on Vulkan. To bridge the gaps, I heavily cross-referenced the library's documentation and samples with Vulkan resources from Khronos, Nvidia and GPUOpen (AMD).
For the rewrite in Vulkan I used the ash library which provides language bindings to the Vulkan API in Rust. I cross-referenced my implementation with the guide on vulkan-tutorial.com. This guide was a great resource for me to understand all the low-level concepts required to set up a renderer with Vulkan and I mapped all the concepts demonstrated in that guide from C++ to Rust myself.